mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-09-20 14:27:42 +00:00
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
import logging
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
import pytz
|
|
import tornado
|
|
from tornado import httputil
|
|
from tornado.web import Application
|
|
|
|
from core.prometheus_metrics_handler import api_requests_counter
|
|
from core.utils import safe_json_dumps
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class APISolarConditionsHandler(tornado.web.RequestHandler):
|
|
"""API request handler for /api/v2/solar"""
|
|
|
|
def __init__(
|
|
self,
|
|
application: "Application",
|
|
request: httputil.HTTPServerRequest,
|
|
**kwargs: Any,
|
|
):
|
|
self._solar_conditions = None
|
|
self._web_server_metrics = None
|
|
super().__init__(application, request, **kwargs)
|
|
|
|
def initialize(self, solar_conditions, web_server_metrics):
|
|
self._solar_conditions = solar_conditions
|
|
self._web_server_metrics = web_server_metrics
|
|
|
|
def get(self):
|
|
try:
|
|
# Metrics
|
|
self._web_server_metrics["last_api_access_time"] = datetime.now(pytz.UTC)
|
|
self._web_server_metrics["api_access_counter"] += 1
|
|
self._web_server_metrics["status"] = "OK"
|
|
api_requests_counter.inc()
|
|
|
|
self.write(self._solar_conditions.to_json())
|
|
self.set_status(200)
|
|
self.set_header("Cache-Control", "no-store")
|
|
self.set_header("Content-Type", "application/json")
|
|
|
|
except Exception:
|
|
logger.exception("Exception when handling client request to solar conditions API")
|
|
self.write(safe_json_dumps("Error - an internal server error occurred."))
|
|
self.set_status(500)
|