فهرست منبع

Bug #8838 fixed, Task #8840 configured

Lukas Cerny 4 سال پیش
والد
کامیت
79fd70db5c

+ 82 - 12
config/foodie.yaml

@@ -16,7 +16,17 @@ senslogServers:
       password: "HAFhaf"
 
 messageBrokers:
-  emailToAll:
+  zcuOnlyEmail:
+    type: EMAIL
+    config:
+      server: lspEmail
+      senderEmail: "watchdog@senslog.org"
+      recipientEmail:
+        - "luccerny@ntis.zcu.cz"
+        - "fialar@kgm.zcu.cz"
+      subject: "[Watchdog] Report SensLog (CZ)"
+
+  mikeEmail:
     type: EMAIL
     config:
       server: lspEmail
@@ -26,6 +36,17 @@ messageBrokers:
         - "kepka@ccss.cz"
       subject: "[Watchdog] Report SensLog (CZ)"
 
+  lspServisEmail:
+    type: EMAIL
+    config:
+      server: lspEmail
+      senderEmail: "watchdog@senslog.org"
+      recipientEmail:
+        - "luccerny@ntis.zcu.cz"
+        - "servis@lesprojekt.cz"
+        - "kepka@ccss.cz"
+      subject: "[Watchdog] Report SensLog (CZ)"
+
 dataProviders:
   wsSensLogKynsperk:
     type: WEB_SERVICE
@@ -45,38 +66,87 @@ dataProviders:
       server: lspSenslog15
       groupName: "zcu"
 
+  wsSensLogOsek:
+    type: WEB_SERVICE
+    config:
+      server: lspSenslog15
+      groupName: "osek"
+
+  wsSensLogSmiltene:
+    type: WEB_SERVICE
+    config:
+      server: lspSenslog15
+      groupName: "Smiltene"
+
+  wsSensLogMengele:
+    type: WEB_SERVICE
+    config:
+      server: lspSenslog15
+      groupName: "Meņģele"
+
 groups:
   kynsperk:
     name: "Kynšperk"
-    active: false
+    active: true
     dataProvider: wsSensLogKynsperk
-    messageBroker: emailToAll
+    messageBroker: lspServisEmail
     resultType: FAIL
     period: 86400
 
   rostenice:
-    name: "Roštěnice"
+    name: "Rostěnice"
     active: true
     dataProvider: wsSensLogRostenice
-    messageBroker: emailToAll
+    messageBroker: mikeEmail
     resultType: FAIL
     period: 86400
 
   zcu:
     name: "ZČU Robčice"
-    active: false
+    active: true
     dataProvider: wsSensLogZcu
-    messageBroker: emailToAll
-    resultType: ALL
+    messageBroker: zcuOnlyEmail
+    resultType: FAIL
+    period: 86400
+
+  osek:
+    name: "Osek"
+    active: false
+    dataProvider: wsSensLogOsek
+    messageBroker: mikeEmail
+    resultType: FAIL
+    period: 86400
+
+  latviaSmiltene:
+    name: "Latvia Smiltene"
+    active: false
+    dataProvider: wsSensLogSmiltene
+    messageBroker: lspServisEmail
+    resultType: FAIL
+    period: 86400
+
+  latviaMengele:
+    name: "Latvia Meņģele"
+    active: false
+    dataProvider: wsSensLogMengele
+    messageBroker: lspServisEmail
+    resultType: FAIL
     period: 86400
 
 superGroups:
-  sumarizeError:
-    name: "Kynšperk & ZČU Robčice"
-    messageBroker: emailToAll
+  osek&zcu:
+    name: "Osek & ZČU Robčice"
+    messageBroker: mikeEmail
+    resultType: FAIL
+    period: 86400
+    groups: [ osek, zcu ]
+
+  latvia:
+    name: "Latvia Meņģele & Smiltene"
+    messageBroker: mikeEmail
     resultType: FAIL
     period: 86400
-    groups: [ kynsperk, zcu ]
+    groups: [ latviaSmiltene, latviaMengele ]
 
 monitoredObjects:
 

+ 82 - 12
config/test-foodie.yaml

@@ -1,5 +1,5 @@
 general:
-  firstStartAt: "00:20:00" # hh:mm:ss
+  firstStartAt: "14:11:00" # hh:mm:ss
 
 emailServers:
   lspEmail:
@@ -16,7 +16,7 @@ senslogServers:
       password: "HAFhaf"
 
 messageBrokers:
-  emailToAll:
+  mikeEmail:
     type: EMAIL
     config:
       server: lspEmail
@@ -25,11 +25,24 @@ messageBrokers:
         - "luccerny@ntis.zcu.cz"
       subject: "[Watchdog] Test Report SensLog (CZ)"
 
-  console:
-    type: CONSOLE
+  lspServisEmail:
+    type: EMAIL
     config:
-      messagePattern: "No actual data from: $unit_id/$sensor_id"  # available props: $unit_id, $sensor_id, $timestamp, $value
-      level: INFO
+      server: lspEmail
+      senderEmail: "watchdog@senslog.org"
+      recipientEmail:
+        - "luccerny@ntis.zcu.cz"
+      subject: "[Watchdog] Test Report SensLog (CZ)"
+
+  zcuOnlyEmail:
+    type: EMAIL
+    config:
+      server: lspEmail
+      senderEmail: "watchdog@senslog.org"
+      recipientEmail:
+        - "luccerny@ntis.zcu.cz"
+      subject: "[Watchdog] Test Report SensLog (CZ)"
+
 
 dataProviders:
   wsSensLogKynsperk:
@@ -50,20 +63,38 @@ dataProviders:
       server: lspSenslog15
       groupName: "zcu"
 
+  wsSensLogOsek:
+    type: WEB_SERVICE
+    config:
+      server: lspSenslog15
+      groupName: "osek"
+
+  wsSensLogSmiltene:
+    type: WEB_SERVICE
+    config:
+      server: lspSenslog15
+      groupName: "Smiltene"
+
+  wsSensLogMengele:
+    type: WEB_SERVICE
+    config:
+      server: lspSenslog15
+      groupName: "Meņģele"
+
 groups:
   kynsperk:
     name: "Kynšperk"
-    active: false
+    active: true
     dataProvider: wsSensLogKynsperk
-    messageBroker: emailToAll
+    messageBroker: lspServisEmail
     resultType: FAIL
     period: 86400
 
   rostenice:
-    name: "Roštěnice"
-    active: false
+    name: "Rostěnice"
+    active: true
     dataProvider: wsSensLogRostenice
-    messageBroker: emailToAll
+    messageBroker: mikeEmail
     resultType: FAIL
     period: 86400
 
@@ -71,9 +102,48 @@ groups:
     name: "ZČU Robčice"
     active: true
     dataProvider: wsSensLogZcu
-    messageBroker: emailToAll
+    messageBroker: zcuOnlyEmail
+    resultType: FAIL
+    period: 86400
+
+  osek:
+    name: "Osek"
+    active: false
+    dataProvider: wsSensLogOsek
+    messageBroker: mikeEmail
+    resultType: FAIL
+    period: 86400
+
+  latviaSmiltene:
+    name: "Latvia Smiltene"
+    active: false
+    dataProvider: wsSensLogSmiltene
+    messageBroker: lspServisEmail
+    resultType: FAIL
+    period: 86400
+
+  latviaMengele:
+    name: "Latvia Meņģele"
+    active: false
+    dataProvider: wsSensLogMengele
+    messageBroker: lspServisEmail
+    resultType: FAIL
+    period: 86400
+
+superGroups:
+  osek&zcu:
+    name: "Osek & ZČU Robčice"
+    messageBroker: mikeEmail
+    resultType: FAIL
+    period: 86400
+    groups: [ osek, zcu ]
+
+  latvia:
+    name: "Latvia Meņģele & Smiltene"
+    messageBroker: mikeEmail
     resultType: FAIL
     period: 86400
+    groups: [ latviaSmiltene, latviaMengele ]
 
 monitoredObjects:
 

+ 6 - 4
src/main/java/cz/senslog/watchdog/core/Watcher.java

@@ -45,9 +45,13 @@ public class Watcher {
         ProvidedData data = dataProvider.getLastData();
 
         List<SimpleReport> reports = new ArrayList<>();
-        List<String> reportedMessages = new ArrayList<>(data.getErrorMessages());
+        List<String> reportedMessages = new ArrayList<>();
 
-        if (!data.isEmpty()) {
+        if (data.isErrorOccurred()) {
+            reportedMessages.addAll(data.getErrorMessages());
+        } else if (data.isEmpty()) {
+            reportedMessages.add("No data to check.");
+        } else  {
             for (String unitId : group.getKeys()) {
                 Node<String, MonitoredObject> mUnitNode = group.getNode(unitId);
                 if (mUnitNode.getValue() instanceof AllMonitoredObjects) {
@@ -109,8 +113,6 @@ public class Watcher {
                     }
                 }
             }
-        } else {
-            reportedMessages.add("An error has occurred. No data to check.");
         }
 
         Map<String, String> operationProperties = new HashMap<>();

+ 13 - 7
src/main/java/cz/senslog/watchdog/core/connection/SensLogWSConnection.java

@@ -9,27 +9,31 @@ import org.apache.logging.log4j.Logger;
 
 import java.lang.reflect.Type;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static cz.senslog.watchdog.util.json.BasicJson.jsonToObject;
 import static java.util.Collections.emptyList;
 
 public class SensLogWSConnection {
 
+    private static final int MAX_AUTH_ERRORS = 2;
+
     private static final Logger logger = LogManager.getLogger(SensLogWSConnection.class);
 
     private final HttpClient httpClient;
     private final SensLogServerConfig config;
+    private final Map<Long, AtomicInteger> authError;
 
     private Tuple<Boolean, HttpCookie> authCookie;
-    private int authError;
 
     public SensLogWSConnection(SensLogServerConfig config) {
         this.config = config;
         this.httpClient = HttpClient.newHttpClient();
         this.authCookie = Tuple.of(false, null);
-        this.authError = 0;
+        this.authError = new HashMap<>();
     }
 
     private synchronized HttpCookie getAuthCookie() {
@@ -46,7 +50,7 @@ public class SensLogWSConnection {
         logger.info("Getting new auth cookie from the server: {}.", config.getBaseUrl());
 
         HttpResponse response = httpClient.send(request);
-        logger.info("Received data with the status '{}' from the server {}.", response.getStatus(), config.getBaseUrl());
+        logger.info("Received new auth token with the status '{}' from the server {}.", response.getStatus(), config.getBaseUrl());
 
         if (response.isError()) {
             logger.warn("Authorization failed. Error code {} with the reason '{}'.", response.getStatus(), response.getBody());
@@ -84,11 +88,13 @@ public class SensLogWSConnection {
         logger.info("Getting new data from the server: {}.", request.getUrl());
 
         HttpResponse response = httpClient.send(request);
-        logger.info("Received data with the status '{}' from the server {}.", response.getStatus(), request.getUrl());
+        logger.info("Received new data with the status '{}' from the server {}.", response.getStatus(), request.getUrl());
 
-        if (response.getStatus() == HttpCode.UNAUTHORIZED && authError <= 2) {
+        long threadId = Thread.currentThread().getId();
+        AtomicInteger authErrors = authError.computeIfAbsent(threadId, id -> new AtomicInteger(0));
+        if (response.getStatus() == HttpCode.UNAUTHORIZED && authErrors.get() <= MAX_AUTH_ERRORS) {
             this.authCookie = Tuple.of(false, null);
-            this.authError++;
+            authErrors.incrementAndGet();
             return callRequest(reqBuilder);
         }
 
@@ -97,7 +103,7 @@ public class SensLogWSConnection {
             throw new IllegalStateException(response.getBody());
         }
 
-        this.authError = 0;
+        authErrors.set(0);
         final Type lastObsType = new TypeToken<Collection<Map<String, Object>>>() {}.getType();
         return jsonToObject(response.getBody(), lastObsType);
     }

+ 37 - 29
src/main/java/cz/senslog/watchdog/provider/ProvidedData.java

@@ -1,29 +1,37 @@
-package cz.senslog.watchdog.provider;
-
-import cz.senslog.watchdog.core.adt.Graph;
-
-import java.util.List;
-
-public class ProvidedData extends Graph<String, ProvidedObject> {
-
-    private final ProviderInfo info;
-    private final List<String> errorMessages;
-
-    public ProvidedData(ProviderInfo info, List<String> errorMessages) {
-        super(info.getSourceName(), null);
-        this.info = info;
-        this.errorMessages = errorMessages;
-    }
-
-    public ProviderInfo getInfo() {
-        return info;
-    }
-
-    public List<String> getErrorMessages() {
-        return errorMessages;
-    }
-
-    public boolean isEmpty() {
-        return getKeys().isEmpty();
-    }
-}
+package cz.senslog.watchdog.provider;
+
+import cz.senslog.watchdog.core.adt.Graph;
+
+import java.util.List;
+
+public class ProvidedData extends Graph<String, ProvidedObject> {
+
+    private final ProviderInfo info;
+    private final List<String> errorMessages;
+
+    public ProvidedData(ProviderInfo info, List<String> errorMessages) {
+        super(info.getSourceName(), null);
+        this.info = info;
+        this.errorMessages = errorMessages;
+    }
+
+    public ProviderInfo getInfo() {
+        return info;
+    }
+
+    public List<String> getErrorMessages() {
+        return errorMessages;
+    }
+
+    public boolean isErrorOccurred() {
+        return !isSuccess();
+    }
+
+    public boolean isSuccess() {
+        return errorMessages.isEmpty();
+    }
+
+    public boolean isEmpty() {
+        return getKeys().isEmpty();
+    }
+}