MCPcopy
hub / github.com/benoitc/gunicorn / handle_status_request

Method handle_status_request

gunicorn/dirty/arbiter.py:656–695  ·  view source on GitHub ↗

Handle a status query request. Returns information about the dirty arbiter and its workers. Args: message: Status request message client_writer: StreamWriter to send response to client

(self, message, client_writer)

Source from the content-addressed store, hash-verified

654 # -------------------------------------------------------------------------
655
656 async def handle_status_request(self, message, client_writer):
657 """
658 Handle a status query request.
659
660 Returns information about the dirty arbiter and its workers.
661
662 Args:
663 message: Status request message
664 client_writer: StreamWriter to send response to client
665 """
666 request_id = message.get("id", "unknown")
667 now = time.monotonic()
668
669 workers_info = []
670 for pid, worker in self.workers.items():
671 try:
672 last_update = worker.tmp.last_update()
673 last_heartbeat = round(now - last_update, 2)
674 except (OSError, ValueError, AttributeError):
675 last_heartbeat = None
676
677 workers_info.append({
678 "pid": pid,
679 "age": worker.age,
680 "apps": getattr(worker, 'app_paths', []),
681 "booted": getattr(worker, 'booted', False),
682 "last_heartbeat": last_heartbeat,
683 })
684
685 workers_info.sort(key=lambda w: w["age"])
686
687 result = {
688 "arbiter_pid": self.pid,
689 "workers": workers_info,
690 "worker_count": len(workers_info),
691 "apps": list(self.app_specs.keys()) if self.app_specs else [],
692 }
693
694 response = make_response(request_id, result)
695 await DirtyProtocol.write_message_async(client_writer, response)
696
697 async def handle_manage_request(self, message, client_writer):
698 """

Callers 1

handle_clientMethod · 0.95

Calls 6

itemsMethod · 0.80
last_updateMethod · 0.80
make_responseFunction · 0.70
getMethod · 0.45
keysMethod · 0.45
write_message_asyncMethod · 0.45

Tested by

no test coverage detected