This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch xianyi
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/xianyi by this push:
new 218c719 enhance trigger
218c719 is described below
commit 218c719096d35ed5c81d302745c3cadd564d65d3
Author: Steve Yurong Su <[email protected]>
AuthorDate: Mon Nov 22 10:11:05 2021 +0800
enhance trigger
---
.../trigger/builtin/MovingExtremeTrigger.java | 97 ++++++++++++++--------
1 file changed, 62 insertions(+), 35 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/trigger/builtin/MovingExtremeTrigger.java
b/server/src/main/java/org/apache/iotdb/db/engine/trigger/builtin/MovingExtremeTrigger.java
index 7cd8690..0907a28 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/trigger/builtin/MovingExtremeTrigger.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/trigger/builtin/MovingExtremeTrigger.java
@@ -27,14 +27,18 @@ import
org.apache.iotdb.db.engine.trigger.sink.local.LocalIoTDBHandler;
import org.apache.iotdb.db.utils.windowing.api.Evaluator;
import org.apache.iotdb.db.utils.windowing.api.Window;
import
org.apache.iotdb.db.utils.windowing.configuration.SlidingSizeWindowConfiguration;
+import
org.apache.iotdb.db.utils.windowing.configuration.SlidingTimeWindowConfiguration;
import
org.apache.iotdb.db.utils.windowing.handler.SlidingSizeWindowEvaluationHandler;
+import
org.apache.iotdb.db.utils.windowing.handler.SlidingTimeWindowEvaluationHandler;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
public class MovingExtremeTrigger implements Trigger {
private final LocalIoTDBHandler localIoTDBHandler = new LocalIoTDBHandler();
- private SlidingSizeWindowEvaluationHandler windowEvaluationHandler;
+ private boolean isSizeBased;
+ private SlidingSizeWindowEvaluationHandler
slidingSizeWindowEvaluationHandler;
+ private SlidingTimeWindowEvaluationHandler
slidingTimeWindowEvaluationHandler;
private String device;
private String[] measurements;
@@ -48,37 +52,50 @@ public class MovingExtremeTrigger implements Trigger {
openSinkHandlers();
- windowEvaluationHandler =
- new SlidingSizeWindowEvaluationHandler(
- new SlidingSizeWindowConfiguration(TSDataType.DOUBLE, 100, 100),
- new Evaluator() {
-
- @Override
- public void evaluate(Window window) throws Exception {
- double extreme = 0;
- double[] array = window.getDoubleArray();
- for (int i = 0, n = window.size(); i < n; ++i) {
- extreme = Math.max(extreme, Math.abs(array[i]));
- }
-
- localIoTDBHandler.onEvent(new
LocalIoTDBEvent(window.getTime(0), extreme));
- }
-
- @Override
- public void onRejection(Window window) {
- double extreme = 0;
- double[] array = window.getDoubleArray();
- for (int i = 0, n = window.size(); i < n; ++i) {
- extreme = Math.max(extreme, Math.abs(array[i]));
- }
-
- try {
- localIoTDBHandler.onEvent(new
LocalIoTDBEvent(window.getTime(0), extreme));
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage());
- }
- }
- });
+ final Evaluator evaluator =
+ new Evaluator() {
+
+ @Override
+ public void evaluate(Window window) throws Exception {
+ double extreme = 0;
+ double[] array = window.getDoubleArray();
+ for (int i = 0, n = window.size(); i < n; ++i) {
+ extreme = Math.max(extreme, Math.abs(array[i]));
+ }
+
+ localIoTDBHandler.onEvent(new LocalIoTDBEvent(window.getTime(0),
extreme));
+ }
+
+ @Override
+ public void onRejection(Window window) {
+ double extreme = 0;
+ double[] array = window.getDoubleArray();
+ for (int i = 0, n = window.size(); i < n; ++i) {
+ extreme = Math.max(extreme, Math.abs(array[i]));
+ }
+
+ try {
+ localIoTDBHandler.onEvent(new LocalIoTDBEvent(window.getTime(0),
extreme));
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage());
+ }
+ }
+ };
+
+ int windowSize = attributes.getInt("window_size");
+ int slidingStep = attributes.getInt("sliding_step");
+ isSizeBased = attributes.getStringOrDefault("strategy",
"time").equals("size");
+ if (isSizeBased) {
+ slidingSizeWindowEvaluationHandler =
+ new SlidingSizeWindowEvaluationHandler(
+ new SlidingSizeWindowConfiguration(TSDataType.DOUBLE,
windowSize, slidingStep),
+ evaluator);
+ } else {
+ slidingTimeWindowEvaluationHandler =
+ new SlidingTimeWindowEvaluationHandler(
+ new SlidingTimeWindowConfiguration(TSDataType.DOUBLE,
windowSize, slidingStep),
+ evaluator);
+ }
}
@Override
@@ -98,14 +115,24 @@ public class MovingExtremeTrigger implements Trigger {
@Override
public Double fire(long timestamp, Double value) {
- windowEvaluationHandler.collect(timestamp, value);
+ if (isSizeBased) {
+ slidingSizeWindowEvaluationHandler.collect(timestamp, value);
+ } else {
+ slidingTimeWindowEvaluationHandler.collect(timestamp, value);
+ }
return value;
}
@Override
public double[] fire(long[] timestamps, double[] values) {
- for (int i = 0, n = timestamps.length; i < n; ++i) {
- windowEvaluationHandler.collect(timestamps[i], values[i]);
+ if (isSizeBased) {
+ for (int i = 0, n = timestamps.length; i < n; ++i) {
+ slidingSizeWindowEvaluationHandler.collect(timestamps[i], values[i]);
+ }
+ } else {
+ for (int i = 0, n = timestamps.length; i < n; ++i) {
+ slidingTimeWindowEvaluationHandler.collect(timestamps[i], values[i]);
+ }
}
return values;
}