Skip to content
This repository was archived by the owner on Sep 1, 2024. It is now read-only.

Commit f401386

Browse files
committed
Event linked id introduced
1 parent bd41f6c commit f401386

11 files changed

Lines changed: 83 additions & 30 deletions

File tree

eu.dariolucia.reatmetric.api/src/main/java/eu/dariolucia/reatmetric/api/messages/OperationalMessage.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,15 @@ public final class OperationalMessage extends AbstractDataItem implements Serial
4343

4444
private final Severity severity;
4545

46-
public OperationalMessage(IUniqueId internalId, Instant generationTime, String id, String message, String source, Severity severity, Object extension) {
46+
private final Integer linkedEntityId;
47+
48+
public OperationalMessage(IUniqueId internalId, Instant generationTime, String id, String message, String source, Severity severity, Integer linkedEntityId, Object extension) {
4749
super(internalId, generationTime, extension);
4850
this.id = id;
4951
this.message = message;
5052
this.source = source;
5153
this.severity = severity;
54+
this.linkedEntityId = linkedEntityId;
5255
}
5356

5457
public String getId() {
@@ -67,13 +70,18 @@ public Severity getSeverity() {
6770
return severity;
6871
}
6972

73+
public Integer getLinkedEntityId() {
74+
return linkedEntityId;
75+
}
76+
7077
@Override
7178
public String toString() {
7279
return "OperationalMessage{" +
7380
"id='" + id + '\'' +
7481
", message='" + message + '\'' +
7582
", source='" + source + '\'' +
7683
", severity=" + severity +
84+
", linkedEntityId=" + linkedEntityId +
7785
", generationTime=" + generationTime +
7886
", internalId=" + internalId +
7987
'}';

eu.dariolucia.reatmetric.core/src/main/java/eu/dariolucia/reatmetric/core/api/IOperationalMessageBroker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@
2222

2323
public interface IOperationalMessageBroker {
2424

25-
OperationalMessage distribute(String id, String message, String source, Severity severity, Object[] additionalFields, boolean store) throws ReatmetricException;
25+
OperationalMessage distribute(String id, String message, String source, Severity severity, Object[] additionalFields, Integer linkedEntityId, boolean store) throws ReatmetricException;
2626

2727
}

eu.dariolucia.reatmetric.core/src/main/java/eu/dariolucia/reatmetric/core/impl/OperationalMessageBrokerImpl.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@
2626

2727
import java.rmi.RemoteException;
2828
import java.time.Instant;
29-
import java.util.ArrayList;
30-
import java.util.Collections;
31-
import java.util.List;
32-
import java.util.Map;
29+
import java.util.*;
3330
import java.util.concurrent.*;
3431
import java.util.concurrent.atomic.AtomicLong;
3532
import java.util.function.Predicate;
@@ -147,7 +144,22 @@ public void publish(LogRecord record) {
147144
} else if(record.getLevel().intValue() >= Level.WARNING.intValue()) {
148145
messageSeverity = Severity.WARN;
149146
}
150-
OperationalMessage om = new OperationalMessage(idToAssign, record.getInstant(), REATMETRIC_ID, record.getMessage(), shortenLoggerName(record.getLoggerName()), messageSeverity, null);
147+
// Check for parameters - Source
148+
String source;
149+
if(record.getParameters() != null && record.getParameters().length > 0 && record.getParameters()[0] != null) {
150+
// Source override
151+
source = Objects.toString(record.getParameters()[0]);
152+
} else {
153+
source = shortenLoggerName(record.getLoggerName());
154+
}
155+
// Check for parameters - Linked Entity ID
156+
Integer entityId = null;
157+
if(record.getParameters() != null && record.getParameters().length > 1 && record.getParameters()[1] instanceof Integer) {
158+
// Entity
159+
entityId = (Integer) record.getParameters()[1];
160+
}
161+
162+
OperationalMessage om = new OperationalMessage(idToAssign, record.getInstant(), REATMETRIC_ID, record.getMessage(), source, messageSeverity, entityId,null);
151163
try {
152164
distribute(Collections.singletonList(om), true);
153165
} catch (ReatmetricException e) {
@@ -177,9 +189,9 @@ public void close() throws SecurityException {
177189
}
178190

179191
@Override
180-
public OperationalMessage distribute(String id, String message, String source, Severity severity, Object[] additionalFields, boolean store) throws ReatmetricException {
192+
public OperationalMessage distribute(String id, String message, String source, Severity severity, Object[] additionalFields, Integer linkedId, boolean store) throws ReatmetricException {
181193
IUniqueId idToAssign = nextOperationalMessageId();
182-
OperationalMessage om = new OperationalMessage(idToAssign, Instant.now(), id, message, source, severity, additionalFields);
194+
OperationalMessage om = new OperationalMessage(idToAssign, Instant.now(), id, message, source, severity, linkedId, additionalFields);
183195
distribute(Collections.singletonList(om), store);
184196
return om;
185197
}

eu.dariolucia.reatmetric.driver.automation/src/main/java/eu/dariolucia/reatmetric/driver/automation/internal/ScriptExecutionManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public boolean initConnector(String connectorName, String[] keys, Object[] value
275275
private void logMessage(String message, Severity severity) {
276276
checkAborted();
277277
try {
278-
context.getOperationalMessageBroker().distribute("Script", message, fileName, severity, null, true);
278+
context.getOperationalMessageBroker().distribute("Script", message, fileName, severity, null, null, true);
279279
} catch (ReatmetricException e) {
280280
LOG.log(Level.SEVERE, "logMessage exception from automation " + fileName + ": " + e.getMessage(), e);
281281
}

eu.dariolucia.reatmetric.persist/src/main/java/eu/dariolucia/reatmetric/persist/services/AcknowledgedMessageArchive.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class AcknowledgedMessageArchive extends AbstractDataItemArchive<Acknowle
4242
"WHEN NOT MATCHED THEN INSERT (UniqueId,GenerationTime,MessageId,State,UserName,AcknowledgementTime,AdditionalData) VALUES (?,?,?,?,?,?,?)";
4343
private static final String LAST_ID_QUERY = "SELECT UniqueId FROM ACK_MESSAGE_TABLE ORDER BY UniqueId DESC FETCH FIRST ROW ONLY";
4444
private static final String RETRIEVE_BY_ID_QUERY = "SELECT a.UniqueId, a.GenerationTime, a.State, a.UserName, a.AcknowledgementTime, a.AdditionalData, " +
45-
"b.UniqueId, b.GenerationTime, b.Id, b.Text, b.Source, b.Severity, b.AdditionalData " +
45+
"b.UniqueId, b.GenerationTime, b.Id, b.Text, b.Source, b.Severity, b.LinkedEntityId, b.AdditionalData " +
4646
"FROM ACK_MESSAGE_TABLE as a JOIN OPERATIONAL_MESSAGE_TABLE as b " +
4747
"ON (a.MessageId = b.UniqueId) " +
4848
"WHERE a.UniqueId=?";
@@ -104,7 +104,7 @@ protected String buildRetrieveByIdQuery() {
104104
@Override
105105
protected String buildRetrieveQuery(Instant startTime, int numRecords, RetrievalDirection direction, AcknowledgedMessageFilter filter) {
106106
StringBuilder query = new StringBuilder("SELECT a.UniqueId, a.GenerationTime, a.State, a.UserName, a.AcknowledgementTime, a.AdditionalData, " +
107-
"b.UniqueId, b.GenerationTime, b.Id, b.Text, b.Source, b.Severity, b.AdditionalData " +
107+
"b.UniqueId, b.GenerationTime, b.Id, b.Text, b.Source, b.Severity, b.LinkedEntityId, b.AdditionalData " +
108108
"FROM ACK_MESSAGE_TABLE as a JOIN OPERATIONAL_MESSAGE_TABLE as b " +
109109
"ON (a.MessageId = b.UniqueId) " +
110110
"WHERE a.");
@@ -131,7 +131,7 @@ protected String buildRetrieveQuery(Instant startTime, int numRecords, Retrieval
131131
@Override
132132
protected String buildRetrieveQuery(Instant startTime, IUniqueId internalId, int numRecords, RetrievalDirection direction, AcknowledgedMessageFilter filter) {
133133
StringBuilder query = new StringBuilder("SELECT a.UniqueId, a.GenerationTime, a.State, a.UserName, a.AcknowledgementTime, a.AdditionalData, " +
134-
"b.UniqueId, b.GenerationTime, b.Id, b.Text, b.Source, b.Severity, b.AdditionalData " +
134+
"b.UniqueId, b.GenerationTime, b.Id, b.Text, b.Source, b.Severity, b.LinkedEntityId, b.AdditionalData " +
135135
"FROM ACK_MESSAGE_TABLE as a JOIN OPERATIONAL_MESSAGE_TABLE as b " +
136136
"ON (a.MessageId = b.UniqueId) " +
137137
"WHERE a.");

eu.dariolucia.reatmetric.persist/src/main/java/eu/dariolucia/reatmetric/persist/services/OperationalMessageArchive.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ public class OperationalMessageArchive extends AbstractDataItemArchive<Operation
3838

3939
private static final Logger LOG = Logger.getLogger(OperationalMessageArchive.class.getName());
4040

41-
private static final String STORE_STATEMENT = "INSERT INTO OPERATIONAL_MESSAGE_TABLE(UniqueId,GenerationTime,Id,Text,Source,Severity,AdditionalData) VALUES (?,?,?,?,?,?,?)";
41+
private static final String STORE_STATEMENT = "INSERT INTO OPERATIONAL_MESSAGE_TABLE(UniqueId,GenerationTime,Id,Text,Source,Severity,LinkedEntityId,AdditionalData) VALUES (?,?,?,?,?,?,?,?)";
4242
private static final String LAST_ID_QUERY = "SELECT UniqueId FROM OPERATIONAL_MESSAGE_TABLE ORDER BY UniqueId DESC FETCH FIRST ROW ONLY";
43-
private static final String RETRIEVE_BY_ID_QUERY = "SELECT UniqueId,GenerationTime,Id,Text,Source,Severity,AdditionalData FROM OPERATIONAL_MESSAGE_TABLE WHERE UniqueId=?";
43+
private static final String RETRIEVE_BY_ID_QUERY = "SELECT UniqueId,GenerationTime,Id,Text,Source,Severity,LinkedEntityId,AdditionalData FROM OPERATIONAL_MESSAGE_TABLE WHERE UniqueId=?";
4444
private static final String LAST_GENERATION_TIME_QUERY = "SELECT MAX(GenerationTime) FROM OPERATIONAL_MESSAGE_TABLE";
4545

4646
public OperationalMessageArchive(Archive controller) throws SQLException {
@@ -55,11 +55,16 @@ protected void setItemPropertiesToStatement(PreparedStatement storeStatement, Op
5555
storeStatement.setString(4, item.getMessage().length() > 255 ? item.getMessage().substring(0,255) : item.getMessage());
5656
storeStatement.setString(5, item.getSource());
5757
storeStatement.setShort(6, (short) item.getSeverity().ordinal());
58+
if(item.getLinkedEntityId() == null) {
59+
storeStatement.setNull(7, Types.INTEGER);
60+
} else {
61+
storeStatement.setInt(7, item.getLinkedEntityId());
62+
}
5863
Object extension = item.getExtension();
5964
if(extension == null) {
60-
storeStatement.setNull(7, Types.BLOB);
65+
storeStatement.setNull(8, Types.BLOB);
6166
} else {
62-
storeStatement.setBlob(7, toInputstream(item.getExtension()));
67+
storeStatement.setBlob(8, toInputstream(item.getExtension()));
6368
}
6469
}
6570

@@ -146,12 +151,16 @@ static OperationalMessage mapToItem(ResultSet rs, OperationalMessageFilter usedF
146151
String messageText = rs.getString(offset + 4);
147152
String messageSource = rs.getString(offset + 5);
148153
Severity severity = Severity.values()[rs.getShort(offset + 6)];
149-
Blob extensionBlob = rs.getBlob(offset + 7);
154+
Integer linkedEntityId = rs.getInt(offset + 7);
155+
if(rs.wasNull()) {
156+
linkedEntityId = null;
157+
}
158+
Blob extensionBlob = rs.getBlob(offset + 8);
150159
Object extension = null;
151160
if(extensionBlob != null && !rs.wasNull()) {
152161
extension = toObject(extensionBlob);
153162
}
154-
return new OperationalMessage(new LongUniqueId(uniqueId), toInstant(genTime), messageId, messageText, messageSource, severity, extension);
163+
return new OperationalMessage(new LongUniqueId(uniqueId), toInstant(genTime), messageId, messageText, messageSource, severity, linkedEntityId, extension);
155164
}
156165

157166
@Override

eu.dariolucia.reatmetric.persist/src/main/resources/schema.ddl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ CREATE TABLE OPERATIONAL_MESSAGE_TABLE (
55
Text VARCHAR(255) NOT NULL,
66
Source VARCHAR(32),
77
Severity SMALLINT NOT NULL,
8+
LinkedEntityId INT,
89
AdditionalData BLOB,
910
PRIMARY KEY (UniqueId)
1011
)

eu.dariolucia.reatmetric.persist/src/test/java/eu/dariolucia/reatmetric/persist/AcknowledgedMessageArchiveTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void testOperationalMessageStoreRetrieve() throws IOException, ArchiveException,
6161
IOperationalMessageArchive messageArchive = archive.getArchive(IOperationalMessageArchive.class);
6262
Instant t = Instant.now();
6363
// store one item
64-
OperationalMessage toStore = new OperationalMessage(new LongUniqueId(0), t, "msgId1", "Text message", "Source1", Severity.ALARM, new Object[0]);
64+
OperationalMessage toStore = new OperationalMessage(new LongUniqueId(0), t, "msgId1", "Text message", "Source1", Severity.ALARM, null, new Object[0]);
6565
messageArchive.store(toStore);
6666

6767
IAcknowledgedMessageArchive ackArchive = archive.getArchive(IAcknowledgedMessageArchive.class);

eu.dariolucia.reatmetric.persist/src/test/java/eu/dariolucia/reatmetric/persist/OperationalMessageArchiveTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ void testOperationalMessageStoreRetrieve() throws IOException, ArchiveException,
6363
IOperationalMessageArchive messageArchive = archive.getArchive(IOperationalMessageArchive.class);
6464
Instant t = Instant.now();
6565
// store one item
66-
messageArchive.store(new OperationalMessage(new LongUniqueId(0), t, "msgId1", "Text message", "Source1", Severity.ALARM, new Object[0]));
66+
messageArchive.store(new OperationalMessage(new LongUniqueId(0), t, "msgId1", "Text message", "Source1", Severity.ALARM, null, new Object[0]));
6767
Thread.sleep(2000);
6868
// retrieve: expected 1 item
6969
List<OperationalMessage> messages = messageArchive.retrieve(t.minusMillis(200), 10, RetrievalDirection.TO_FUTURE, null);
@@ -72,7 +72,7 @@ void testOperationalMessageStoreRetrieve() throws IOException, ArchiveException,
7272
assertEquals("Text message", messages.get(0).getMessage());
7373
assertEquals(Severity.ALARM, messages.get(0).getSeverity());
7474
// store one item
75-
messageArchive.store(new OperationalMessage(new LongUniqueId(1), t, "msgId2", "Text message", "Source2", Severity.INFO, new Object[] { "test", 13, Instant.ofEpochMilli(1000)}));
75+
messageArchive.store(new OperationalMessage(new LongUniqueId(1), t, "msgId2", "Text message", "Source2", Severity.INFO, 123, new Object[] { "test", 13, Instant.ofEpochMilli(1000)}));
7676
Thread.sleep(2000);
7777
// retrieve: expected 2 items
7878
messages = messageArchive.retrieve(t.minusMillis(200), 10, RetrievalDirection.TO_FUTURE, null);
@@ -97,7 +97,7 @@ void testOperationalMessageStoreRetrieve() throws IOException, ArchiveException,
9797
// last ID: expected 1
9898
assertEquals(1, messageArchive.retrieveLastId().asLong());
9999
// store one item
100-
messageArchive.store(new OperationalMessage(new LongUniqueId(2), t.plusSeconds(1), "msgId3", "Text message", "Source2", Severity.ALARM, new Object[] { "test", 13, Instant.ofEpochMilli(1000)}));
100+
messageArchive.store(new OperationalMessage(new LongUniqueId(2), t.plusSeconds(1), "msgId3", "Text message", "Source2", Severity.ALARM, null, new Object[] { "test", 13, Instant.ofEpochMilli(1000)}));
101101
Thread.sleep(2000);
102102
// retrieve: expected 3 items
103103
messages = messageArchive.retrieve(Instant.now(), 10, RetrievalDirection.TO_PAST, null);
@@ -107,9 +107,9 @@ void testOperationalMessageStoreRetrieve() throws IOException, ArchiveException,
107107
// store three items
108108
t = Instant.now().minusMillis(500);
109109
List<OperationalMessage> toStore = Arrays.asList(
110-
new OperationalMessage(new LongUniqueId(3), t, "msgId3", "Text message", "Source2", Severity.ALARM, new Object[] { }),
111-
new OperationalMessage(new LongUniqueId(4), t, "msgId4", "Text message special", "Source2", Severity.WARN, new Object[] { }),
112-
new OperationalMessage(new LongUniqueId(5), t, "msgId1", "Text message", "Source2", Severity.INFO, new Object[] { })
110+
new OperationalMessage(new LongUniqueId(3), t, "msgId3", "Text message", "Source2", Severity.ALARM, null, new Object[] { }),
111+
new OperationalMessage(new LongUniqueId(4), t, "msgId4", "Text message special", "Source2", Severity.WARN, null, new Object[] { }),
112+
new OperationalMessage(new LongUniqueId(5), t, "msgId1", "Text message", "Source2", Severity.INFO, null, new Object[] { })
113113
);
114114
messageArchive.store(toStore);
115115
Thread.sleep(2000);

eu.dariolucia.reatmetric.processing/src/main/java/eu/dariolucia/reatmetric/processing/impl/processors/EventProcessor.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public class EventProcessor extends AbstractSystemEntityProcessor<EventProcessin
5353
private boolean conditionTriggerState = false;
5454

5555
private boolean internallyTriggered = false;
56-
private List<String> internalSource = new LinkedList<>(); // nulls allowed
56+
private final List<String> internalSource = new LinkedList<>(); // nulls allowed
5757

5858
private Instant lastReportedEventTime = null;
5959

@@ -170,16 +170,20 @@ public List<AbstractDataItem> process(EventOccurrence newValue) {
170170
generatedStates.add(this.state);
171171
// Log the event if log is not suppressed
172172
if(definition.isLogEnabled()) {
173+
String logSource = this.state.getSource();
174+
if(logSource == null) {
175+
logSource = getPath().asString();
176+
}
173177
switch (definition.getSeverity()) {
174178
case ALARM:
175179
case ERROR:
176-
LOG.log(Level.SEVERE, "Event " + getPath() + " raised: " + getDefinition().getDescription() + " - Source: " + this.state.getSource());
180+
LOG.log(Level.SEVERE, "Event " + getPath() + " raised: " + getDefinition().getDescription(), new Object[] {logSource, getSystemEntityId()});
177181
break;
178182
case WARN:
179-
LOG.log(Level.WARNING, "Event " + getPath() + " raised: " + getDefinition().getDescription() + " - Source: " + this.state.getSource());
183+
LOG.log(Level.WARNING, "Event " + getPath() + " raised: " + getDefinition().getDescription(), new Object[] {logSource, getSystemEntityId()});
180184
break;
181185
case INFO:
182-
LOG.log(Level.INFO, "Event " + getPath() + " raised: " + getDefinition().getDescription() + " - Source: " + this.state.getSource());
186+
LOG.log(Level.INFO, "Event " + getPath() + " raised: " + getDefinition().getDescription(), new Object[] {logSource, getSystemEntityId()});
183187
break;
184188
}
185189
}

0 commit comments

Comments
 (0)