Skip to content

Commit 8ff52df

Browse files
authored
Update API healthchecks (#778)
* Chore - add vault healthcheck * Chore - add vault healthcheck * Chore - add vault healthcheck
1 parent 65b0748 commit 8ff52df

1 file changed

Lines changed: 73 additions & 18 deletions

File tree

api/health.py

Lines changed: 73 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import dateutil.parser
33
from datetime import datetime
44
from dateutil.tz import tzutc
5-
from flask import Flask, jsonify
5+
from flask import Flask, jsonify, abort
66

77

88
class Oracle:
@@ -80,30 +80,85 @@ def isHealthy(self):
8080
return status["chainHeightDiff"] < 3 and status["secondsDiff"] < 7200 # 2hrs
8181

8282

83-
KSM_URL = "https://api-kusama.interlay.io/graphql/graphql"
84-
INTR_URL = "https://api.interlay.io/graphql/graphql"
85-
86-
app = Flask(__name__)
87-
83+
class Vault:
84+
def __init__(self, baseUrl) -> None:
85+
self.baseUrl = baseUrl
8886

89-
@app.route("/_health/ksm/oracle", methods=["GET"])
90-
def get_ksm_oracle_health():
91-
return jsonify(Oracle(KSM_URL, "KSM").isHealthy())
87+
def _latestVaults(self):
88+
q = """
89+
query MyQuery {
90+
vaults(limit: 10, orderBy: registrationBlock_active_DESC) {
91+
id
92+
registrationTimestamp
93+
}
94+
}
95+
"""
96+
payload = {"query": q, "variables": None}
97+
resp = requests.post(self.baseUrl, json=payload)
98+
return resp.json()["data"]["vaults"]
9299

100+
def isHealthy(self):
101+
vaults = self._latestVaults()
102+
return len(self._latestVaults()) > 0
93103

94-
@app.route("/_health/ksm/relay", methods=["GET"])
95-
def get_ksm_relayer_health():
96-
return jsonify(Relayer(KSM_URL).isHealthy())
97104

105+
KSM_URL = "https://api-kusama.interlay.io/graphql/graphql"
106+
INTR_URL = "https://api.interlay.io/graphql/graphql"
107+
TESTNET_INTR = "https://api-testnet.interlay.io/graphql/graphql"
108+
TESTNET_KINT = "https://api-dev-kintsugi.interlay.io/graphql/graphql"
98109

99-
@app.route("/_health/intr/oracle", methods=["GET"])
100-
def get_intr_oracle_health():
101-
return jsonify(Oracle(INTR_URL, "DOT").isHealthy())
110+
app = Flask(__name__)
102111

103112

104-
@app.route("/_health/intr/relay", methods=["GET"])
105-
def get_intr_relayer_health():
106-
return jsonify(Relayer(INTR_URL).isHealthy())
113+
@app.route("/_health/<chain>/oracle", methods=["GET"])
114+
def get_oracle_health(chain):
115+
def oracle():
116+
if chain == "kint":
117+
return Oracle(KSM_URL, "KSM")
118+
elif chain == "intr":
119+
return Oracle(INTR_URL, "DOT")
120+
elif chain == "testnet_kint":
121+
return Oracle(TESTNET_KINT, "KSM")
122+
elif chain == "testnet_intr":
123+
return Oracle(TESTNET_INTR, "DOT")
124+
else:
125+
abort(404)
126+
127+
return jsonify(oracle().isHealthy())
128+
129+
130+
@app.route("/_health/<chain>/relay", methods=["GET"])
131+
def get_relay_health(chain):
132+
def relay():
133+
if chain == "kint":
134+
return Relayer(KSM_URL)
135+
elif chain == "intr":
136+
return Relayer(INTR_URL)
137+
elif chain == "testnet_kint":
138+
return Relayer(TESTNET_KINT)
139+
elif chain == "testnet_intr":
140+
return Relayer(TESTNET_INTR)
141+
else:
142+
abort(404)
143+
144+
return jsonify(relay().isHealthy())
145+
146+
147+
@app.route("/_health/<chain>/vault", methods=["GET"])
148+
def get_vault_health(chain):
149+
def vault():
150+
if chain == "kint":
151+
return Vault(KSM_URL)
152+
elif chain == "intr":
153+
return Vault(INTR_URL)
154+
elif chain == "testnet_kint":
155+
return Vault(TESTNET_KINT)
156+
elif chain == "testnet_intr":
157+
return Vault(TESTNET_INTR)
158+
else:
159+
abort(404)
160+
161+
return jsonify(vault().isHealthy())
107162

108163

109164
if __name__ == "__main__":

0 commit comments

Comments
 (0)