# type: (CephadmOrchestrator) -> None
self.mgr = mgr
self.specs = {} # type: Dict[str, orchestrator.ServiceSpec]
+ self.spec_created = {} # type: Dict[str, datetime.datetime]
def load(self):
# type: () -> None
for k, v in six.iteritems(self.mgr.get_store_prefix(SPEC_STORE_PREFIX)):
service_name = k[len(SPEC_STORE_PREFIX):]
try:
- spec = ServiceSpec.from_json(json.loads(v))
+ v = json.loads(v)
+ spec = ServiceSpec.from_json(v['spec'])
+ created = datetime.datetime.strptime(v['created'], DATEFMT)
self.specs[service_name] = spec
+ self.spec_created[service_name] = created
self.mgr.log.debug('SpecStore: loaded spec for %s' % (
service_name))
except Exception as e:
def save(self, spec):
# type: (orchestrator.ServiceSpec) -> None
self.specs[spec.service_name()] = spec
- self.mgr.set_store(SPEC_STORE_PREFIX + spec.service_name(),
- spec.to_json())
+ self.spec_created[spec.service_name()] = datetime.datetime.utcnow()
+ self.mgr.set_store(
+ SPEC_STORE_PREFIX + spec.service_name(),
+ json.dumps({
+ 'spec': spec.to_json(),
+ 'created': self.spec_created[spec.service_name()].strftime(DATEFMT),
+ }, sort_keys=True),
+ )
def rm(self, service_name):
# type: (str) -> None
if service_name in self.specs:
del self.specs[service_name]
+ del self.spec_created[service_name]
self.mgr.set_store(SPEC_STORE_PREFIX + service_name, None)
def find(self, service_name):
)
if spec:
sm[n].size = self._get_spec_size(spec)
+ sm[n].created = self.spec_store.spec_created[dd.service_name()]
else:
sm[n].size += 1
if dd.status == 1:
return n
def to_json(self):
- return json.dumps(self, default=lambda o: o.__dict__,
- sort_keys=True)
+ # type: () -> Dict[str, Any]
+ c = self.__dict__.copy()
+ if self.placement:
+ c['placement'] = self.placement.__dict__
+ return c
def __repr__(self):
return "{}({!r})".format(self.__class__.__name__, self.__dict__)