This is an API mapping library for Kibana API to generate visualizations and dashboards automatically
Project description
Kibana API Mapping Library
Development Requirements
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/
pip install kibana-api
Usage and Examples
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 <Requests>
Object as a result of HTTP request
Configure Kibana Object:
URL = "http://localhost:5601"
USERNAME = "XXXX"
PASSWORD = "XXXX"
# username and password are optional fields
kibana = Kibana(base_url=URL, username=USERNAME, password=PASSWORD)
Create Space
id = "demo"
name = "demo"
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)
pattern_json = {
"title":"demo*",
"timeFieldName": "@timestamp", #timefiledname is important, it taken as a reference to time
"fields":"[]"
}
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)
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)
visualization_json = visualization_response.json()
Visualization Modelation
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_model_json = visualization.create() # this operation returns a JSON body not a request response
Panel Modelation
width=48
height=12
pos_x=0
pos_y=1
panel = Panel("panel_0", width, height, pos_x, pos_y, visualization_id=visualization_id)
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)
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_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).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
objects_response = kibana.object(space_id="demo").all() # All objects
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
objects_json = objects_response.json()
List all spaces
spaces_response = kibana.space().all() # All spaces
spaces_json = spaces_response.json()
Import Objects
file = open("demo.ndjson", 'r')
response = kibana.object().loads(file=file)
file.close()
Development
Before starting you should run the docker-compose.yml
file at tests
folder (for
testing purposes):
version: '2.2'
services:
elastic:
hostname: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
container_name: elastic
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
- xpack.security.enabled=true
- xpack.security.audit.enabled=true
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elastic_volume:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
kibana:
image: docker.elastic.co/kibana/kibana:${VERSION}
container_name: kibana
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200
ELASTICSEARCH_USERNAME: ${ELASTIC_USERNAME}
ELASTICSEARCH_PASSWORD: ${ELASTIC_PASSWORD}
ADMIN_PRIVILEGES: "true"
networks:
- elastic
volumes:
elastic_volume:
driver: local
networks:
elastic:
driver: bridge
The .env
file cointains:
VERSION=7.8.0
ELASTIC_USERNAME=elastic
ELASTIC_PASSWORD=elastic
Once the container is up you can validate every unit test:
python -m unittest tests.tests
Contributing
Yes fella, you know how ;)
Contact Me
My blog: cr0wg4n
Twitter: cr0wg4n
Linkedin: cr0wg4n
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file kibana-api-0.0.4.tar.gz
.
File metadata
- Download URL: kibana-api-0.0.4.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.3.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5db73300ac8142b805878249683d3dd10ff7c87ad0a61523799e4a986aee3a7 |
|
MD5 | 8eee9136323d369c91fe26bb6688d233 |
|
BLAKE2b-256 | a457e28646516790b2fc3f645138f78ed0087fe3c33364f61424f45a6b05c29f |