from ceph.deployment import inventory
from mgr_module import MgrModule
+import mgr_util
import orchestrator
from orchestrator import OrchestratorError, HostSpec, OrchestratorValidationError
# Service status description when status == -1.
self.status_desc = status_desc
+ # datetime when this info was last refreshed
+ self.last_refresh = None # type: Optional[datetime.datetime]
+
def name(self):
if self.service_instance:
return '%s.%s' % (self.service_type, self.service_instance)
+import datetime
import errno
import json
from functools import wraps
from ceph.deployment.inventory import Device
from prettytable import PrettyTable
-from mgr_util import format_bytes
+from mgr_util import format_bytes, to_pretty_timedelta
try:
from typing import List, Set, Optional
data = [s.to_json() for s in services]
return HandleCommandResult(stdout=json.dumps(data))
else:
+ now = datetime.datetime.utcnow()
table = PrettyTable(
- ['NAME', 'HOST', 'STATUS',
+ ['NAME', 'HOST', 'STATUS', 'REFRESHED',
'VERSION', 'IMAGE NAME', 'IMAGE ID', 'CONTAINER ID'],
border=False)
table.align = 'l'
None: '<unknown>'
}[s.status]
+ if s.last_refresh:
+ age = to_pretty_timedelta(now - s.last_refresh) + ' ago'
+ else:
+ age = '-'
table.add_row((
s.name(),
ukn(s.nodename),
status,
+ age,
ukn(s.version),
ukn(s.container_image_name),
ukn(s.container_image_id)[0:12],