blob: 86da407a0bc89bc5d221308ee82abf2587ce7bdb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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.
|