diff --git a/monitoring/pom.xml b/monitoring/pom.xml index 5c045df996..7f9e6c3369 100644 --- a/monitoring/pom.xml +++ b/monitoring/pom.xml @@ -21,12 +21,11 @@ 4.0.0 org.thingsboard - 3.4.2-SNAPSHOT + 3.4.3-SNAPSHOT thingsboard monitoring - 3.4.2-SNAPSHOT ThingsBoard Monitoring Service jar @@ -96,20 +95,9 @@ Java-WebSocket compile - - org.seleniumhq.selenium - selenium-java - 4.6.0 - com.google.guava guava - 31.1-jre - - - io.github.bonigarcia - webdrivermanager - 5.3.1 org.apache.commons diff --git a/monitoring/src/main/conf/tb-monitoring.conf b/monitoring/src/main/conf/tb-monitoring.conf index 83287286bb..6c6b191176 100644 --- a/monitoring/src/main/conf/tb-monitoring.conf +++ b/monitoring/src/main/conf/tb-monitoring.conf @@ -14,9 +14,9 @@ # limitations under the License. # -export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*,heap*,age*,safepoint=debug:file=@pkg.logFolder@/gc.log:time,uptime,level,tags:filecount=10,filesize=10M" +export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*,heap*,age*,safepoint=debug:file=/var/log/tb-monitoring/gc.log:time,uptime,level,tags:filecount=10,filesize=10M" export JAVA_OPTS="$JAVA_OPTS -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError" export JAVA_OPTS="$JAVA_OPTS -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=10" -export LOG_FILENAME=${pkg.name}.out -export LOADER_PATH=${pkg.installFolder}/conf +export LOG_FILENAME=tb-monitoring.out +export LOADER_PATH=/usr/share/tb-monitoring/conf diff --git a/monitoring/src/main/java/org/thingsboard/monitoring/data/Latency.java b/monitoring/src/main/java/org/thingsboard/monitoring/data/Latency.java index acfa49b1fc..90914f09e1 100644 --- a/monitoring/src/main/java/org/thingsboard/monitoring/data/Latency.java +++ b/monitoring/src/main/java/org/thingsboard/monitoring/data/Latency.java @@ -36,6 +36,10 @@ public class Latency { return latencySum.get() / counter.get(); } + public boolean isNotEmpty() { + return counter.get() > 0; + } + public synchronized void reset() { latencySum.set(0.0); counter.set(0); diff --git a/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringReporter.java b/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringReporter.java index ee8b173152..963f93d2e1 100644 --- a/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringReporter.java +++ b/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringReporter.java @@ -73,7 +73,9 @@ public class MonitoringReporter { return; } log.info("Latencies:\n{}", latencies.values()); - if (latencies.values().stream().anyMatch(latency -> latency.getAvg() >= (double) latencyThresholdMs)) { + if (latencies.values().stream() + .filter(Latency::isNotEmpty) + .anyMatch(latency -> latency.getAvg() >= (double) latencyThresholdMs)) { HighLatencyNotification highLatencyNotification = new HighLatencyNotification(latencies.values(), latencyThresholdMs); notificationService.sendNotification(highLatencyNotification); } @@ -89,9 +91,11 @@ public class MonitoringReporter { tbClient.logIn(); ObjectNode msg = JacksonUtil.newObjectNode(); latencies.forEach((key, latency) -> { - msg.set(key, new DoubleNode(latency.getAvg())); + if (latency.isNotEmpty()) { + msg.set(key, new DoubleNode(latency.getAvg())); + latency.reset(); + } }); - latencies.clear(); tbClient.saveEntityTelemetry(entityId, "time", msg); } catch (Exception e) { log.error("Failed to report latencies: {}", e.getMessage()); diff --git a/monitoring/src/main/java/org/thingsboard/monitoring/service/TransportMonitoringService.java b/monitoring/src/main/java/org/thingsboard/monitoring/service/TransportMonitoringService.java index 2030e01a44..e27002449e 100644 --- a/monitoring/src/main/java/org/thingsboard/monitoring/service/TransportMonitoringService.java +++ b/monitoring/src/main/java/org/thingsboard/monitoring/service/TransportMonitoringService.java @@ -143,7 +143,7 @@ public abstract class TransportMonitoringService { - RemoteWebDriver driver = null; - try { - driver = createDriver(); - WebDriverWait wait = createDriverWait(driver); - driver.manage().window().maximize(); - driver.get(url + "/login"); - - try { - stopWatch.start(); - wait.until(elementToBeClickable(xpath(EMAIL_FIELD))).sendKeys(username); - wait.until(elementToBeClickable(xpath(PASSWORD_FIELD))).sendKeys(password); - wait.until(elementToBeClickable(xpath(SUBMIT_BTN))).click(); - monitoringReporter.reportLatency(Latencies.WEB_UI_LOAD, stopWatch.getTime()); - - wait.until(urlContains("/home")); - wait.until(elementToBeClickable(xpath(DEVICES_BTN))).click(); - } catch (Exception e) { - throw new RuntimeException("Expected web UI elements were not displayed", e); - } - - monitoringReporter.serviceIsOk(MonitoredServiceKey.WEB_UI); - } catch (Exception e) { - monitoringReporter.serviceFailure(MonitoredServiceKey.WEB_UI, e); - } finally { - if (driver != null) driver.quit(); - } - }, 0, monitoringRateSec, TimeUnit.SECONDS); - } - - private RemoteWebDriver createDriver() throws MalformedURLException { - ChromeOptions options = new ChromeOptions(); - options.setPageLoadTimeout(Duration.ofMillis(timeoutMs)); - return new RemoteWebDriver(new URL(remoteWebdriverUrl + "/wd/hub"), options); - } - - private WebDriverWait createDriverWait(WebDriver driver) { - return new WebDriverWait(driver, Duration.ofMillis(timeoutMs)); - } - -} diff --git a/monitoring/src/main/java/org/thingsboard/monitoring/service/impl/MqttTransportMonitoringService.java b/monitoring/src/main/java/org/thingsboard/monitoring/service/impl/MqttTransportMonitoringService.java index 037463783c..5e6542d29e 100644 --- a/monitoring/src/main/java/org/thingsboard/monitoring/service/impl/MqttTransportMonitoringService.java +++ b/monitoring/src/main/java/org/thingsboard/monitoring/service/impl/MqttTransportMonitoringService.java @@ -15,7 +15,9 @@ */ package org.thingsboard.monitoring.service.impl; +import org.eclipse.paho.client.mqttv3.IMqttToken; import org.eclipse.paho.client.mqttv3.MqttAsyncClient; +import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; @@ -31,7 +33,7 @@ import org.thingsboard.monitoring.service.TransportMonitoringService; @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class MqttTransportMonitoringService extends TransportMonitoringService { - private MqttAsyncClient mqttClient; + private MqttClient mqttClient; private static final String DEVICE_TELEMETRY_TOPIC = "v1/devices/me/telemetry"; @@ -44,11 +46,16 @@ public class MqttTransportMonitoringService extends TransportMonitoringService4.0.0 org.thingsboard - 3.4.2-SNAPSHOT + 3.4.3-SNAPSHOT msa