diff --git a/server/devel/create_sample_data.py b/server/devel/create_sample_data.py index d6620554a..4aedaa4bd 100755 --- a/server/devel/create_sample_data.py +++ b/server/devel/create_sample_data.py @@ -63,7 +63,15 @@ def _server_validator(server: str) -> str: "--queues", type=int, default=10, - help="Number of queues to create", + help="Number of queues to distribute amongst jobs and agents", + ) + + parser.add_argument( + "-d", + "--advertised-queues", + type=int, + default=1, + help="Number of advertised queues to create", ) parser.add_argument( @@ -112,7 +120,7 @@ def __iter__(self): "state": random.choice(("waiting", "test", "provision")), } if self.queue_list: - agent_data["queues"] = [random.choice(self.queue_list)] + agent_data["queues"] = random.sample(self.queue_list, random.randint(1, len(self.queue_list))) yield (f"{self.prefix}{agent_num}", agent_data) @@ -241,7 +249,8 @@ def main(): testflinger_client = TestflingerClient(server_url=args.server) queues = QueueDataGenerator(num_queues=args.queues) - testflinger_client.post_queue_data(queues=queues) + # configure "advertised" queues: + testflinger_client.post_queue_data(random.sample(tuple(queues), random.randint(1, args.advertised_queues))) logging.info("Created %s queues", args.queues) valid_queue_names = extract_queue_names(queues=queues) diff --git a/server/src/testflinger/templates/agent_detail.html b/server/src/testflinger/templates/agent_detail.html index 9b65b035c..5c7786f76 100644 --- a/server/src/testflinger/templates/agent_detail.html +++ b/server/src/testflinger/templates/agent_detail.html @@ -33,72 +33,86 @@

Agent Detail - {{ agent.name }}

Queues

-

Provision History

-
-
- - -
-
- - -
- -
-
- Provision success rate for this range: {{ agent.provision_success_rate }}% -
-
- +
- - - - + + + - {% for log in agent.provision_log|reverse %} - - - - + - + + {% endfor %} -
Finished AtJob IDStatusDetailNameNumber of jobsDescription
{{ log.timestamp.strftime("%Y-%m-%d %H:%M:%S") }} - {{ log.job_id }} - - {{ log.exit_code }} + {% for queue in agent.queues %} +
+ {{ queue.name }} + {% if agent.restricted_to[queue.name]|default([]) %} + (restricted to: {{ agent.restricted_to[queue.name]|join(", ") }}) + {% endif %} {{ log.detail }}{{ queue.numjobs }}{{ queue.description }}
-
-

Agent Log

-
-
-
+    
+    

Provision History

+
+
+ + +
+
+ + +
+ +
+
+ Provision success rate for this range: {{ agent.provision_success_rate }}% +
+
+ + + + + + + + + + + {% for log in agent.provision_log|reverse %} + + + + + + + {% endfor %} + +
Finished AtJob IDStatusDetail
{{ log.timestamp.strftime("%Y-%m-%d %H:%M:%S") }} + {{ log.job_id }} + + {{ log.exit_code }} + {{ log.detail }}
+
+

Agent Log

+
+
+
         
             {{ agent.log|join('\n') }}
         
     
+
-
-{% endblock content %} + {% endblock content %} diff --git a/server/src/testflinger/views.py b/server/src/testflinger/views.py index 67e20f6da..7f85ce370 100644 --- a/server/src/testflinger/views.py +++ b/server/src/testflinger/views.py @@ -91,6 +91,25 @@ def agent_detail(agent_id): for queue in agent_info.get("queues", []) } + queue_info = [] + for queue_name in agent_info.pop("queues", []): + queue_data = mongo.db.queues.find_one({"name": queue_name}) + if not queue_data: + # If it's not an advertised queue, create some dummy data + queue_data = {"description": "No description"} + queue_data["name"] = queue_name + queue_data["numjobs"] = mongo.db.jobs.count_documents( + { + "job_data.job_queue": queue_name, + "result_data.job_state": { + "$nin": ["complete", "completed", "cancelled"] + }, + } + ) + queue_info.append(queue_data) + + agent_info["queues"] = queue_info + # We want to include the start/stop dates so that default values # can be filled in for the date pickers agent_info["start"] = start_date