def __init__(self, name, manager, *args): super(WorkspaceOnCouch, self).__init__(name, manager) self._is_replicated = replicated = CONF.getCouchIsReplicated() self.cdm = self._dmanager = manager.couchdbmanager if not self.cdm.workspaceExists(name): self.cdm.addWorkspace(name) if self.is_replicated(): self.cdm.replicate(self.name, *self.validate_replic_urls( CONF.getCouchReplics()), create_target=True) self.cdm.syncWorkspaceViews(name) self.container = CouchedModelObjectContainer(name, self.cdm)
def __init__(self, name, manager, *args): super(WorkspaceOnCouch, self).__init__(name, manager) self._is_replicated = replicated = CONF.getCouchIsReplicated() self.cdm = self._dmanager = manager.couchdbmanager if not self.cdm.workspaceExists(name): self.cdm.addWorkspace(name) if self.is_replicated(): self.cdm.replicate(self.name, *self.validate_replic_urls(CONF.getCouchReplics()), create_target = True) self.cdm.syncWorkspaceViews(name) self.container = CouchedModelObjectContainer(name, self.cdm)
class WorkspaceOnCouch(Workspace): """A Workspace that is syncronized in couchdb""" def __init__(self, name, manager, *args): super(WorkspaceOnCouch, self).__init__(name, manager) self._is_replicated = replicated = CONF.getCouchIsReplicated() self.cdm = self._dmanager = manager.couchdbmanager if not self.cdm.workspaceExists(name): self.cdm.addWorkspace(name) if self.is_replicated(): self.cdm.replicate(self.name, *self.validate_replic_urls(CONF.getCouchReplics()), create_target = True) self.cdm.syncWorkspaceViews(name) self.container = CouchedModelObjectContainer(name, self.cdm) def syncFiles(self): self.load() @staticmethod def isAvailable(): return CouchdbManager.testCouch(CONF.getCouchURI()) def is_replicated(self): return self._is_replicated def validate_replic_urls(self, urlsString): urls = urlsString.split(";") if urlsString is not None else "" valid_replics = [] for url in urls: try: self.cdm.testCouchUrl(url) valid_replics.append(url) except: pass return valid_replics def saveObj(self, obj): self.cdm.saveDocument(self.name, obj._toDict()) self.cdm.compactDatabase(self.name) def delObj(self, obj): obj_id = obj.ancestors_path() if self._dmanager.checkDocument(self.name, obj_id): self._dmanager.remove(self.name, obj_id) def save(self): model.api.devlog("Saving workspaces") for host in self.getContainee().itervalues(): host_as_dict = host.toDict() for obj_dic in host_as_dict: self.cdm.saveDocument(self.name, obj_dic) def load(self): model.api.devlog("Changes from another instance") self._model_controller.setSavingModel(True) hosts = {} def find_leaf(path, sub_graph = hosts): for i in path: if len(path) > 1: return find_leaf(path[1:], sub_graph['subs'][i]) else: return sub_graph try: t = time.time() model.api.devlog("load start: %s" % str(t)) docs = [i["doc"] for i in self.cdm.workspaceDocumentsIterator(self.name)] model.api.devlog("time to get docs: %s" % str(time.time() - t)) t = time.time() for d in docs: id_path = d['_id'].split('.') if d['type'] == "Host": hosts[d['_id']] = d subs = hosts.get('subs', {}) subs[d['_id']] = d hosts['subs'] = subs continue leaf = find_leaf(id_path) subs = leaf.get('subs', {}) subs[d['obj_id']] = d leaf['subs'] = subs key = "%s" % d['type'] key = key.lower() sub = leaf.get(key, {}) sub[d['obj_id']] = d leaf[key] = sub model.api.devlog("time to reconstruct: %s" % str(time.time() - t)) t = time.time() self.container.clear() for k, v in hosts.items(): if k is not "subs": h = Host(name=None, dic=v) self.container[k] = h model.api.devlog("time to fill container: %s" % str(time.time() - t)) t = time.time() except Exception, e: model.api.devlog("Exception during load: %s" % e) finally:
class WorkspaceOnCouch(Workspace): """A Workspace that is syncronized in couchdb""" def __init__(self, name, manager, *args): super(WorkspaceOnCouch, self).__init__(name, manager) self._is_replicated = replicated = CONF.getCouchIsReplicated() self.cdm = self._dmanager = manager.couchdbmanager if not self.cdm.workspaceExists(name): self.cdm.addWorkspace(name) if self.is_replicated(): self.cdm.replicate(self.name, *self.validate_replic_urls( CONF.getCouchReplics()), create_target=True) self.cdm.syncWorkspaceViews(name) self.container = CouchedModelObjectContainer(name, self.cdm) def syncFiles(self): self.load() @staticmethod def isAvailable(): return CouchdbManager.testCouch(CONF.getCouchURI()) def is_replicated(self): return self._is_replicated def validate_replic_urls(self, urlsString): urls = urlsString.split(";") if urlsString is not None else "" valid_replics = [] for url in urls: try: self.cdm.testCouchUrl(url) valid_replics.append(url) except: pass return valid_replics def saveObj(self, obj): self.cdm.saveDocument(self.name, obj._toDict()) self.cdm.compactDatabase(self.name) def delObj(self, obj): obj_id = obj.ancestors_path() if self._dmanager.checkDocument(self.name, obj_id): self._dmanager.remove(self.name, obj_id) def save(self): model.api.devlog("Saving workspaces") for host in self.getContainee().itervalues(): host_as_dict = host.toDict() for obj_dic in host_as_dict: self.cdm.saveDocument(self.name, obj_dic) def load(self): self._model_controller.setSavingModel(True) hosts = {} def find_leaf(path, sub_graph=hosts): for i in path: if len(path) > 1: return find_leaf(path[1:], sub_graph['subs'][i]) else: return sub_graph try: t = time.time() model.api.devlog("load start: %s" % str(t)) docs = [ i["doc"] for i in self.cdm.workspaceDocumentsIterator(self.name) ] model.api.devlog("time to get docs: %s" % str(time.time() - t)) t = time.time() for d in docs: id_path = d['_id'].split('.') if d['type'] == "Host": hosts[d['_id']] = d subs = hosts.get('subs', {}) subs[d['_id']] = d hosts['subs'] = subs continue leaf = {} try: leaf = find_leaf(id_path) except Exception as e: model.api.devlog('Object parent not found, skipping: %s' % '.'.join(id_path)) continue subs = leaf.get('subs', {}) subs[d['obj_id']] = d leaf['subs'] = subs key = "%s" % d['type'] key = key.lower() sub = leaf.get(key, {}) sub[d['obj_id']] = d leaf[key] = sub model.api.devlog("time to reconstruct: %s" % str(time.time() - t)) t = time.time() self.container.clear() for k, v in hosts.items(): if k is not "subs": h = Host(name=None, dic=v) self.container[k] = h model.api.devlog("time to fill container: %s" % str(time.time() - t)) t = time.time() except Exception, e: model.api.devlog("Exception during load: %s" % e) finally: