mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-02-04 01:04:33 +00:00
Implement web server metrics in Tornado #3
This commit is contained in:
@@ -15,35 +15,25 @@ from server.handlers.pagetemplate import PageTemplateHandler
|
||||
|
||||
|
||||
# Provides the public-facing web server.
|
||||
# TODO test lookups
|
||||
# TODO SSE API responses
|
||||
# TODO clean_up_sse_queues
|
||||
# TODO page & API access counters - how to do from a subclass handler? e.g.
|
||||
# self.last_api_access_time = datetime.now(pytz.UTC)
|
||||
# self.api_access_counter += 1
|
||||
# api_requests_counter.inc()
|
||||
# self.status = "OK"
|
||||
#
|
||||
# self.last_page_access_time = datetime.now(pytz.UTC)
|
||||
# self.page_access_counter += 1
|
||||
# page_requests_counter.inc()
|
||||
# self.status = "OK"
|
||||
|
||||
class WebServer:
|
||||
# Constructor
|
||||
def __init__(self, spots, alerts, status_data, port):
|
||||
self.last_page_access_time = None
|
||||
self.last_api_access_time = None
|
||||
self.page_access_counter = 0
|
||||
self.api_access_counter = 0
|
||||
self.spots = spots
|
||||
self.alerts = alerts
|
||||
self.sse_spot_queues = []
|
||||
self.sse_alert_queues = []
|
||||
self.status_data = status_data
|
||||
self.port = port
|
||||
self.status = "Starting"
|
||||
self.shutdown_event = asyncio.Event()
|
||||
self.web_server_metrics = {
|
||||
"last_page_access_time": None,
|
||||
"last_api_access_time": None,
|
||||
"page_access_counter": 0,
|
||||
"api_access_counter": 0,
|
||||
"status": "Starting"
|
||||
}
|
||||
|
||||
# Start the web server
|
||||
def start(self):
|
||||
@@ -57,24 +47,24 @@ class WebServer:
|
||||
async def start_inner(self):
|
||||
app = tornado.web.Application([
|
||||
# Routes for API calls
|
||||
(r"/api/v1/spots", APISpotsHandler, {"spots": self.spots}),
|
||||
(r"/api/v1/alerts", APIAlertsHandler, {"alerts": self.alerts}),
|
||||
(r"/api/v1/spots", APISpotsHandler, {"spots": self.spots, "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/api/v1/alerts", APIAlertsHandler, {"alerts": self.alerts, "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/api/v1/spots/stream", APISpotsStreamHandler), # todo provide queues?
|
||||
(r"/api/v1/alerts/stream", APIAlertsStreamHandler), # todo provide queues?
|
||||
(r"/api/v1/options", APIOptionsHandler, {"status_data": self.status_data}),
|
||||
(r"/api/v1/status", APIStatusHandler, {"status_data": self.status_data}),
|
||||
(r"/api/v1/lookup/call", APILookupCallHandler),
|
||||
(r"/api/v1/lookup/sigref", APILookupSIGRefHandler),
|
||||
(r"/api/v1/spot", APISpotHandler, {"spots": self.spots}),
|
||||
(r"/api/v1/options", APIOptionsHandler, {"status_data": self.status_data, "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/api/v1/status", APIStatusHandler, {"status_data": self.status_data, "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/api/v1/lookup/call", APILookupCallHandler, {"web_server_metrics": self.web_server_metrics}),
|
||||
(r"/api/v1/lookup/sigref", APILookupSIGRefHandler, {"web_server_metrics": self.web_server_metrics}),
|
||||
(r"/api/v1/spot", APISpotHandler, {"spots": self.spots, "web_server_metrics": self.web_server_metrics}),
|
||||
# Routes for templated pages
|
||||
(r"/", PageTemplateHandler, {"template_name": "spots"}),
|
||||
(r"/map", PageTemplateHandler, {"template_name": "map"}),
|
||||
(r"/bands", PageTemplateHandler, {"template_name": "bands"}),
|
||||
(r"/alerts", PageTemplateHandler, {"template_name": "alerts"}),
|
||||
(r"/add-spot", PageTemplateHandler, {"template_name": "add_spot"}),
|
||||
(r"/status", PageTemplateHandler, {"template_name": "status"}),
|
||||
(r"/about", PageTemplateHandler, {"template_name": "about"}),
|
||||
(r"/apidocs", PageTemplateHandler, {"template_name": "apidocs"}),
|
||||
(r"/", PageTemplateHandler, {"template_name": "spots", "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/map", PageTemplateHandler, {"template_name": "map", "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/bands", PageTemplateHandler, {"template_name": "bands", "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/alerts", PageTemplateHandler, {"template_name": "alerts", "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/add-spot", PageTemplateHandler, {"template_name": "add_spot", "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/status", PageTemplateHandler, {"template_name": "status", "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/about", PageTemplateHandler, {"template_name": "about", "web_server_metrics": self.web_server_metrics}),
|
||||
(r"/apidocs", PageTemplateHandler, {"template_name": "apidocs", "web_server_metrics": self.web_server_metrics}),
|
||||
# Route for Prometheus metrics
|
||||
(r"/metrics", PrometheusMetricsHandler),
|
||||
# Default route to serve from "webassets"
|
||||
|
||||
Reference in New Issue
Block a user