X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d3229c7f727f40436cad66fba5f3345e0b3eede5..c4fa80c6ed2445e1e384455944eb6c4108906cad:/services/nodemanager/arvnodeman/computenode/__init__.py diff --git a/services/nodemanager/arvnodeman/computenode/__init__.py b/services/nodemanager/arvnodeman/computenode/__init__.py index 4955992faa..f5186074c6 100644 --- a/services/nodemanager/arvnodeman/computenode/__init__.py +++ b/services/nodemanager/arvnodeman/computenode/__init__.py @@ -2,16 +2,30 @@ from __future__ import absolute_import, print_function +import calendar import itertools +import re import time +ARVADOS_TIMEFMT = '%Y-%m-%dT%H:%M:%SZ' +ARVADOS_TIMESUBSEC_RE = re.compile(r'(\.\d+)Z$') + def arvados_node_fqdn(arvados_node, default_hostname='dynamic.compute'): hostname = arvados_node.get('hostname') or default_hostname return '{}.{}'.format(hostname, arvados_node['domain']) def arvados_node_mtime(node): - return time.mktime(time.strptime(node['modified_at'] + 'UTC', - '%Y-%m-%dT%H:%M:%SZ%Z')) - time.timezone + return arvados_timestamp(node['modified_at']) + +def arvados_timestamp(timestr): + subsec_match = ARVADOS_TIMESUBSEC_RE.search(timestr) + if subsec_match is None: + subsecs = .0 + else: + subsecs = float(subsec_match.group(1)) + timestr = timestr[:subsec_match.start()] + 'Z' + return calendar.timegm(time.strptime(timestr + 'UTC', + ARVADOS_TIMEFMT + '%Z')) def timestamp_fresh(timestamp, fresh_time): return (time.time() - timestamp) < fresh_time