use of io.datarouter.nodewatch.storage.alertthreshold.TableSizeAlertThresholdKey in project datarouter by hotpads.
the class TableSizeAlertThresholdHandler method displayThreshold.
@Handler(defaultHandler = true)
public Mav displayThreshold() {
Mav mav = new Mav(files.jsp.datarouter.nodewatch.thresholdSettingsJsp);
List<TableSizeAlertThreshold> thresholdSettings = new ArrayList<>();
for (PhysicalNode<?, ?, ?> node : datarouterNodes.getWritableNodes(clients.getClientIds())) {
String clientName = node.getClientId().getName();
var key = new TableSizeAlertThresholdKey(clientName, node.getFieldInfo().getTableName());
TableSizeAlertThreshold row = tableSizeAlertThresholdDao.find(key).orElse(new TableSizeAlertThreshold(key, 0L));
thresholdSettings.add(row);
}
mav.put("thresholdSettings", thresholdSettings);
mav.put("thresholdPath", paths.datarouter.nodewatch.threshold.toSlashedString());
return mav;
}
use of io.datarouter.nodewatch.storage.alertthreshold.TableSizeAlertThresholdKey in project datarouter by hotpads.
the class TableSizeMonitoringService method getAboveThresholdLists.
public Twin<List<CountStat>> getAboveThresholdLists() {
List<CountStat> aboveThresholdList = new ArrayList<>();
List<CountStat> abovePercentageList = new ArrayList<>();
for (PhysicalNode<?, ?, ?> node : datarouterNodes.getWritableNodes(clients.getClientIds())) {
ClientTableEntityPrefixNameWrapper nodeNames = new ClientTableEntityPrefixNameWrapper(node);
String tableName = nodeNames.getTableName();
String clientName = nodeNames.getClientName();
NodewatchConfiguration nodeConfig = null;
Long threshold = null;
boolean enablePercentChangeAlert = true;
boolean enableThresholdAlert = true;
nodeConfig = tableConfigurationService.getTableConfigMap().get(nodeNames);
if (nodeConfig != null) {
threshold = nodeConfig.maxThreshold;
enablePercentChangeAlert = nodeConfig.enablePercentageAlert;
enableThresholdAlert = nodeConfig.enableThresholdAlert;
}
// continue if the nodeConfig isCountable is set to false
if (nodeConfig != null && !nodeConfig.isCountable) {
continue;
}
List<TableCount> tableCountRecords = tableCountDao.getForTable(clientName, tableName);
if (tableCountRecords.size() < 2) {
continue;
}
Collections.sort(tableCountRecords, new TableCount.TableCountLatestEntryComparator());
TableCount latest = tableCountRecords.get(0);
TableCount previous = tableCountRecords.get(1);
if (previous.getNumRows() == 0) {
continue;
}
// skip if the table has records less than the count_threshold
if (smallEnoughToIgnore(latest.getNumRows()) && smallEnoughToIgnore(previous.getNumRows())) {
continue;
}
if (enableThresholdAlert) {
Optional<TableSizeAlertThreshold> thresholdEntry = tableSizeAlertThresholdDao.find(new TableSizeAlertThresholdKey(clientName, tableName));
// override manual thresholdEntry if exists
if (thresholdEntry.isPresent() && thresholdEntry.get().getMaxRows() > 0) {
threshold = thresholdEntry.get().getMaxRows();
}
// check if node numRows exceeds threshold
if (threshold != null && latest.getNumRows() >= threshold) {
aboveThresholdList.add(calculateStats(latest, threshold));
}
}
if (enablePercentChangeAlert) {
// check % growth if no absolute threshold set & !enablePercentChangeAlert
CountStat growthIncrease = calculateStats(latest, previous.getNumRows());
if (growthIncrease == null) {
continue;
}
if (Math.abs(growthIncrease.percentageIncrease) > PERCENTAGE_THRESHOLD) {
abovePercentageList.add(growthIncrease);
}
}
}
return new Twin<>(aboveThresholdList, abovePercentageList);
}
Aggregations