From 1816d52d21db72df8f6876366382072528e7505a Mon Sep 17 00:00:00 2001
From: Bai <baijiangjie@gmail.com>
Date: Thu, 25 Jul 2024 18:59:06 +0800
Subject: [PATCH] perf: Modifying the label matching logic of an AppletHost
 (random)

---
 apps/assets/models/asset/common.py    |  2 +-
 apps/terminal/models/applet/applet.py | 13 +++++++------
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/apps/assets/models/asset/common.py b/apps/assets/models/asset/common.py
index 7d3fb5fd2..d0ab26c4d 100644
--- a/apps/assets/models/asset/common.py
+++ b/apps/assets/models/asset/common.py
@@ -174,7 +174,7 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
 
     def get_labels(self):
         from labels.models import Label, LabeledResource
-        res_type = ContentType.objects.get_for_model(self.__class__)
+        res_type = ContentType.objects.get_for_model(self.__class__.label_model())
         label_ids = LabeledResource.objects.filter(res_type=res_type, res_id=self.id) \
             .values_list('label_id', flat=True)
         return Label.objects.filter(id__in=label_ids)
diff --git a/apps/terminal/models/applet/applet.py b/apps/terminal/models/applet/applet.py
index 08a7b809a..0342aadc1 100644
--- a/apps/terminal/models/applet/applet.py
+++ b/apps/terminal/models/applet/applet.py
@@ -171,12 +171,13 @@ class Applet(JMSBaseModel):
         if not hosts:
             return None
 
-        spec_label = asset.labels.filter(label__name__in=['AppletHost', '发布机']).first()
-        if spec_label and spec_label.label:
-            label_value = spec_label.label.value
-            matched = [host for host in hosts if host.name == label_value]
-            if matched:
-                return random.choice(matched)
+        spec_label_values = asset.get_labels().filter(
+            name__in=['AppletHost', '发布机']
+        ).values_list('value', flat=True)
+        host_matched = [host for host in hosts if host.name in spec_label_values]
+        if host_matched:
+            return random.choice(host_matched)
+
 
         hosts = [h for h in hosts if h.auto_create_accounts]
         prefer_key = self.host_prefer_key_tpl.format(user.id)