Skip to content

Commit

Permalink
journal timeline
Browse files Browse the repository at this point in the history
  • Loading branch information
matjaz99 committed Jun 28, 2023
1 parent eabc5ec commit 81b2000
Show file tree
Hide file tree
Showing 9 changed files with 138 additions and 171 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
## 2.4.5-SNAPSHOT

* [CHANGE] Moved all configuration parameters from configuration view to providers
* [FEATURE] Journal Timeline
* [ENHANCEMENT] Added link to active alerts directly from providers
* [ENHANCEMENT] Added POJO support in MongoDB client
* [ENHANCEMENT] Added configuration option for `ALERTMONITOR_MONGODB_CONNECT_TIMEOUT_SEC` and `ALERTMONITOR_MONGODB_READ_TIMEOUT_SEC`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,11 +235,9 @@ public DEvent getEvent(String uid) {

try {
MongoDatabase db = mongoClient.getDatabase(AmProps.ALERTMONITOR_MONGODB_DB_NAME);
// MongoCollection<Document> collection = db.getCollection("journal");
MongoCollection<DEvent> collection = db.getCollection("journal", DEvent.class);

DEvent event = collection.find(Filters.eq("uid", uid)).first();
// DEvent event = convertToDEvent(doc);
DAO.getInstance().removeWarningFromAllProviders("mongo");
AmMetrics.alertmonitor_db_queries_total.labels("journal").inc();
return event;
Expand All @@ -252,40 +250,6 @@ public DEvent getEvent(String uid) {
return null;
}

private DEvent convertToDEvent(Document doc) {
DEvent event = new DEvent();
event.setUid(doc.getString("uid"));
event.setCorrelationId(doc.getString("correlationId"));
event.setTimestamp(((Number) doc.get("timestamp")).longValue());
event.setFirstTimestamp(((Number) doc.get("firstTimestamp")).longValue());
event.setLastTimestamp(((Number) doc.get("lastTimestamp")).longValue());
event.setClearTimestamp(((Number) doc.get("clearTimestamp")).longValue());
event.setClearUid(doc.getString("clearUid"));
event.setCounter(doc.getInteger("counter"));
event.setSource(doc.getString("source"));
event.setUserAgent(doc.getString("userAgent"));
event.setAlertname(doc.getString("alertname"));
event.setInfo(doc.getString("info"));
event.setInstance(doc.getString("instance"));
event.setHostname(doc.getString("hostname"));
event.setNodename(doc.getString("nodename"));
event.setJob(doc.getString("job"));
event.setTags(doc.getString("tags"));
event.setSeverity(doc.getString("severity"));
event.setPriority(doc.getString("priority"));
event.setGroup(doc.getString("group"));
event.setEventType(doc.getString("eventType"));
event.setProbableCause(doc.getString("probableCause"));
event.setCurrentValue(doc.getString("currentValue"));
event.setUrl(doc.getString("url"));
event.setDescription(doc.getString("description"));
event.setStatus(doc.getString("status"));
event.setGeneratorUrl(doc.getString("generatorUrl"));
event.setPrometheusId(doc.getString("prometheusId"));
event.setOtherLabelsString(doc.getString("otherLabelsString"));
return event;
}

@Override
public void cleanDB() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,15 @@ public void setProviderConfig(ProviderConfig providerConfig) {
this.providerConfig = providerConfig;
}

/**
* Update provider config
* @param key key
* @param newValue new value
*/
@Override
public void updateParam(String key, String newValue) {
if (key.equalsIgnoreCase(PrometheusDataProvider.DP_PARAM_KEY_SERVER)) {
if (newValue.endsWith("/")) newValue = newValue.substring(0, newValue.length()-1);
} else if (key.equalsIgnoreCase(PrometheusDataProvider.DP_PARAM_KEY_SYNC_INTERVAL_SEC)) {

} else if (key.equalsIgnoreCase(PrometheusDataProvider.DP_PARAM_KEY_CLIENT_CONNECT_TIMEOUT_SEC)) {

} else if (key.equalsIgnoreCase(PrometheusDataProvider.DP_PARAM_KEY_CLIENT_READ_TIMEOUT_SEC)) {

} else if (key.equalsIgnoreCase(PrometheusDataProvider.DP_PARAM_KEY_CLIENT_POOL_SIZE)) {

}
if (prometheusHttpClientPool == null) return;
prometheusHttpClientPool.destroy();
Expand Down Expand Up @@ -213,7 +210,7 @@ public boolean synchronizeAlerts(List<DEvent> alertList, boolean sync) {
* Add new alert to active alerts. This method is called when first alert
* of this type occurs (according to correlationId). First and last timestamps
* are set to time of reception (timestamp). Also, new tags are added to tagMap.
* @param event
* @param event new event
*/
public void addActiveAlert(DEvent event) {

Expand Down Expand Up @@ -241,7 +238,7 @@ public void addActiveAlert(DEvent event) {
* (according to existing alert).
* Alert then finally replaces reference in activeAlert map so it points to new
* alert.
* @param newEvent last received notificatioin
* @param newEvent last received event
*/
public void updateActiveAlert(DEvent newEvent) {
DEvent existingEvent = activeAlerts.get(newEvent.getCorrelationId());
Expand All @@ -256,7 +253,7 @@ public void updateActiveAlert(DEvent newEvent) {
/**
* Clear arrived and active alert must be removed. Before removing,
* all alerts in journal must have clearTimestamp corrected to a point of clear event.
* @param activeAlert
* @param activeAlert active alert
*/
public void removeActiveAlert(DEvent activeAlert) {

Expand Down Expand Up @@ -343,6 +340,12 @@ public List<DEvent> getActiveAlarmsList(String severity) {

}

public List<DEvent> getNumberOfAlertsInLastHour() {
// DAO.getInstance().getDataManager().addToJournal(events);
// TODO
return null;
}

/**
* Return list of tags.
* @return list
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,6 @@ public void restartSyncTimer() {

stopSyncTimer();

// TODO handle exception
Integer interval = Integer.parseInt(providerConfig.getParam(DP_PARAM_KEY_SYNC_INTERVAL_SEC));
AmMetrics.alertmonitor_sync_interval_seconds.labels(providerConfig.getName()).set(interval);
if (interval == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,21 +117,6 @@ public List<ConfigParam> getProviderConfigParams(AbstractDataProvider abstractDa
return configParamsList;
}

// @Deprecated
// public String getPromServer() {
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getProviderConfig().getParam(PrometheusDataProvider.DP_PARAM_KEY_SERVER);
// }
//
// @Deprecated
// public void setPromServer(String server) {
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// if (server.endsWith("/")) server = server.substring(0, server.length()-1);
// adp.getProviderConfig().setParam(PrometheusDataProvider.DP_PARAM_KEY_SERVER, server);
// LogFactory.getLogger().info("UiConfigBean: prometheus server changed: " + server);
//// Growl.showInfoGrowl("Configuration updated", "");
// }

public void setDataRetention(String time) {
try {
AmProps.ALERTMONITOR_DATA_RETENTION_DAYS = Integer.parseInt(time);
Expand Down Expand Up @@ -171,17 +156,13 @@ public String getMongoDbConnectionString() {
return s;
}

// public void setHttpReadTimeout(String interval) {
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// adp.getProviderConfig().setParam(PrometheusDataProvider.DP_PARAM_KEY_CLIENT_READ_TIMEOUT_SEC, interval);
// LogFactory.getLogger().info("UiConfigBean: http client read timeout changed: " + interval);
// }
//
// public String getHttpReadTimeout() {
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getProviderConfig().getParam(PrometheusDataProvider.DP_PARAM_KEY_CLIENT_READ_TIMEOUT_SEC);
// }
public String getMongoDbConnectTimeout() {
return Integer.toString(AmProps.ALERTMONITOR_MONGODB_CONNECT_TIMEOUT_SEC);
}

public String getMongoDbReadTimeout() {
return Integer.toString(AmProps.ALERTMONITOR_MONGODB_READ_TIMEOUT_SEC);
}

public void setKafkaEnabled(boolean kafkaEnabled) {
AmProps.ALERTMONITOR_KAFKA_ENABLED = kafkaEnabled;
Expand Down Expand Up @@ -211,104 +192,14 @@ public String getKafkaTopic() {
return AmProps.ALERTMONITOR_KAFKA_TOPIC;
}

// public String reloadPrometheusAction() {
//
// LogFactory.getLogger().debug("UiConfigBean: reloadPrometheusAction called");
//
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// PrometheusHttpClient api = adp.getHttpClientPool().getClient();
//
// try {
// api.reload();
// } catch (Exception e) {
// LogFactory.getLogger().error("UiConfigBean: reloadPrometheusAction exception: ", e);
// } finally {
// adp.getHttpClientPool().returnClient(api);
// }
//
// return "";
//
// }






/* STATISTICS */

// public long getWhMsgCount() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getWebhookMessagesReceivedCount();
// }

// public long getJournalCount() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getJournalCount();
// }

// public long getJournalSize() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getJournalSize();
// }
//
// public long getAlarmsCount() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getRaisingEventCount();
// }

// public long getClearsCount() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getClearingEventCount();
// }

// public void setSyncInterval(String interval) {
// // TODO implement
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// Integer i = Integer.parseInt(interval);
// adp.getProviderConfig().setParam(PrometheusDataProvider.DP_PARAM_KEY_SYNC_INTERVAL_SEC, String.valueOf(i));
// LogFactory.getLogger().info("UiConfigBean: sync interval changed: " + i);
//// Growl.showInfoGrowl("Configuration updated", "");
// adp.restartSyncTimer();
// }
//
// public String getSyncInterval() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getProviderConfig().getParam(PrometheusDataProvider.DP_PARAM_KEY_SYNC_INTERVAL_SEC);
// }

// public String getLastSyncTime() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return Formatter.getFormatedTimestamp(adp.getLastSyncTimestamp(), AmDateFormat.TIME); }
//
// public String getSyncSuccessCount() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return Integer.toString(adp.getSyncSuccessCount()); }

// public String getSyncFailedCount() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return Integer.toString(adp.getSyncFailedCount()); }
//
// public int getActiveAlarmsCount(String severity) {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getActiveAlarmsList(severity).size();
// }
//
// public int getAllActiveAlarmsCount() {
// // TODO moved to provider
// AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
// return adp.getActiveAlerts().size();
// }


public int getAllAlarmingInstancesCount() {
AbstractDataProvider adp = DAO.getInstance().getDataProvider(selectedDataProvider);
Expand Down Expand Up @@ -367,7 +258,6 @@ public void buttonAction(String provider) {
} catch (IOException e) {
System.out.println("IOException " + e.getMessage());
}
// return "/active";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package si.matjazcerkvenik.alertmonitor.web.uibeans;

import org.primefaces.model.timeline.TimelineEvent;
import org.primefaces.model.timeline.TimelineModel;
import si.matjazcerkvenik.alertmonitor.data.DAO;
import si.matjazcerkvenik.alertmonitor.model.DEvent;
import si.matjazcerkvenik.alertmonitor.model.DTarget;
Expand All @@ -28,6 +30,8 @@
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -124,4 +128,84 @@ public String getUpStatusTooltip() {
return "All jobs are down";
}



private TimelineModel<String, ?> model;
private LocalDateTime start;
private LocalDateTime end;

public TimelineModel<String, ?> getModel() {

List<DEvent> dEvents = getInstanceJournalAlarms();

HashMap<String, List<DEvent>> tempMap = new HashMap<>();

for (DEvent e : dEvents) {
System.out.println("getModel: event: " + e.toString());
List<DEvent> list = tempMap.getOrDefault(e.getCorrelationId(), new ArrayList<>());
list.add(e);
tempMap.put(e.getCorrelationId(), list);
}

// create timeline model
model = new TimelineModel<>();

// set initial start / end dates for the axis of the timeline
start = LocalDate.of(-140, 1, 1).atStartOfDay();
end = LocalDate.of(-140, 1, 2).atStartOfDay();

for (String s : tempMap.keySet()) {
for (DEvent e : tempMap.get(s)) {
TimelineEvent event = TimelineEvent.builder()
.data(e.getInfo())
.startDate(start)
.endDate(end)
.editable(true)
.group(e.getAlertname())
.styleClass("sdfg".toLowerCase())
.build();

model.add(event);
}
}



// // groups
// String[] names = new String[]{"User 1", "User 2", "User 3", "User 4", "User 5", "User 6"};
//
// for (String name : names) {
// LocalDateTime end = start.minusHours(12).withMinute(0).withSecond(0).withNano(0);
//
// for (int i = 0; i < 5; i++) {
// LocalDateTime start = end.plusHours(Math.round(Math.random() * 5));
// end = start.plusHours(4 + Math.round(Math.random() * 5));
//
// long r = Math.round(Math.random() * 2);
// String availability = (r == 0 ? "Unavailable" : (r == 1 ? "Available" : "Maybe"));
//
// // create an event with content, start / end dates, editable flag, group name and custom style class
// TimelineEvent event = TimelineEvent.builder()
// .data(availability)
// .startDate(start)
// .endDate(end)
// .editable(true)
// .group(name)
// .styleClass(availability.toLowerCase())
// .build();
//
// model.add(event);
// }
// }
return model;
}

public LocalDateTime getStart() {
return start;
}

public LocalDateTime getEnd() {
return end;
}

}
Loading

0 comments on commit 81b2000

Please sign in to comment.