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