tpuproxy/python_client/radiance.py

64 lines
1.6 KiB
Python
Raw Normal View History

#!/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
2022-08-12 10:44:53 -07:00
floor(slot, -3) as slotWindow,
leader,
2022-08-12 10:44:53 -07:00
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
2022-08-12 10:44:53 -07:00
HAVING diff > 0
)
2022-08-12 10:44:53 -07:00
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):
2022-08-12 10:48:53 -07:00
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__':
2022-08-12 10:54:07 -07:00
import json
c = RadianceClient(RADIANCE_HOST, RADIANCE_USER, RADIANCE_PASSWORD)
r = c.get_leader_stats()
2022-08-12 10:54:07 -07:00
print(json.dumps(r, indent=2))