diff options
Diffstat (limited to 'src/cepis-health.cob')
| -rw-r--r-- | src/cepis-health.cob | 93 |
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. |