X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/eaf140d67206316dc5e0e4c1f99969e7ecaac5b6..1dd4997ebfe9e1bce4073aed9abb37f89ae90845:/services/nodemanager/arvnodeman/status.py diff --git a/services/nodemanager/arvnodeman/status.py b/services/nodemanager/arvnodeman/status.py index b2eb7c827f..1e18996da6 100644 --- a/services/nodemanager/arvnodeman/status.py +++ b/services/nodemanager/arvnodeman/status.py @@ -6,6 +6,7 @@ from __future__ import absolute_import, print_function from future import standard_library import http.server +import time import json import logging import socketserver @@ -77,15 +78,23 @@ class Tracker(object): def __init__(self): self._mtx = threading.Lock() self._latest = { - 'cloud_errors': 0, + 'list_nodes_errors': 0, + 'create_node_errors': 0, + 'destroy_node_errors': 0, 'boot_failures': 0, 'actor_exceptions': 0 } self._version = {'Version' : __version__} + self._idle_nodes = {} def get_json(self): with self._mtx: - return json.dumps(dict(self._latest, **self._version)) + times = {'idle_times' : {}} + now = time.time() + for node, ts in self._idle_nodes.items(): + times['idle_times'][node] = int(now - ts) + return json.dumps( + dict(dict(self._latest, **self._version), **times)) def keys(self): with self._mtx: @@ -104,4 +113,17 @@ class Tracker(object): self._latest.setdefault(counter, 0) self._latest[counter] += value + def idle_in(self, nodename): + with self._mtx: + if self._idle_nodes.get(nodename): + return + self._idle_nodes[nodename] = time.time() + + def idle_out(self, nodename): + with self._mtx: + try: + del self._idle_nodes[nodename] + except KeyError: + pass + tracker = Tracker()