Browse Source

Protection from runtime errors during statistics processing

pull/7991/head
Andrii Shvaika 4 years ago
parent
commit
c7babf2085
  1. 16
      application/src/main/java/org/thingsboard/server/service/stats/DefaultRuleEngineStatisticsService.java

16
application/src/main/java/org/thingsboard/server/service/stats/DefaultRuleEngineStatisticsService.java

@ -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);
} }
} }
}); });

Loading…
Cancel
Save