Quellcode durchsuchen

Added parameter 'startAt' to the planning of watcher

MSI\matet vor 4 Jahren
Ursprung
Commit
e35a830ba4

+ 3 - 0
.idea/.gitignore

@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml

+ 6 - 0
.idea/compiler.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <bytecodeTargetLevel target="1.8" />
+  </component>
+</project>

+ 19 - 0
.idea/gradle.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleHome" value="C:/Gradle/gradle-6.5.1" />
+        <option name="gradleJvm" value="#JAVA_HOME" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+          </set>
+        </option>
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>

+ 25 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenLocal" />
+      <option name="name" value="MavenLocal" />
+      <option name="url" value="file:/$MAVEN_REPOSITORY$/" />
+    </remote-repository>
+  </component>
+</project>

+ 5 - 0
.idea/misc.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 1 - 0
config/lv_senslog.yaml

@@ -21,6 +21,7 @@ messageBroker:
 monitoredObjects:
   18907678:
     interval: 86400
+    startAt: "17:05"
     sensors: [340414062, 410164038, 800014050]
 
   18907677:

+ 4 - 1
src/main/java/cz/senslog/watchdog/app/Application.java

@@ -9,6 +9,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
+import java.time.LocalTime;
 
 public class Application extends Thread {
 
@@ -53,8 +54,10 @@ public class Application extends Thread {
         Watcher watcher = Watcher.create(config.getWatchingObjectsConfig(), dataProvider, messageBroker);
 
         long period = config.getWatchingObjectsConfig().getMinInterval();
+//        LocalTime startAt = config.getWatchingObjectsConfig().getStartAt();
+        LocalTime startAt = LocalTime.of(17, 15);
         Scheduler scheduler = Scheduler.createBuilder()
-                    .addTask(watcher::check, period)
+                    .addTask(watcher::check, period, startAt)
                 .build();
 
         scheduler.start();

+ 14 - 3
src/main/java/cz/senslog/watchdog/config/MonitoredObjectsConfig.java

@@ -3,6 +3,7 @@ package cz.senslog.watchdog.config;
 import cz.senslog.watchdog.provider.Record;
 import cz.senslog.watchdog.util.Tuple;
 
+import java.time.LocalTime;
 import java.util.*;
 
 public class MonitoredObjectsConfig {
@@ -20,7 +21,7 @@ public class MonitoredObjectsConfig {
         Unit(String id, long interval) {
             if (interval == -1) {
                 throw new IllegalArgumentException(String.format(
-                    "The unit '%s' does not contain 'interval' argument.", id
+                        "The unit '%s' does not contain 'interval' argument.", id
                 ));
             }
             this.id = id;
@@ -89,20 +90,29 @@ public class MonitoredObjectsConfig {
         Set<String> unitIds = config.getAttributes();
         Map<String, Unit> units = new HashMap<>(unitIds.size());
         long minInterval = Long.MAX_VALUE, maxInterval = Long.MIN_VALUE;
+//        LocalTime start = LocalTime.now().plusMinutes(1);
+
         for (String unitId : unitIds) {
             PropertyConfig unitConfig = config.getPropertyConfig(unitId);
             long unitInterval = -1;
             if (unitConfig.containsProperty("interval")) {
                 unitInterval = unitConfig.getIntegerProperty("interval");
             }
+
+//            if (unitConfig.containsProperty("startAt")) {
+//                String stringStartAt = unitConfig.getStringProperty("startAt");
+//                String[] split = stringStartAt.split(":"); // 0 - hours, 1 - minutes
+
+//                start = LocalTime.of(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
+//            }
             if (unitConfig.containsProperty("sensors")) {
                 Map<String, Sensor> sensors = new HashMap<>();
                 Object unitSensorsObj = unitConfig.getProperty("sensors");
                 if (unitSensorsObj instanceof List) {
-                    List<?> unitSensors = (List<?>)unitSensorsObj;
+                    List<?> unitSensors = (List<?>) unitSensorsObj;
                     for (Object sensorIdObj : unitSensors) {
                         if (sensorIdObj instanceof Integer) {
-                            long sensorId = (Integer)sensorIdObj;
+                            long sensorId = (Integer) sensorIdObj;
                             String sensorIdStr = String.valueOf(sensorId);
                             sensors.put(sensorIdStr, new Sensor(sensorIdStr, unitInterval));
                         }
@@ -126,6 +136,7 @@ public class MonitoredObjectsConfig {
                 maxInterval = Math.max(unitInterval, maxInterval);
             }
         }
+
         return new MonitoredObjectsConfig(units, minInterval, maxInterval);
     }
 

+ 20 - 3
src/main/java/cz/senslog/watchdog/util/schedule/ScheduleTask.java

@@ -1,5 +1,7 @@
 package cz.senslog.watchdog.util.schedule;
 
+import java.time.LocalTime;
+import java.time.temporal.ChronoUnit;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
@@ -13,11 +15,19 @@ public final class ScheduleTask {
     private TaskDescription description;
     private final Runnable task;
     private final long period;
+    private final LocalTime startAt;
 
-    public ScheduleTask(String name, Runnable task, long period) {
+//    public ScheduleTask(String name, Runnable task, long period) {
+//        this.description = new TaskDescription(name, Status.STOPPED);
+//        this.task = task;
+//        this.period = period;
+//    }
+
+    public ScheduleTask(String name, Runnable task, long period, LocalTime startAt) {
         this.description = new TaskDescription(name, Status.STOPPED);
         this.task = task;
         this.period = period;
+        this.startAt = startAt;
     }
 
     public TaskDescription getDescription() {
@@ -32,8 +42,15 @@ public final class ScheduleTask {
         return period;
     }
 
+    public LocalTime getStartAt() {
+        return startAt;
+    }
+
     public void schedule(ScheduledExecutorService scheduledService, CountDownLatch latch) {
-        ScheduledFuture<?> future = scheduledService.scheduleAtFixedRate(getTask(), DELAY, getPeriod(), SECONDS);
+        long initialDelay = LocalTime.now().until(getStartAt(), ChronoUnit.SECONDS);
+        System.out.println("Task will run in " + initialDelay + " seconds.");
+
+        ScheduledFuture<?> future = scheduledService.scheduleAtFixedRate(getTask(), initialDelay, getPeriod(), SECONDS);
         description = new TaskDescription(description.getName(), Status.RUNNING);
         new Thread(() -> {
             try {
@@ -45,6 +62,6 @@ public final class ScheduleTask {
                 latch.countDown();
                 description = new TaskDescription(description.getName(), Status.STOPPED);
             }
-        }, "thread-"+description.getName()).start();
+        }, "thread-" + description.getName()).start();
     }
 }

+ 3 - 2
src/main/java/cz/senslog/watchdog/util/schedule/Scheduler.java

@@ -1,5 +1,6 @@
 package cz.senslog.watchdog.util.schedule;
 
+import java.time.LocalTime;
 import java.util.Set;
 
 public interface Scheduler {
@@ -16,8 +17,8 @@ public interface Scheduler {
 
     interface SchedulerBuilder {
 
-        SchedulerBuilder addTask(String name, Runnable task, long period);
-        SchedulerBuilder addTask(Runnable task, long period);
+        SchedulerBuilder addTask(String name, Runnable task, long period, LocalTime startAt);
+        SchedulerBuilder addTask(Runnable task, long period, LocalTime startAt);
 
         Scheduler build();
     }

+ 5 - 4
src/main/java/cz/senslog/watchdog/util/schedule/SchedulerBuilderImpl.java

@@ -1,5 +1,6 @@
 package cz.senslog.watchdog.util.schedule;
 
+import java.time.LocalTime;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -12,14 +13,14 @@ public class SchedulerBuilderImpl implements Scheduler.SchedulerBuilder {
     }
 
     @Override
-    public Scheduler.SchedulerBuilder addTask(String name, Runnable task, long period) {
-        tasks.add(new ScheduleTask(name, task, period));
+    public Scheduler.SchedulerBuilder addTask(String name, Runnable task, long period, LocalTime startAt) {
+        tasks.add(new ScheduleTask(name, task, period, startAt));
         return this;
     }
 
     @Override
-    public Scheduler.SchedulerBuilder addTask(Runnable task, long period) {
-        tasks.add(new ScheduleTask(task.getClass().getSimpleName(), task, period));
+    public Scheduler.SchedulerBuilder addTask(Runnable task, long period, LocalTime startAt) {
+        tasks.add(new ScheduleTask(task.getClass().getSimpleName(), task, period, startAt));
         return this;
     }
 

+ 2 - 0
src/main/java/cz/senslog/watchdog/util/schedule/SchedulerImpl.java

@@ -5,6 +5,7 @@ import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 
 public class SchedulerImpl implements Scheduler {
 
@@ -22,6 +23,7 @@ public class SchedulerImpl implements Scheduler {
 
         if (!tasks.isEmpty()) {
             scheduler = Executors.newScheduledThreadPool(tasks.size());
+
             latch = new CountDownLatch(tasks.size());
             tasks.forEach(t -> t.schedule(scheduler, latch));