sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #04641
[Merge] ~ack/maas:machine-websocket-status-message into maas:master
Alberto Donato has proposed merging ~ack/maas:machine-websocket-status-message into maas:master.
Commit message:
optimize getting status_message for the machine websocket handler
This also drops the attribute for controllers, since it's not used there
Requested reviews:
MAAS Maintainers (maas-maintainers)
For more details, see:
https://code.launchpad.net/~ack/maas/+git/maas/+merge/435975
--
Your team MAAS Committers is subscribed to branch maas:master.
diff --git a/src/maasserver/websockets/handlers/controller.py b/src/maasserver/websockets/handlers/controller.py
index 0e54ff9..186eb3f 100644
--- a/src/maasserver/websockets/handlers/controller.py
+++ b/src/maasserver/websockets/handlers/controller.py
@@ -68,13 +68,6 @@ class ControllerHandler(NodeHandler):
.order_by("-created", "-id")
.values("type__description")[:1]
),
- status_event_description=Subquery(
- Event.objects.filter(
- node=OuterRef("pk"), type__level__gte=logging.INFO
- )
- .order_by("-created", "-id")
- .values("description")[:1]
- ),
vlan_ids=_vlan_ids_aggr,
)
)
diff --git a/src/maasserver/websockets/handlers/machine.py b/src/maasserver/websockets/handlers/machine.py
index 0a51415..861a45e 100644
--- a/src/maasserver/websockets/handlers/machine.py
+++ b/src/maasserver/websockets/handlers/machine.py
@@ -9,9 +9,18 @@ import logging
from operator import itemgetter
from django.core.exceptions import ObjectDoesNotExist, ValidationError
-from django.db.models import Case, CharField, Count, F, OuterRef, Subquery, Sum
-from django.db.models import Value as V
-from django.db.models import When
+from django.db.models import (
+ Case,
+ CharField,
+ Count,
+ F,
+ OuterRef,
+ Subquery,
+ Sum,
+ TextField,
+ Value,
+ When,
+)
from django.db.models.functions import Concat
from maasserver.enum import (
@@ -96,10 +105,10 @@ log = LegacyLogger()
def _build_simple_status_q():
return Case(
*[
- When(status__in=values, then=V(status))
+ When(status__in=values, then=Value(status))
for status, values in SIMPLIFIED_NODE_STATUSES_MAP.items()
],
- default=V(SIMPLIFIED_NODE_STATUS.OTHER),
+ default=Value(SIMPLIFIED_NODE_STATUS.OTHER),
)
@@ -147,19 +156,20 @@ class MachineHandler(NodeHandler):
.prefetch_related("pool")
.prefetch_related("ownerdata_set")
.annotate(
- status_event_type_description=Subquery(
+ status_message_text=Subquery(
Event.objects.filter(
node=OuterRef("pk"), type__level__gte=logging.INFO
)
.order_by("-created", "-id")
- .values("type__description")[:1]
- ),
- status_event_description=Subquery(
- Event.objects.filter(
- node=OuterRef("pk"), type__level__gte=logging.INFO
+ .annotate(
+ message=Concat(
+ F("type__description"),
+ Value(" - "),
+ F("description"),
+ output_field=TextField(),
+ ),
)
- .order_by("-created", "-id")
- .values("description")[:1]
+ .values("message")[:1]
),
physical_disk_count=Count(
"current_config__blockdevice__physicalblockdevice"
@@ -171,7 +181,7 @@ class MachineHandler(NodeHandler):
fabric_name=F("boot_interface__vlan__fabric__name"),
node_fqdn=Concat(
"hostname",
- V("."),
+ Value("."),
"domain__name",
output_field=CharField(),
),
@@ -299,17 +309,10 @@ class MachineHandler(NodeHandler):
"""Add extra fields to `data`."""
data = super().dehydrate(obj, data, for_list=for_list)
data["parent"] = getattr(obj.parent, "system_id", None)
- # Try to use the annotated event description so its loaded in the same
- # query as loading the machines. Otherwise fallback to the method on
- # the machine.
- if hasattr(obj, "status_event_description"):
- if obj.status_event_description:
- data["status_message"] = "{} - {}".format(
- obj.status_event_type_description,
- obj.status_event_description,
- )
- else:
- data["status_message"] = obj.status_event_type_description
+ # Try to use the annotated value from the queryset. Otherwise fallback
+ # to the method on the machine.
+ if hasattr(obj, "status_message_text"):
+ data["status_message"] = obj.status_message_text
else:
data["status_message"] = obj.status_message()
Follow ups