|
2 | 2 | import dateutil.parser |
3 | 3 | from datetime import datetime |
4 | 4 | from dateutil.tz import tzutc |
5 | | -from flask import Flask, jsonify |
| 5 | +from flask import Flask, jsonify, abort |
6 | 6 |
|
7 | 7 |
|
8 | 8 | class Oracle: |
@@ -80,30 +80,85 @@ def isHealthy(self): |
80 | 80 | return status["chainHeightDiff"] < 3 and status["secondsDiff"] < 7200 # 2hrs |
81 | 81 |
|
82 | 82 |
|
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 |
88 | 86 |
|
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"] |
92 | 99 |
|
| 100 | + def isHealthy(self): |
| 101 | + vaults = self._latestVaults() |
| 102 | + return len(self._latestVaults()) > 0 |
93 | 103 |
|
94 | | -@app.route("/_health/ksm/relay", methods=["GET"]) |
95 | | -def get_ksm_relayer_health(): |
96 | | - return jsonify(Relayer(KSM_URL).isHealthy()) |
97 | 104 |
|
| 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" |
98 | 109 |
|
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__) |
102 | 111 |
|
103 | 112 |
|
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()) |
107 | 162 |
|
108 | 163 |
|
109 | 164 | if __name__ == "__main__": |
|
0 commit comments