From 5c6ba654b844b5ec9f6888e9671d3c2db5f6155d Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Fri, 7 Jul 2023 12:54:50 +0200 Subject: [PATCH] feat: icinga links and ownerships --- icingatools.py | 21 +++++++++++++++------ server.py | 13 +++++++++---- static/site.css | 6 ++++++ templates/service_info.html | 16 ++++++++++------ 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/icingatools.py b/icingatools.py index 0d6c206..8a71e94 100644 --- a/icingatools.py +++ b/icingatools.py @@ -35,14 +35,14 @@ def create_master_host(app): # Create the host response = client.objects.create("Host", host_name, **host_config) -def _build_service_name(async_service_name): +def _build_service_name(user, async_service_name): - return "ais_{}".format(async_service_name) + return "{}_async_{}".format(user, async_service_name) -def create_service(async_service_name, app): +def create_service(user, async_service_name, app): client = _create_client(app) - name = _build_service_name(async_service_name) + name = _build_service_name(user, async_service_name) host_name = app.config["ASYNC_ICINGA_DUMMY_HOST"] service_config = { @@ -64,11 +64,20 @@ def create_service(async_service_name, app): print(service_api_helper_name) response = client.objects.create("Service", service_api_helper_name, **service_config) -def delete_service(async_service_name, app): +def delete_service(user, async_service_name, app): client = _create_client(app) - name = _build_service_name(async_service_name) + name = _build_service_name(user, async_service_name) host_name = app.config["ASYNC_ICINGA_DUMMY_HOST"] service_api_helper_name = "{}!{}".format(host_name, name) client.objects.delete("Service", service_api_helper_name) + +def build_icinga_link_for_service(user, service_name, app): + + name = _build_service_name(user, service_name) + url_fmt = "{base}/icingaweb2/dashboard/#!/icingaweb2/monitoring/service/show?host={host}&service={service}" + return url_fmt.format(base=app.config["ICINGA_WEB_URL"], + host=app.config["ASYNC_ICINGA_DUMMY_HOST"], + service=name) + diff --git a/server.py b/server.py index b156bd6..c519b58 100755 --- a/server.py +++ b/server.py @@ -120,7 +120,7 @@ def create_entry(form, user): service = Service(service=service_name, timeout=int(form.timeout.data), owner=user, token=token) - icingatools.create_service(service_name, app) + icingatools.create_service(user, service_name, app) db.session.merge(service) db.session.commit() @@ -142,14 +142,16 @@ def service_details(): status_list = db.session.query(Status).filter(Status.service==service.service).all() + icinga_link = icingatools.build_icinga_link_for_service(user, service.service, app) + return flask.render_template("service_info.html", service=service, flask=flask, - user=user, status_list=status_list) + user=user, status_list=status_list, icinga_link=icinga_link) @app.route("/entry-form", methods=["GET", "POST", "DELETE"]) def create_interface(): - user = str(flask.request.headers.get("X-Preferred-Username")) + user = str(flask.request.headers.get("X-Forwarded-Preferred-Username")) # check if is delete # operation = flask.request.args.get("operation") @@ -162,7 +164,7 @@ def create_interface(): if not service_del_object: return ("Failed to delete the requested service", 404) - icingatools.delete_service(service_delete_name, app) + icingatools.delete_service(user, service_delete_name, app) db.session.delete(service_del_object) db.session.commit() @@ -331,6 +333,7 @@ if __name__ == "__main__": parser.add_argument('--icinga-api-pass', required=True) parser.add_argument('--icinga-api-user', required=True) parser.add_argument('--icinga-api-url', required=True) + parser.add_argument('--icinga-web-url', required=True) args = parser.parse_args() @@ -341,6 +344,8 @@ if __name__ == "__main__": app.config["ICINGA_API_PASS"] = args.icinga_api_pass app.config["ICINGA_API_URL"] = args.icinga_api_url + app.config["ICINGA_WEB_URL"] = args.icinga_web_url + with app.app_context(): create_app() diff --git a/static/site.css b/static/site.css index 57713fe..9d7fe14 100644 --- a/static/site.css +++ b/static/site.css @@ -169,4 +169,10 @@ body{ border-style: solid; border-color: red; font-size: 17px; + float: right; + max-width: 40%; +} + +.clear { + clear: both; } diff --git a/templates/service_info.html b/templates/service_info.html index b8fe090..42a40d4 100644 --- a/templates/service_info.html +++ b/templates/service_info.html @@ -3,18 +3,22 @@ {% include "navbar.html" %}
+ Icinga Link

Service: {{ service.service }}

{% if service.staticly_configured %} -

- This service is staticly configured, to permanently delete it, you have to remove - it from the configuration file on the server. -

{% endif %} + {% if not service.staticly_configured %} Modify Delete + {% else %} +
+ This service is staticly configured, to edit or delete it, you have to modify the + configuration file on the server. +
+ {% endif %}
{% if status_list | length > 0 %} @@ -26,14 +30,14 @@ {% endif %}
-