You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2021/01/11 16:02:48 UTC

[iotdb] 01/01: add openapi for test

This is an automated email from the ASF dual-hosted git repository.

hxd pushed a commit to branch openapi
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit b59e3212d1359fd74229eb36c143f9771b387345
Author: xiangdong huang <sa...@gmail.com>
AuthorDate: Tue Jan 12 00:02:13 2021 +0800

    add openapi for test
---
 openapi/pom.xml                           | 125 +++++++
 openapi/src/main/openapi3/iotdb-rest.yaml | 531 ++++++++++++++++++++++++++++++
 pom.xml                                   |   1 +
 3 files changed, 657 insertions(+)

diff --git a/openapi/pom.xml b/openapi/pom.xml
new file mode 100644
index 0000000..e395a4a
--- /dev/null
+++ b/openapi/pom.xml
@@ -0,0 +1,125 @@
+<?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>iotdb-parent</artifactId>
+    <groupId>org.apache.iotdb</groupId>
+    <version>0.12.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>pom</packaging>
+
+  <artifactId>openapi</artifactId>
+  <properties>
+    <swagger-codegen-maven-plugin-version>3.0.24</swagger-codegen-maven-plugin-version>
+    <resteasy-version>3.1.3.Final</resteasy-version>
+    <swagger-core-version>2.0.0</swagger-core-version>
+  </properties>
+
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>io.swagger.codegen.v3</groupId>
+        <artifactId>swagger-codegen-maven-plugin</artifactId>
+        <version>${swagger-codegen-maven-plugin-version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+            <configuration>
+              <!-- use `java -jar swagger-codegen-cli-3.0.24.jar config-help -l java`
+              to see configuration options-->
+              <inputSpec>${project.basedir}/src/main/openapi3/iotdb-rest.yaml</inputSpec>
+              <language>java</language>
+              <output>${project.build.directory}/generated-sources/java</output>
+              <apiPackage>org.apache.iotdb.openapi.gen.handler</apiPackage>
+              <modelPackage>org.apache.iotdb.openapi.gen.model</modelPackage>
+              <invokerPackage>org.apache.iotdb.openapi.gen.invoker</invokerPackage>
+              <addCompileSourceRoot>false</addCompileSourceRoot>
+              <configOptions>
+                <licenseName>Apache License 2.0</licenseName>
+                <groupId>org.apache.iotdb</groupId>
+                <artifactId>iotdb-rest-service</artifactId>
+                <artifactVersion>${project.version}</artifactVersion>
+                <serverPort>5667</serverPort>
+                <dateLibrary>java8</dateLibrary>
+                <useGzipFeature>true</useGzipFeature>
+<!--                <library>resteasy</library>-->
+              </configOptions>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+  <!--
+  <dependencies>
+    <dependency>
+      <groupId>io.swagger.core.v3</groupId>
+      <artifactId>swagger-annotations</artifactId>
+      <version>${swagger-core-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.resteasy</groupId>
+      <artifactId>resteasy-client</artifactId>
+      <version>${resteasy-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.resteasy</groupId>
+      <artifactId>resteasy-multipart-provider</artifactId>
+      <version>${resteasy-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-core</artifactId>
+      <version>${jackson.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+      <version>${jackson.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>${jackson.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.datatype</groupId>
+      <artifactId>jackson-datatype-jsr310</artifactId>
+      <version>${jackson.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.resteasy</groupId>
+      <artifactId>resteasy-jackson-provider</artifactId>
+      <version>3.1.3.Final</version>
+    </dependency>
+    <dependency>
+      <groupId>com.github.joschi.jackson</groupId>
+      <artifactId>jackson-datatype-threetenbp</artifactId>
+      <version>${jackson.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+-->
+  <profiles>
+    <profile>
+      <id>java-rest</id>
+      <modules>
+        <module>target/generated-sources/java</module>
+      </modules>
+    </profile>
+
+  </profiles>
+
+</project>
\ No newline at end of file
diff --git a/openapi/src/main/openapi3/iotdb-rest.yaml b/openapi/src/main/openapi3/iotdb-rest.yaml
new file mode 100644
index 0000000..8b8831b
--- /dev/null
+++ b/openapi/src/main/openapi3/iotdb-rest.yaml
@@ -0,0 +1,531 @@
+---
+openapi: 3.0.0
+info:
+  title: iotdb-rest
+  description: IoTDB Rest API for Grafana, Prometheus, etc..
+  license:
+    name: Apache 2.0
+  version: 1.0.0
+servers:
+- url: https://virtserver.swaggerhub.com/jixuan1989/iotdb/1.0.0
+  description: SwaggerHub API Auto Mocking
+- url: http://localhost:5667
+  description: api
+security:
+- basic: []
+paths:
+  /v1/grafana/query/frame:
+    post:
+      summary: Serve for queries from Grafana
+      description: Auto Downsampling data query for Grafana
+      operationId: post-v1-grafana-data
+      parameters: []
+      requestBody:
+        description: Group By Fill Plan
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GroupByFillPlan'
+            examples:
+              example-1:
+                value:
+                  interval: 0
+                  stime: 0
+                  etime: 0
+                  fills:
+                  - dtype: string
+                    fun: string
+                  paths:
+                  - - string
+      responses:
+        "200":
+          description: return data in wide table format
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GrafanaDataFrame'
+              examples: {}
+        "401":
+          description: Example response
+          content:
+            application/json:
+              schema:
+                type: string
+                description: "reason: \nnot login\nno permission"
+              examples:
+                example-1:
+                  value: passowrd is incorrect;
+  /v1/grafana/query/json:
+    post:
+      summary: Serve for queries from Grafana with simpleJson plugin
+      description: Auto Downsampling data query for Grafana with SimpleJson Plugin
+      operationId: post-v1-grafana-data-simplejson
+      parameters: []
+      requestBody:
+        description: Group By Fill Plan
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GroupByFillPlan'
+            examples: {}
+      responses:
+        "200":
+          description: Return data in narrow table format
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GrafanaJson'
+              examples:
+                example-1:
+                  value:
+                  - target: root.sg.d1.s1
+                    datapoints:
+                    - 1.2
+                    - 16100110034
+                    - 1.3
+                    - 16100110035
+                  - target: root.sg.d1.s2
+                    datapoints:
+                    - 1.2
+                    - 16100110034
+                    - 1.3
+                    - 16100110035
+        "401":
+          description: Example response
+          content:
+            application/json:
+              schema:
+                type: string
+                description: "reason: \nnot login\nno permission"
+              examples:
+                example-1:
+                  value: passowrd is incorrect;
+  /v1/prometheus/write:
+    post:
+      summary: Serve for writing data by Prometheus
+      operationId: post-v1-prometheus-receive
+      parameters:
+      - name: User-Agent
+        in: header
+        description: Prometheus/2.24.0
+        required: false
+        style: simple
+        explode: false
+        schema:
+          type: string
+          example: Prometheus/2.24.0
+      - name: X-Prometheus-Remote-Write-Version
+        in: header
+        description: 0.1.0
+        required: false
+        style: simple
+        explode: false
+        schema:
+          type: string
+          example: 0.1.0
+      requestBody:
+        description: |
+          Prompb.WriteRequest that encoding by Protobuf (3.12.3) and compressed by Snappy. Once uncompressed and dencoding.
+        content:
+          application/x-protobuf:
+            schema:
+              type: object
+              properties: {}
+            examples:
+              example-1:
+                value:
+                  Timeseries:
+                  - - Labels:
+                      - Name: tagkey
+                        Value: tagvalue
+                      - Name: tagkey2
+                        Value: tagValue2
+                    - Samples:
+                      - value1:
+                          Timestamp: 16100105235
+                          Value: 0.1
+                  - - Labels:
+                      - Name: tagkey
+                        Value: tagvalue
+                      - value2:
+                          Name: tagkey2
+                          Value: tagValue2
+                    - Samples:
+                      - value1:
+                          Timestamp: 16100105235
+                          Value: 0.1
+      responses:
+        "200":
+          description: OK for failed
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/inline_response_200'
+              examples:
+                example-1:
+                  value:
+                    code: string
+                    message: string
+        "401":
+          description: Example response
+          content:
+            application/json:
+              schema:
+                type: string
+                description: "reason: \nnot login\nno permission"
+              examples:
+                example-1:
+                  value: passowrd is incorrect;
+  /v1/prometheus/query:
+    post:
+      summary: Serve for queries from Prometheus
+      description: Serve reading data by Prometheus
+      operationId: post-v1-prometheus-query
+      parameters:
+      - name: User-Agent
+        in: header
+        description: e.g., Prometheus/2.24.0
+        required: false
+        style: simple
+        explode: false
+        schema:
+          type: string
+      - name: X-Prometheus-Remote-Read-version
+        in: header
+        description: e.g., 0.1.0
+        required: false
+        style: simple
+        explode: false
+        schema:
+          type: string
+      requestBody:
+        description: |
+          Prompb.ReadRequest that encoding by Protobuf (3.12.3) and compressed by Snappy. Once uncompressed and dencoding.
+        content:
+          application/x-protobuf:
+            schema:
+              type: object
+            examples:
+              example-1:
+                value:
+                  Queries:
+                  - StartTimestampMs: 1610210292064
+                    EndTimestampMs: 1610210292064
+                    Matchers:
+                    - Type: LabelMatcher_EQ
+                      Name: __name__
+                      Value: value on the operator right side, e.g., root.sg.d1.s1
+                    Hints:
+                      StepMs: 0
+                      Func: ""
+                      StartMs: 161021029264
+                      EndMs: 161021029264
+                      Grouping: []
+                      By: false
+                      RangeMs: 0
+      responses:
+        "200":
+          description: |
+            Prompb.QueryResult that encoding by Protobuf (3.12.3) and compressed by Snappy. Once uncompressed and dencoding, the data looks like (the same with WriteRequest).
+          content:
+            application/x-protobuf:
+              schema:
+                type: object
+              examples:
+                example-1:
+                  value:
+                    Timeseries:
+                    - - Labels:
+                        - Name: tagkey
+                          Value: tagvalue
+                        - Name: tagkey2
+                          Value: tagValue2
+                      - Samples:
+                        - value1:
+                            Timestamp: 16100105235
+                            Value: 0.1
+                    - - Labels:
+                        - Name: tagkey
+                          Value: tagvalue
+                        - value2:
+                            Name: tagkey2
+                            Value: tagValue2
+                      - Samples:
+                        - value1:
+                            Timestamp: 16100105235
+                            Value: 0.1
+  /v1/grafana/node:
+    post:
+      summary: Serve for getting time series name level by level by Grafana
+      description: Get Children nodes that the node has
+      operationId: post-v1-grafana-node
+      requestBody:
+        content:
+          application/json:
+            schema:
+              type: array
+              description: node name (e.g., "root.a.b.c")
+              items:
+                type: string
+            examples:
+              example-1:
+                value:
+                - root
+                - sg
+                - d1
+      responses:
+        "200":
+          description: Return Node collection for a given parent node.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/inline_response_200_1'
+              examples:
+                example-1:
+                  value:
+                    leaf:
+                    - string
+                    internal:
+                    - string
+        "401":
+          description: Example response
+          content:
+            application/json:
+              schema:
+                type: string
+                description: "reason: \nnot login\nno permission"
+              examples:
+                example-1:
+                  value: passowrd is incorrect;
+components:
+  schemas:
+    GroupByFillPlan:
+      title: GroupByTimeFillPlan
+      type: object
+      properties:
+        interval:
+          type: number
+          description: group by
+        stime:
+          type: number
+        etime:
+          type: number
+        fills:
+          type: array
+          items:
+            $ref: '#/components/schemas/GroupByFillPlan_fills'
+        paths:
+          type: array
+          items:
+            type: array
+            items:
+              type: string
+      description: Group By Time Plan in IoTDB
+      x-examples:
+        example-1:
+          interval: 0
+          stime: 0
+          etime: 0
+          fills:
+          - dtype: string
+            fun: string
+          paths:
+          - - string
+    GrafanaDataFrame:
+      minItems: 1
+      uniqueItems: true
+      type: array
+      items:
+        $ref: '#/components/schemas/GrafanaDataFrame_inner'
+      x-examples:
+        example-1:
+        - name: test
+          fields:
+          - name: Time
+            type: FieldType.time
+            values:
+            - 1610111000
+            - 1610111100
+            - 1610112000
+          - name: root.sg.d1.s1
+            type: FieldType.number
+            values:
+            - 1
+            - 2
+            - 3
+          - name: root.sg.d1.s2
+            type: FieldType.number
+            values:
+            - 1
+            - null
+            - 3
+          - name: root.sg.d1.s3
+            type: FieldType.boolean
+            values:
+            - 0
+            - 0
+            - 1
+    GrafanaJson:
+      title: GrafanaJson
+      type: array
+      items:
+        $ref: '#/components/schemas/GrafanaJson_inner'
+      x-examples:
+        example-1:
+        - target: root.sg.d1.s1
+          datapoints:
+          - - 1.2
+            - 16100110034
+          - - 1.3
+            - 16100110035
+        - target: root.sg.d1.s2
+          datapoints:
+          - - 1.2
+            - 16100110034
+          - - 1.3
+            - 16100110035
+    inline_response_200:
+      type: object
+      properties:
+        code:
+          type: string
+        message:
+          type: string
+    inline_response_200_1:
+      type: object
+      properties:
+        leaf:
+          type: array
+          description: All children nodes that are leaves
+          items:
+            type: string
+        internal:
+          type: array
+          description: All internal nodes
+          items:
+            type: string
+    GroupByFillPlan_fills:
+      type: object
+      properties:
+        dtype:
+          type: string
+        fun:
+          type: string
+    GrafanaDataFrame_inner:
+      required:
+      - fields
+      type: object
+      properties:
+        name:
+          minLength: 1
+          type: string
+          description: prefix of series path
+        fields:
+          minItems: 1
+          uniqueItems: true
+          type: array
+          items:
+            required:
+            - name
+            - type
+            type: object
+            properties:
+              name:
+                minLength: 1
+                type: string
+                description: Time, or series name
+              type:
+                minLength: 1
+                type: string
+                description: FieldType.time or FieldType.number
+              values:
+                type: array
+                description: points (time column or value column)
+                items: {}
+    GrafanaJson_inner:
+      type: object
+      properties:
+        target:
+          type: string
+          description: time series name
+        datapoints:
+          type: array
+          description: value(null if no value), timestamp
+          items:
+            type: number
+  responses:
+    Unauthorized401:
+      description: Example response
+      content:
+        application/json:
+          schema:
+            type: string
+            description: "reason: \nnot login\nno permission"
+          examples:
+            example-1:
+              value: passowrd is incorrect;
+    GrafanaDataFrame200:
+      description: return data in wide table format
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/GrafanaDataFrame'
+          examples: {}
+    GrafanaSimpleJson200:
+      description: Return data in narrow table format
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/GrafanaJson'
+          examples:
+            example-1:
+              value:
+              - target: root.sg.d1.s1
+                datapoints:
+                - 1.2
+                - 16100110034
+                - 1.3
+                - 16100110035
+              - target: root.sg.d1.s2
+                datapoints:
+                - 1.2
+                - 16100110034
+                - 1.3
+                - 16100110035
+    ChinldNodes200:
+      description: Return Node collection for a given parent node.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/inline_response_200_1'
+          examples:
+            example-1:
+              value:
+                leaf:
+                - string
+                internal:
+                - string
+    GeneralResult200:
+      description: Example response
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                type: integer
+              type:
+                type: integer
+              ? ""
+              : oneOf:
+                - $ref: '#/components/schemas/GrafanaJson'
+                - $ref: '#/components/schemas/GrafanaDataFrame'
+                - type: object
+  securitySchemes:
+    basic:
+      type: http
+      scheme: basic
+    APIKey:
+      type: apiKey
+      name: API Key
+      in: header
diff --git a/pom.xml b/pom.xml
index 9a8c06c..f053b2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,6 +100,7 @@
         <module>cross-tests</module>
         <module>zeppelin-interpreter</module>
         <module>client-py</module>
+      <module>openapi</module>
     </modules>
     <!-- Properties Management -->
     <properties>