summaryrefslogtreecommitdiffstats
path: root/src/cepis-health.cob
diff options
context:
space:
mode:
Diffstat (limited to 'src/cepis-health.cob')
-rw-r--r--src/cepis-health.cob93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/cepis-health.cob b/src/cepis-health.cob
new file mode 100644
index 0000000..86da407
--- /dev/null
+++ b/src/cepis-health.cob
@@ -0,0 +1,93 @@
+IDENTIFICATION DIVISION.
+PROGRAM-ID. CEPIS-HEALTH.
+
+*> ---------------------------------------------------------------------
+*> Ask the API how it is.
+*>
+*> CALL "CEPIS-HEALTH" USING CEPIS-CONFIG CEPIS-HEALTH CEPIS-STATUS
+*>
+*> Good for two things: confirming the API answers at all, and knowing
+*> which version of the database is live. The DNE database is rebuilt
+*> every two weeks and HEALTH-DNE identifies the edition in use.
+*>
+*> An API reporting itself degraded is not a failure of this call. It
+*> answers 503 with a body, and that arrives in HEALTH-STATUS with
+*> CEPIS-OK set -- checking health is exactly when you want the
+*> diagnosis rather than an error. A transport failure still fails.
+*> ---------------------------------------------------------------------
+
+DATA DIVISION.
+WORKING-STORAGE SECTION.
+COPY "cepis-http.cpy".
+COPY "cepis-json.cpy".
+
+LINKAGE SECTION.
+COPY "cepis.cpy".
+
+PROCEDURE DIVISION USING CEPIS-CONFIG CEPIS-HEALTH CEPIS-STATUS.
+
+MAIN-START.
+ INITIALIZE CEPIS-HEALTH
+
+ MOVE SPACES TO HTTPQ-PATH
+ MOVE "/health" TO HTTPQ-PATH
+ MOVE 7 TO HTTPQ-PATH-LEN
+ MOVE "Y" TO HTTPQ-ALLOW-503
+
+ CALL "CEPIS-REQUEST" USING CEPIS-CONFIG CEPIS-HTTP-REQUEST
+ CEPIS-HTTP-RESPONSE CEPIS-STATUS
+ END-CALL
+ IF CEPIS-FAILED
+ GOBACK
+ END-IF
+
+ IF HTTP-STATUS NOT = 200 AND HTTP-STATUS NOT = 503
+ SET CEPIS-INVALID-RESPONSE TO TRUE
+ MOVE SPACES TO CEPIS-STATUS-MESSAGE
+ STRING "unexpected status " HTTP-STATUS " from /health"
+ DELIMITED BY SIZE INTO CEPIS-STATUS-MESSAGE
+ END-STRING
+ GOBACK
+ END-IF
+
+ MOVE "status" TO JS-KEY
+ PERFORM GET-MEMBER
+ IF JS-TYPE = "E"
+ SET CEPIS-INVALID-RESPONSE TO TRUE
+ MOVE "response to /health is not a JSON object"
+ TO CEPIS-STATUS-MESSAGE
+ GOBACK
+ END-IF
+ MOVE JS-VALUE TO HEALTH-STATUS
+
+ MOVE "dne" TO JS-KEY
+ PERFORM GET-MEMBER
+ MOVE JS-VALUE TO HEALTH-DNE
+
+ MOVE "ceps" TO JS-KEY
+ PERFORM GET-MEMBER
+ IF JS-TYPE = "N"
+ COMPUTE HEALTH-CEPS ROUNDED = FUNCTION NUMVAL (JS-VALUE)
+ END-IF
+
+ MOVE "geo" TO JS-KEY
+ PERFORM GET-MEMBER
+ IF JS-TYPE = "N"
+ COMPUTE HEALTH-GEO ROUNDED = FUNCTION NUMVAL (JS-VALUE)
+ END-IF
+
+ MOVE "base_gerada_em" TO JS-KEY
+ PERFORM GET-MEMBER
+ MOVE JS-VALUE TO HEALTH-BASE-GERADA-EM
+
+ SET CEPIS-OK TO TRUE
+ GOBACK.
+
+*> -------------------------------------------------------------------
+GET-MEMBER.
+ MOVE 1 TO JS-FROM
+ MOVE HTTP-BODY-LEN TO JS-TO
+ CALL "CEPIS-JSON-GET" USING HTTP-BODY CEPIS-JSON-SCAN
+ END-CALL.
+
+END PROGRAM CEPIS-HEALTH.