Browse Source

增加时序模块

zhouhao 5 years ago
parent
commit
aa997899b4

+ 28 - 0
jetlinks-components/timeseries-components/pom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>jetlinks-components</artifactId>
+        <groupId>org.jetlinks.community</groupId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>timeseries-components</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.hswebframework</groupId>
+            <artifactId>hsweb-easy-orm-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jetlinks</groupId>
+            <artifactId>jetlinks-core</artifactId>
+            <version>${jetlinks.version}</version>
+        </dependency>
+
+    </dependencies>
+</project>

+ 11 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/TimeSeriesData.java

@@ -0,0 +1,11 @@
+package org.jetlinks.community.timeseries;
+
+import java.util.Map;
+
+public interface TimeSeriesData {
+
+    long getTimestamp();
+
+    Map<String,Object> getData();
+
+}

+ 28 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/TimeSeriesManager.java

@@ -0,0 +1,28 @@
+package org.jetlinks.community.timeseries;
+
+import reactor.core.publisher.Mono;
+
+/**
+ * 时序数据服务管理器,统一管理时序数据操作接口
+ *
+ * @author zhouhao
+ * @since 1.0
+ */
+public interface TimeSeriesManager {
+
+    /**
+     * 根据指标获取服务
+     *
+     * @param metric 指标,通常是
+     * @return 时序服务
+     */
+    TimeSeriesService getService(TimeSeriesMetric metric);
+
+    /**
+     * 注册元数据
+     *
+     * @param metadata 元数据
+     * @return 注册结果
+     */
+    Mono<Void> registerMetadata(TimeSeriesMetadata metadata);
+}

+ 13 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/TimeSeriesMetadata.java

@@ -0,0 +1,13 @@
+package org.jetlinks.community.timeseries;
+
+import org.jetlinks.core.metadata.PropertyMetadata;
+
+import java.util.List;
+
+public interface TimeSeriesMetadata {
+
+    TimeSeriesMetric getMetric();
+
+    List<PropertyMetadata> getProperties();
+
+}

+ 9 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/TimeSeriesMetric.java

@@ -0,0 +1,9 @@
+package org.jetlinks.community.timeseries;
+
+public interface TimeSeriesMetric {
+
+    String getId();
+
+    String getName();
+
+}

+ 58 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/TimeSeriesService.java

@@ -0,0 +1,58 @@
+package org.jetlinks.community.timeseries;
+
+import org.hswebframework.ezorm.core.param.QueryParam;
+import org.jetlinks.community.timeseries.query.AggregationData;
+import org.jetlinks.community.timeseries.query.AggregationQueryParam;
+import org.reactivestreams.Publisher;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+/**
+ * 时序数据处理服务
+ *
+ * @author zhouhao
+ * @since 1.0
+ */
+public interface TimeSeriesService {
+
+    /**
+     * 查询时序数据
+     *
+     * @param queryParam 查询条件
+     * @return 时序数据结果流
+     */
+    Flux<TimeSeriesData> query(QueryParam queryParam);
+
+    /**
+     * 查询数量
+     *
+     * @param queryParam 查询条件
+     * @return 数量
+     */
+    Mono<Integer> count(QueryParam queryParam);
+
+    /**
+     * 聚合查询
+     *
+     * @param queryParam 聚合查询条件
+     * @return 查询结果数据流
+     */
+    Flux<AggregationData> aggregation(AggregationQueryParam queryParam);
+
+    /**
+     * 保存数据
+     *
+     * @param data 数据流
+     * @return 保存结果, 不 {@link Mono#error(Throwable)} 则成功
+     */
+    Mono<Void> save(Publisher<TimeSeriesData> data);
+
+    /**
+     * 保存数据
+     *
+     * @param data 单个数据
+     * @return 保存结果, 不 {@link Mono#error(Throwable)} 则成功
+     */
+    Mono<Void> save(TimeSeriesData data);
+
+}

+ 7 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/query/Aggregation.java

@@ -0,0 +1,7 @@
+package org.jetlinks.community.timeseries.query;
+
+public enum Aggregation {
+
+    MIN, MAX, AVG, SUM, COUNT, NONE;
+
+}

+ 11 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/query/AggregationData.java

@@ -0,0 +1,11 @@
+package org.jetlinks.community.timeseries.query;
+
+import java.util.Map;
+
+public interface AggregationData {
+
+    String getTimeString();
+
+    Map<String, Number> getData();
+
+}

+ 27 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/query/AggregationQueryParam.java

@@ -0,0 +1,27 @@
+package org.jetlinks.community.timeseries.query;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.hswebframework.ezorm.core.param.QueryParam;
+
+import java.time.Duration;
+import java.util.List;
+
+@Getter
+@Setter
+public class AggregationQueryParam {
+
+    private List<AggregationTerm> aggregations;
+
+    private Duration interval;
+
+    private int limit;
+
+    private long startWithTime;
+
+    private long endWithTime;
+
+
+    private QueryParam queryParam;
+
+}

+ 14 - 0
jetlinks-components/timeseries-components/src/main/java/org/jetlinks/community/timeseries/query/AggregationTerm.java

@@ -0,0 +1,14 @@
+package org.jetlinks.community.timeseries.query;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AggregationTerm {
+
+    private String property;
+
+    private Aggregation aggregation;
+
+}