From e8f58b6126a25c5fbea2f405ded5515e0bd3fe2f Mon Sep 17 00:00:00 2001 From: Mauricio Matias Date: Wed, 26 May 2021 20:39:45 -0400 Subject: [PATCH 1/2] cos: adding project reference --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 425ead4..c3e8484 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ I only use `requests` to perform HTTP requests and pure logic for all behaviour. ## Installation +You can find this package in https://pypi.org/project/kibana-api/ ```bash pip install kibana-api @@ -182,4 +183,4 @@ My blog: [cr0wg4n](https://cr0wg4n.medium.com/) Twitter: [cr0wg4n](https://twitter.com/cr0wg4n) -Linkedin: [cr0wg4n](https://www.linkedin.com/in/cr0wg4n/) \ No newline at end of file +Linkedin: [cr0wg4n](https://www.linkedin.com/in/cr0wg4n/) From 50d7561a32fe644e2fba5ab9456828bf7084eb80 Mon Sep 17 00:00:00 2001 From: Mauricio Matias Date: Fri, 28 May 2021 12:06:58 -0400 Subject: [PATCH 2/2] feat: list all spaces --- README.md | 42 +++++++++++++++++++++++++++++------------- kibana_api/objects.py | 6 ++++++ setup.py | 2 +- tests/tests.py | 9 +++++++-- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index c3e8484..d0f2acb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,9 @@ You can find this package in https://pypi.org/project/kibana-api/ pip install kibana-api ``` ## Usage and Examples -If you going to test every example, you shold run the `docker-compose.yml` example(development section). +If you going to test every example, you should run the `docker-compose.yml` example(development section). + +Take a note: every `create` action returns a `` Object as a result of HTTP request ### Configure Kibana Object: ```python @@ -34,7 +36,9 @@ description = "descripcion del espacio de pruebas" color = "#000000" space = kibana.space(id=id, name=name, description=description, color=color) space_response = space.create() +space_json = space_response.json() ``` + ### Create Object (index-pattern) ```python pattern_json = { @@ -44,6 +48,7 @@ pattern_json = { } kibana = Kibana(base_url=URL, username=USERNAME, password=PASSWORD) index_pattern_response = kibana.object(space_id="demo").create('index-pattern', attribs=pattern_json) +index_pattern_json = index_pattern.json() ``` ### Create Object (visualization) @@ -52,15 +57,17 @@ type = "metric" title = "Hello this is a basic metric visualization" index_pattern_id = "XXXX-XXX-XXXX" # every visualization needs an index pattern to work visualization = Visualization(type=type, title=title, index_pattern_id=index_pattern).create() -visualization_response = kibana.object(space_id="demo").create('visualization', body=visualization).json() +visualization_response = kibana.object(space_id="demo").create('visualization', body=visualization) +visualization_json = visualization_response.json() ``` + ### Visualization Modelation ```python index_pattern = "XXXXX-XXXXXX-XXXXXX" type = "line" title = "Hello this is a basic line visualization" visualization = Visualization(type=type, title=title, index_pattern_id=index_pattern) -visulization_json = visualization.create() +visulization_model_json = visualization.create() # this operation returns a JSON body not a request response ``` ### Panel Modelation @@ -70,35 +77,44 @@ height=12 pos_x=0 pos_y=1 panel = Panel("panel_0", width, height, pos_x, pos_y, visualization_id=visualization_id) -panel_json = panel.create() -references = panel.get_references() +panel_model_json = panel.create() # this operation returns a JSON body not a request response +references_model_json = panel.get_references() # this operation returns a JSON body not a request response ``` ### Create Object (dashboard) ```python -index_pattern = "XXXXX-XXXXXX-XXXXXX" +index_pattern_id = "XXXXX-XXXXXX-XXXXXX" type = "line" title = "Hello this is a basic line visualization" -visualization = Visualization(type=type, title=title, index_pattern_id=index_pattern).create() -visualization_response = kibana.object(space_id="demo").create('visualization', body=visualization).json() -visualization_id = visualization_response["id"] +visualization = Visualization(type=type, title=title, index_pattern_id=index_pattern_id).create() # this operation returns a JSON body not a request response +visualization_response = kibana.object(space_id="demo").create('visualization', body=visualization) +visualization_json = visualization_response.json() +visualization_id = visualization_json["id"] + panel = Panel("panel_0", 48, 12, 0, 2, visualization_id=visualization_id) panels = [panel.create()] references = [panel.get_reference()] -dashboard = Dashboard(title="Demo Dashboard", panels=panels, references=references) -dashboard_response = dashboard.create() +dashboard = Dashboard(title="Demo Dashboard", panels=panels, references=references).create() # this operation returns a JSON body not a request response + +dashboard_response = kibana.object(space_id=mock.space_id).create('dashboard', body=dashboard) +dashboard_json = dashboard_response.json() ``` ### List all objects ```python objects_response = kibana.object(space_id="demo").all() # All objects -print(objects_response.json()) +objects_json = objects_response.json() # Filter by types: "visualization", "dashboard", "search", "index-pattern", # "config", "timelion-sheet", "url", "query", "canvas-element", "canvas-workpad", "lens", # "infrastructure-ui-source", "metrics-explorer-view", "inventory-view" objects_response = kibana.object(space_id="demo").all(type="index-pattern") # Type in specific -print(objects_response.json()) +objects_json = objects_response.json() +``` +### List all spaces +```python +spaces_response = kibana.space().all() # All spaces +spaces_json = spaces_response.json() ``` ### Import Objects diff --git a/kibana_api/objects.py b/kibana_api/objects.py index 6fcad1b..0fa89e2 100644 --- a/kibana_api/objects.py +++ b/kibana_api/objects.py @@ -7,6 +7,7 @@ class Space(BaseModel): def __init__(self, id=None, name=None, description=None, color=None, initials=None, disabledFeatures=None, _reserved=None, kibana=None) -> None: super().__init__(["id", "name","description", "color", "initials", "disabledFeatures", "_reserved"], kibana=kibana) self.create_url = "api/spaces/space" + self.all_url = self.create_url self.id = id self.name = name self.description = description @@ -21,6 +22,11 @@ def create(self): response = self.requester(url=url, method="post", data=data) return response + def all(self): + url = self.url(self.create_url) + response = self.requester(url=url, method="get") + return response + class Object(BaseModel): def __init__(self, space_id=None, kibana=None, attribs={}, type="", references={}) -> None: super().__init__([], space_id=space_id, kibana=kibana) diff --git a/setup.py b/setup.py index a2bd3f8..c797161 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="kibana-api", - version="0.0.3", + version="0.0.4", author="Mauricio Matias Conde", author_email="mcm.crw@gmail.com", description="This is an API mapping library for Kibana API to generate visualizations and dashboards automatically", diff --git a/tests/tests.py b/tests/tests.py index 552917f..cc689ff 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -117,9 +117,9 @@ def test7_create_dashboard(self): panel = Panel("panel_0", 48, 12, 0, 2, visualization_id=mock.visualization_id) panels = [panel.create()] references = [panel.get_reference()] - dasboard = Dashboard(title="hola mundo", panels=panels, references=references, query="user.name: mat*").create() + dashboard = Dashboard(title="hola mundo", panels=panels, references=references, query="user.name: mat*").create() kibana = Kibana(base_url=URL, username=USERNAME, password=PASSWORD) - response = kibana.object(space_id=mock.space_id).create('dashboard', body=dasboard).json() + response = kibana.object(space_id=mock.space_id).create('dashboard', body=dashboard).json() dashboard_id = response["id"] print("dashboard created: ", dashboard_id) @@ -129,5 +129,10 @@ def test8_object_by_id(self): reponse = kibana.object(space_id=mock.space_id).get(id=mock.visualization_id, type="visualization") print(reponse) + def test9_get_all_spaces(self): + kibana = Kibana(base_url=URL, username=USERNAME, password=PASSWORD) + response = kibana.space().all().json() + print(response) + if __name__ == "__main__": unittest.main() \ No newline at end of file