Browse Source

monitoring: show dashboard link on startup notification. Initial delay set for services to avoid spikes

pull/14605/head
Sergey Matvienko 6 months ago
parent
commit
9850e7a466
  1. 17
      monitoring/src/main/java/org/thingsboard/monitoring/ThingsboardMonitoringApplication.java
  2. 10
      monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringEntityService.java

17
monitoring/src/main/java/org/thingsboard/monitoring/ThingsboardMonitoringApplication.java

@ -50,7 +50,7 @@ public class ThingsboardMonitoringApplication {
@Value("${monitoring.monitoring_rate_ms}")
private int monitoringRateMs;
ScheduledExecutorService scheduler = ThingsBoardExecutors.newSingleThreadScheduledExecutor("monitoring-executor");
ScheduledExecutorService scheduler = ThingsBoardExecutors.newSingleThreadScheduledExecutor("monitoring");
public static void main(String[] args) {
new SpringApplicationBuilder(ThingsboardMonitoringApplication.class)
@ -63,12 +63,15 @@ public class ThingsboardMonitoringApplication {
entityService.checkEntities();
monitoringServices.forEach(BaseMonitoringService::init);
scheduler.scheduleWithFixedDelay(() -> {
monitoringServices.forEach(monitoringService -> {
monitoringService.runChecks();
});
}, 0, monitoringRateMs, TimeUnit.MILLISECONDS);
notificationService.sendNotification(new InfoNotification(":rocket: Monitoring started"));
for (int i = 0; i < monitoringServices.size(); i++) {
int initialDelay = (monitoringRateMs / monitoringServices.size()) * i;
BaseMonitoringService<?, ?> service = monitoringServices.get(i);
log.info("Scheduling initialDelay {}, fixedDelay {} for monitoring '{}' ", initialDelay, monitoringRateMs, service.getClass().getSimpleName());
scheduler.scheduleWithFixedDelay(service::runChecks, initialDelay, monitoringRateMs, TimeUnit.MILLISECONDS);
}
String publicDashboardUrl = entityService.getDashboardPublicLink();
notificationService.sendNotification(new InfoNotification(":rocket: <"+publicDashboardUrl+"|Monitoring> started"));
}
@EventListener(ContextClosedEvent.class)

10
monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringEntityService.java

@ -91,6 +91,8 @@ public class MonitoringEntityService {
@Value("${monitoring.calculated_fields.enabled:true}")
private boolean calculatedFieldsMonitoringEnabled;
DashboardId dashboardId = null;
public void checkEntities() {
RuleChain ruleChain = tbClient.getRuleChains(RuleChainType.CORE, new PageLink(10)).getData().stream()
.filter(RuleChain::isRoot)
@ -132,7 +134,7 @@ public class MonitoringEntityService {
tbClient.assignAssetToPublicCustomer(asset.getId());
tbClient.assignDashboardToPublicCustomer(dashboard.getId());
getDashboardPublicLink(dashboard);
this.dashboardId = Optional.ofNullable(dashboard).map(Dashboard::getId).orElse(null);
}
public Asset getOrCreateMonitoringAsset() {
@ -266,10 +268,10 @@ public class MonitoringEntityService {
tbClient.saveCalculatedField(calculatedField);
}
private String getDashboardPublicLink(Dashboard dashboard) {
public String getDashboardPublicLink() {
String link = "";
try {
Optional<DashboardInfo> infoOpt = tbClient.getDashboardInfoById(dashboard.getId());
Optional<DashboardInfo> infoOpt = tbClient.getDashboardInfoById(dashboardId);
if (infoOpt.isPresent()) {
String publicCustomerId = null;
Set<ShortCustomerInfo> customers = infoOpt.get().getAssignedCustomers();
@ -280,7 +282,7 @@ public class MonitoringEntityService {
.findFirst().orElse(null);
}
if (publicCustomerId != null) {
link = buildPublicDashboardLink(dashboard.getId(), publicCustomerId);
link = buildPublicDashboardLink(dashboardId, publicCustomerId);
log.info("Public Monitoring dashboard link: {}", link);
} else {
log.warn("Dashboard is not assigned to public customer. Public link can't be generated.");

Loading…
Cancel
Save