use of io.datarouter.storage.node.tableconfig.NodewatchConfiguration in project datarouter by hotpads.
the class NodeBuilder method build.
public <N extends NodeOps<PK, D>> N build() {
String databeanName = databeanSupplier.get().getDatabeanName();
String entityName = databeanName + "Entity";
String entityNodePrefix = null;
String nodeTableName = tableName != null ? tableName : databeanName;
NodewatchConfiguration tableConfig = null;
if (nodewatchConfigurationBuilder != null) {
tableConfig = nodewatchConfigurationBuilder.create(new ClientTableEntityPrefixNameWrapper(clientId.getName(), nodeTableName, entityNodePrefix));
}
NodeParams<PK, D, F> params = new NodeParamsBuilder<>(databeanSupplier, fielderSupplier).withClientId(clientId).withDiagnostics(enableDiagnosticsSupplier).withEntity(entityName, entityNodePrefix).withParentName(entityName).withTableName(nodeTableName).withSchemaVersion(schemaVersion).withTableConfiguration(tableConfig).withDisableForcePrimary(disableForcePrimary).withTag(tag).withDisableIntroducer(disableIntroducer).build();
EntityNodeParams<EK, DefaultEntity<EK>> entityNodeParams = new EntityNodeParams<>(clientId.getName() + "." + entityName, entityKeySupplier, DefaultEntity.supplier(entityKeySupplier), partitionerSupplier, entityName);
return nodeFactory.create(entityNodeParams, params);
}
use of io.datarouter.storage.node.tableconfig.NodewatchConfiguration 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);
}
use of io.datarouter.storage.node.tableconfig.NodewatchConfiguration in project datarouter by hotpads.
the class TableSizeMonitoringService method getStaleTableEntries.
public List<LatestTableCount> getStaleTableEntries() {
return datarouterLatestTableCountDao.scan().exclude(latestTableCount -> {
ClientTableEntityPrefixNameWrapper nodeName = new ClientTableEntityPrefixNameWrapper(latestTableCount.getKey().getClientName(), latestTableCount.getKey().getTableName(), null);
NodewatchConfiguration nodeConfig = tableConfigurationService.getTableConfigMap().get(nodeName);
return nodeConfig != null && !nodeConfig.isCountable;
}).include(this::checkStaleEntries).list();
}
Aggregations