From b91c829f4cfa7fadca730dc472a4de5b9cd457e2 Mon Sep 17 00:00:00 2001
From: Andrey Meshkov <am@adguard.com>
Date: Mon, 26 Nov 2018 00:08:47 +0300
Subject: [PATCH] Added more openapi definitions

---
 openapi/openapi.yaml | 266 +++++++++++++++++++++++++------------------
 1 file changed, 158 insertions(+), 108 deletions(-)

diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml
index d8797005..034021df 100644
--- a/openapi/openapi.yaml
+++ b/openapi/openapi.yaml
@@ -132,53 +132,8 @@ paths:
             responses:
                 200:
                     description: OK
-                    examples:
-                        application/json:
-                        # TODO: move to definitions
-                            - answer:
-                              - ttl: 55
-                                type: A
-                                value: 217.69.139.201
-                              - ttl: 55
-                                type: A
-                                value: 94.100.180.200
-                              - ttl: 55
-                                type: A
-                                value: 94.100.180.201
-                              - ttl: 55
-                                type: A
-                                value: 217.69.139.200
-                              elapsedMs: '65.469556'
-                              question:
-                                class: IN
-                                host: mail.ru
-                                type: A
-                              reason: DNSFILTER_NOTFILTERED_NOTFOUND
-                              status: NOERROR
-                              time: '2018-07-16T22:24:02+03:00'
-                            - elapsedMs: '0.15716999999999998'
-                              question:
-                                class: IN
-                                host: doubleclick.net
-                                type: A
-                              reason: DNSFILTER_FILTERED_BLACKLIST
-                              rule: "||doubleclick.net^"
-                              status: NXDOMAIN
-                              time: '2018-07-16T22:24:02+03:00'
-                            - answer:
-                              - ttl: 299
-                                type: A
-                                value: 176.103.133.78
-                              elapsedMs: '132.110929'
-                              question:
-                                class: IN
-                                host: wmconvirus.narod.ru
-                                type: A
-                              reason: DNSFILTER_FILTERED_SAFEBROWSING
-                              rule: adguard-malware-shavar
-                              filterId: 1
-                              status: NOERROR
-                              time: '2018-07-16T22:24:02+03:00'
+                    schema:
+                        $ref: '#/definitions/QueryLog'
     /querylog_enable:
         post:
             tags:
@@ -217,22 +172,15 @@ paths:
             summary: 'Get DNS server statistics'
             responses:
                 200:
-                    description: 'Gives statistics since start of the server'
-                    examples:
-                        # TODO: move to definitions
-                        application/json:
-                            dns_queries: 1201
-                            blocked_filtering: 123
-                            replaced_safebrowsing: 5
-                            replaced_parental: 18
-                            replaced_safesearch: 94
-                            avg_processing_time: 123
+                    description: 'Returns general statistics for the last 24 hours'
+                    schema:
+                        $ref: "#/definitions/Stats"
     /stats_history:
         get:
             tags:
                 - stats
             operationId: stats_history
-            summary: 'Get historical DNS server statistics'
+            summary: 'Get historical DNS server statistics for the last 24 hours'
             parameters:
                 -
                     name: start_time
@@ -259,46 +207,9 @@ paths:
                 501:
                     description: 'Requested time window is outside of supported range. It will be supported later, but not now.'
                 200:
-                    description: 'Gives statistics since start of the server. Example below is for 5 minutes. Values are from oldest to newest.'
-                    examples:
-                        # TODO: move to definitions
-                        application/json:
-                            dns_queries:
-                                - 1201
-                                - 1201
-                                - 1201
-                                - 1201
-                                - 1201
-                            blocked_filtering:
-                                - 123
-                                - 123
-                                - 123
-                                - 123
-                                - 123
-                            replaced_safebrowsing:
-                                - 5
-                                - 5
-                                - 5
-                                - 5
-                                - 5
-                            replaced_parental:
-                                - 18
-                                - 18
-                                - 18
-                                - 18
-                                - 18
-                            replaced_safesearch:
-                                - 94
-                                - 94
-                                - 94
-                                - 94
-                                - 94
-                            avg_processing_time:
-                                - 123
-                                - 123
-                                - 123
-                                - 123
-                                - 123
+                    description: 'Returns historical stats for the specified time interval.'
+                    schema:
+                        $ref: '#/definitions/StatsHistory'
     /stats_reset:
         post:
             tags:
@@ -738,17 +649,8 @@ definitions:
             avg_processing_time:
                 type: "number"
                 format: "float"
-                description: "Average time in milliseconds on processing a DNS request"
+                description: "Average time in milliseconds on processing a DNS"
                 example: 0.34
-            
-
-                            # dns_queries: 1201
-                            # blocked_filtering: 123
-                            # replaced_safebrowsing: 5
-                            # replaced_parental: 18
-                            # replaced_safesearch: 94
-                            # avg_processing_time: 123
-
     StatsTop:
         type: "object"
         description: "Server stats top charts"
@@ -781,6 +683,78 @@ definitions:
                     example.org: 12312
                     example.com: 321
                     example.net: 5555
+    StatsHistory:
+        type: "object"
+        description: "Historical stats of the DNS server. Example below is for 5 minutes. Values are from oldest to newest."
+        required:
+            - "dns_queries"
+            - "blocked_filtering"
+            - "replaced_safebrowsing"
+            - "replaced_parental"
+            - "replaced_safesearch"
+            - "avg_processing_time"
+        properties:
+            dns_queries:
+                type: "array"
+                items:
+                    type: "integer"
+                example:
+                    - 1201
+                    - 1501
+                    - 1251
+                    - 1231
+                    - 120
+            blocked_filtering:
+                type: "array"
+                items:
+                    type: "integer"
+                example:
+                    - 421
+                    - 124
+                    - 5
+                    - 12
+                    - 43
+            replaced_safebrowsing:
+                type: "array"
+                items:
+                    type: "integer"
+                example:
+                    - 1
+                    - 0
+                    - 5
+                    - 0
+                    - 0
+            replaced_parental:
+                type: "array"
+                items:
+                    type: "integer"
+                example:
+                    - 120
+                    - 10
+                    - 5
+                    - 12
+                    - 1
+            replaced_safesearch:
+                type: "array"
+                items:
+                    type: "integer"
+                example:
+                    - 1
+                    - 0
+                    - 0
+                    - 0
+                    - 5
+            avg_processing_time:
+                type: "array"
+                items:
+                    type: "number"
+                    format: "float"
+                example:
+                    - 1.25
+                    - 5.12
+                    - 4.12
+                    - 123.12
+                    - 0.12
     DhcpConfig:
         type: "object"
         description: "Built-in DHCP server configuration"
@@ -833,6 +807,7 @@ definitions:
                 example: "2017-07-21T17:32:28Z"
     DhcpStatus:
         type: "object"
+        description: "Built-in DHCP server configuration and status"
         required:
             - "config"
             - "leases"
@@ -843,3 +818,78 @@ definitions:
                 type: "array"
                 items:
                     $ref: "#/definitions/DhcpLease"
+    DnsAnswer:
+        type: "object"
+        description: "DNS answer section"
+        properties:
+            ttl:
+                type: "integer"
+                example: 55
+            type:
+                type: "string"
+                example: "A"
+            value:
+                type: "string"
+                example: "217.69.139.201"
+    DnsQuestion:
+        type: "object"
+        description: "DNS question section"
+        properties:
+            class:
+                type: "string"
+                example: "IN"
+            host:
+                type: "string"
+                example: "example.org"
+            type:
+                type: "string"
+                example: "A"
+    QueryLogItem:
+        type: "object"
+        description: "Query log item"
+        properties:
+            answer:
+                type: "array"
+                items:
+                    $ref: "#/definitions/DnsAnswer"
+            client:
+                type: "string"
+                example: "192.168.0.1"
+            elapsedMs:
+                type: "string"
+                example: "54.023928"
+            question:
+                $ref: "#/definitions/DnsQuestion"
+            filterId:
+                type: "integer"
+                example: 123123
+                description: "In case if there's a rule applied to this DNS request, this is ID of the filter that rule belongs to."
+            rule:
+                type: "string"
+                example: "||example.org^"
+                description: "Filtering rule applied to the request (if any)"
+            reason:
+                type: "string"
+                description: "DNS filter status"
+                enum:
+                - "NotFilteredNotFound"
+                - "NotFilteredWhiteList"
+                - "NotFilteredError"
+                - "FilteredBlackList"
+                - "FilteredSafeBrowsing"
+                - "FilteredParental"
+                - "FilteredInvalid"
+                - "FilteredSafeSearch"
+            status:
+                type: "string"
+                description: "DNS response status"
+                example: "NOERROR"
+            time:
+                type: "string"
+                description: "DNS request processing start time"
+                example: "2018-11-26T00:02:41+03:00"
+    QueryLog:
+        type: "array"
+        description: "Query log"
+        items:
+            $ref: "#/definitions/QueryLogItem"
\ No newline at end of file