64 lines
1.6 KiB
Python
Executable File
64 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
|
|
import requests
|
|
|
|
RADIANCE_HOST = os.getenv("RADIANCE_HOST")
|
|
RADIANCE_USER = os.getenv("RADIANCE_USER")
|
|
RADIANCE_PASSWORD = os.getenv("RADIANCE_PASSWORD")
|
|
|
|
LEADER_STATS = """
|
|
SELECT
|
|
floor(slot, -3) as slotWindow,
|
|
leader,
|
|
median(diff) AS medianReplay,
|
|
count() AS count
|
|
FROM
|
|
(
|
|
WITH
|
|
leader,
|
|
minIf(timestamp, type = 'firstShredReceived') AS tsReceived,
|
|
minIf(timestamp, type = 'completed') AS tsCompleted
|
|
SELECT
|
|
source,
|
|
slot,
|
|
leader,
|
|
toUnixTimestamp64Milli(tsCompleted) - toUnixTimestamp64Milli(tsReceived) AS diff
|
|
FROM slot_status
|
|
WHERE toDate(timestamp) = today() - 5
|
|
GROUP BY
|
|
slot,
|
|
leader,
|
|
source
|
|
HAVING diff > 0
|
|
)
|
|
GROUP BY slotWindow, leader
|
|
ORDER BY median(diff)"""
|
|
|
|
|
|
class RadianceClient():
|
|
def __init__(self, host, user, password):
|
|
self.host = host
|
|
self.user = user
|
|
self.password = password
|
|
self.session = requests.session()
|
|
self.session.user_agent = "radiance-client/v0.1"
|
|
self.session.auth = (self.user, self.password)
|
|
|
|
def query(self, query):
|
|
r = self.session.post(self.host, data=query + "\nFORMAT JSON")
|
|
if r.status_code != 200:
|
|
raise Exception("Failed to get leader stats: {}".format(r.text))
|
|
return r.json()['data']
|
|
|
|
def get_leader_stats(self):
|
|
return self.query(LEADER_STATS)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import json
|
|
c = RadianceClient(RADIANCE_HOST, RADIANCE_USER, RADIANCE_PASSWORD)
|
|
r = c.get_leader_stats()
|
|
print(json.dumps(r, indent=2))
|