Protection from runtime errors during statistics processing

This commit is contained in:
Andrii Shvaika 2023-01-24 12:20:56 +02:00
parent f4a44e3928
commit c7babf2085

View File

@ -78,8 +78,8 @@ public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsS
public void reportQueueStats(long ts, TbRuleEngineConsumerStats ruleEngineStats) { public void reportQueueStats(long ts, TbRuleEngineConsumerStats ruleEngineStats) {
String queueName = ruleEngineStats.getQueueName(); String queueName = ruleEngineStats.getQueueName();
ruleEngineStats.getTenantStats().forEach((id, stats) -> { ruleEngineStats.getTenantStats().forEach((id, stats) -> {
TenantId tenantId = TenantId.fromUUID(id);
try { try {
TenantId tenantId = TenantId.fromUUID(id);
AssetId serviceAssetId = getServiceAssetId(tenantId, queueName); AssetId serviceAssetId = getServiceAssetId(tenantId, queueName);
if (stats.getTotalMsgCounter().get() > 0) { if (stats.getTotalMsgCounter().get() > 0) {
List<TsKvEntry> tsList = stats.getCounters().entrySet().stream() List<TsKvEntry> tsList = stats.getCounters().entrySet().stream()
@ -89,19 +89,19 @@ public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsS
tsService.saveAndNotifyInternal(tenantId, serviceAssetId, tsList, CALLBACK); tsService.saveAndNotifyInternal(tenantId, serviceAssetId, tsList, CALLBACK);
} }
} }
} catch (DataValidationException e) { } catch (Exception e) {
if (!e.getMessage().equalsIgnoreCase("Asset is referencing to non-existent tenant!")) { if (!"Asset is referencing to non-existent tenant!".equalsIgnoreCase(e.getMessage())) {
throw e; log.debug("[{}] Failed to store the statistics", id, e);
} }
} }
}); });
ruleEngineStats.getTenantExceptions().forEach((tenantId, e) -> { ruleEngineStats.getTenantExceptions().forEach((tenantId, e) -> {
TsKvEntry tsKv = new BasicTsKvEntry(e.getTs(), new JsonDataEntry("ruleEngineException", e.toJsonString()));
try { try {
TsKvEntry tsKv = new BasicTsKvEntry(e.getTs(), new JsonDataEntry("ruleEngineException", e.toJsonString()));
tsService.saveAndNotifyInternal(tenantId, getServiceAssetId(tenantId, queueName), Collections.singletonList(tsKv), CALLBACK); tsService.saveAndNotifyInternal(tenantId, getServiceAssetId(tenantId, queueName), Collections.singletonList(tsKv), CALLBACK);
} catch (DataValidationException e2) { } catch (Exception e2) {
if (!e2.getMessage().equalsIgnoreCase("Asset is referencing to non-existent tenant!")) { if (!"Asset is referencing to non-existent tenant!".equalsIgnoreCase(e2.getMessage())) {
throw e2; log.debug("[{}] Failed to store the statistics", tenantId, e2);
} }
} }
}); });