-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathrap_update_backend_status.py
More file actions
71 lines (56 loc) · 2.63 KB
/
rap_update_backend_status.py
File metadata and controls
71 lines (56 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from datetime import datetime
import structlog
from django.conf import settings
from django.core.management.base import BaseCommand
from jobserver import rap_api
from jobserver.models import Backend, Stats
class Command(BaseCommand):
def handle(self, *args, **options):
logger = structlog.get_logger(__name__)
try:
# Retrieve the response gotten from the rap_api endpoint
backend_status_response = rap_api.backend_status()
backends = backend_status_response["backends"]
for backend_states in backends:
backend_slug = backend_states["slug"]
backend_object = Backend.objects.get(slug=backend_slug)
# Record the time we're told this backend was last seen alive, for availability
# reporting purposes
last_seen_at = backend_states["last_seen"]
if not last_seen_at:
backend_object.last_seen_at = None
else:
last_seen_at_dt = datetime.fromisoformat(last_seen_at)
Stats.objects.update_or_create(
backend=backend_object,
url=settings.RAP_API_BASE_URL,
defaults={"api_last_seen": last_seen_at_dt},
)
backend_object.last_seen_at = last_seen_at_dt
# Record the time this backend was last in maintenance mode
last_seen_in_maintenance_mode = backend_states["db_maintenance"][
"since"
]
if not last_seen_in_maintenance_mode:
backend_object.last_seen_maintenance_mode = None
else:
last_seen_dt_maintenance_mode = datetime.fromisoformat(
last_seen_in_maintenance_mode
)
backend_object.last_seen_maintenance_mode = (
last_seen_dt_maintenance_mode
)
backend_object.rap_api_state = backend_states
backend_maintenance_mode = backend_states["db_maintenance"]["status"]
backend_object.is_in_maintenance_mode = backend_maintenance_mode == "on"
backend_object.save(
update_fields=[
"rap_api_state",
"last_seen_at",
"last_seen_maintenance_mode",
"is_in_maintenance_mode",
]
)
logger.info(backend_status_response)
except Exception as exc:
logger.error(exc)