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.