def test_create_from_obj(self): """Test whether a meta object is correctly created from a Kibana object""" meta = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ) self.assertEqual(meta.id, "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad") self.assertEqual(meta.title, "GitLab Issues") self.assertEqual(meta.type, "dashboard") self.assertEqual(meta.version, 9) self.assertEqual(meta.updated_at, "2019-01-24T13:20:08.902Z") meta = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ_NO_UPDATED_AT) self.assertEqual(meta.id, "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad") self.assertEqual(meta.title, "GitLab Issues") self.assertEqual(meta.type, "dashboard") self.assertEqual(meta.version, 9) self.assertIsNone(meta.updated_at) with self.assertLogs(logger, level='WARNING') as cm: meta = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ_NO_TITLE) self.assertEqual(meta.id, "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad") self.assertIsNone(meta.title) self.assertEqual(meta.type, "dashboard") self.assertEqual(meta.version, 9) self.assertEqual(meta.updated_at, "2019-01-24T13:20:08.902Z") self.assertEqual(cm.output[0], "WARNING:archimedes.kibana_obj_meta:Obj dashboard with id " "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad doesn't have a title")
def test_create_from_obj(self): """Test whether a meta object is correctly created from a Kibana object""" meta = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ) self.assertEqual(meta.id, "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad") self.assertEqual(meta.title, "GitLab Issues") self.assertEqual(meta.type, "dashboard") self.assertEqual(meta.version, 9) self.assertEqual(meta.updated_at, "2019-01-24T13:20:08.902Z") meta = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ_NO_UPDATED_AT) self.assertEqual(meta.id, "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad") self.assertEqual(meta.title, "GitLab Issues") self.assertEqual(meta.type, "dashboard") self.assertEqual(meta.version, 9) self.assertIsNone(meta.updated_at)
def test_add_alias(self): """Test whether an alias is added to the registry""" path = os.path.join(self.tmp_path, REGISTRY_NAME) copy_content('data/registry_full', path) registry = Registry(self.tmp_path) tuples = [t for t in registry.find_all()] self.assertEqual(len(tuples), 11) new_alias = '12' new_obj = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ) registry.add(new_obj) tuples = [t for t in registry.find_all()] self.assertEqual(len(tuples), 12) alias, meta = registry.find(new_alias) self.assertEqual(meta.id, DASHBOARD_OBJ['id']) self.assertEqual(meta.title, DASHBOARD_OBJ['attributes']['title']) self.assertEqual(meta.type, DASHBOARD_OBJ['type']) self.assertEqual(meta.updated_at, DASHBOARD_OBJ['updated_at']) self.assertEqual(meta.version, DASHBOARD_OBJ['version'])
def find_all(self, obj_type=None): """Find all meta information related to the Kibana objects stored in the registry. This method returns the KibanaObjMeta in the registry. If `obj_type` is None, it returns the content of all the registry. Otherwise, it returns the entries related to the aliases with the given `obj_type`. :param obj_type: target object type :returns a generator of tuples of aliases and metadata in the registry """ if obj_type: for alias in self.content.keys(): if self.content[alias]['type'] == obj_type: meta = KibanaObjMeta.create_from_registry(self.content[alias]) yield alias, meta else: for alias in self.content.keys(): meta = KibanaObjMeta.create_from_registry(self.content[alias]) yield alias, meta
def __find_remote_objs(self): """Return the meta information of the Kibana objects stored in Kibana.""" for obj in self.kibana.find_all(): if obj['type'] not in [ VISUALIZATION, INDEX_PATTERN, SEARCH, DASHBOARD ]: continue meta_obj = KibanaObjMeta.create_from_obj(obj) yield meta_obj
def test_add_alias_duplicated(self): """Test whether an exception is thrown when the same object already exists in the registry""" path = os.path.join(self.tmp_path, REGISTRY_NAME) copy_content('data/registry_slim', path) registry = Registry(self.tmp_path) new_obj = KibanaObjMeta.create_from_obj(VISUALIZATION_OBJ_DUPLICATED) with self.assertRaises(RegistryError): registry.add(new_obj)
def test_initialization_no_updated_at(self): """Test whether attributes are initialized""" obj = KibanaObjMeta(id=DASHBOARD_OBJ_NO_UPDATED_AT['id'], title=DASHBOARD_OBJ_NO_UPDATED_AT['attributes']['title'], type=DASHBOARD_OBJ_NO_UPDATED_AT['type'], version=DASHBOARD_OBJ_NO_UPDATED_AT['version']) self.assertEqual(obj.id, "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad") self.assertEqual(obj.title, "GitLab Issues") self.assertEqual(obj.type, "dashboard") self.assertEqual(obj.version, 9) self.assertIsNone(obj.updated_at)
def test_initialization(self): """Test whether attributes are initialized""" obj = KibanaObjMeta(id=DASHBOARD_OBJ['id'], title=DASHBOARD_OBJ['attributes']['title'], type=DASHBOARD_OBJ['type'], version=DASHBOARD_OBJ['version'], updated_at=DASHBOARD_OBJ['updated_at']) self.assertEqual(obj.id, "2e968fe0-b1bb-11e8-8aac-ef7fd4d8cbad") self.assertEqual(obj.title, "GitLab Issues") self.assertEqual(obj.type, "dashboard") self.assertEqual(obj.version, 9) self.assertEqual(obj.updated_at, "2019-01-24T13:20:08.902Z")
def test_repr_no_updated_at(self): """Test whether the repr method doesn't fail when updated_at is null""" obj = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ_NO_UPDATED_AT) str_repr = repr(obj) expected = { 'id': obj.id, 'type': obj.type, 'version': obj.version, 'title': obj.title } self.assertEqual(str_repr, json.dumps(expected, sort_keys=True, indent=4))
def test_repr_no_title(self): """Test whether the repr method properly works for object without a title""" obj = KibanaObjMeta.create_from_obj(DASHBOARD_OBJ_NO_TITLE) str_repr = repr(obj) expected = { 'id': obj.id, 'type': obj.type, 'version': obj.version, 'title': obj.title, 'updated_at': obj.updated_at } self.assertEqual(str_repr, json.dumps(expected, sort_keys=True, indent=4))
def test_add_alias_force(self): """Test whether an object is overwritten if it already exists in the registry and the param force is on""" path = os.path.join(self.tmp_path, REGISTRY_NAME) copy_content('data/registry_slim', path) registry = Registry(self.tmp_path) tuples = [t for t in registry.find_all()] self.assertEqual(len(tuples), 2) new_obj = KibanaObjMeta.create_from_obj(VISUALIZATION_OBJ_DUPLICATED) registry.add(new_obj, force=True) tuples = [t for t in registry.find_all()] self.assertEqual(len(tuples), 2)
def find(self, alias): """Find the meta information of a Kibana object based on its alias. This method retrieves from the registry the target alias and KibanaObjMeta linked to it. :param alias: target alias :returns a tuple composed of an alias and metadata """ if alias not in self.content: cause = "Alias %s not found in registry" % alias logger.error(cause) raise NotFoundError(cause=cause) meta = KibanaObjMeta.create_from_registry(self.content[alias]) return alias, meta
def __find_local_objs(self): """Return the meta information of the Kibana objects stored on disk.""" for path, obj in self.manager.find_all(): meta_obj = KibanaObjMeta.create_from_obj(obj) yield meta_obj
def __find_remote_objs(self): """Return the meta information of the Kibana objects stored in Kibana.""" for obj in self.kibana.find_all(): meta_obj = KibanaObjMeta.create_from_obj(obj) yield meta_obj