feat: icinga links and ownerships

This commit is contained in:
2023-07-07 12:54:50 +02:00
parent 900ccdf90e
commit 5c6ba654b8
4 changed files with 40 additions and 16 deletions

View File

@@ -35,14 +35,14 @@ def create_master_host(app):
# Create the host # Create the host
response = client.objects.create("Host", host_name, **host_config) 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) 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"] host_name = app.config["ASYNC_ICINGA_DUMMY_HOST"]
service_config = { service_config = {
@@ -64,11 +64,20 @@ def create_service(async_service_name, app):
print(service_api_helper_name) print(service_api_helper_name)
response = client.objects.create("Service", service_api_helper_name, **service_config) 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) 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"] host_name = app.config["ASYNC_ICINGA_DUMMY_HOST"]
service_api_helper_name = "{}!{}".format(host_name, name) service_api_helper_name = "{}!{}".format(host_name, name)
client.objects.delete("Service", service_api_helper_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)

View File

@@ -120,7 +120,7 @@ def create_entry(form, user):
service = Service(service=service_name, timeout=int(form.timeout.data), service = Service(service=service_name, timeout=int(form.timeout.data),
owner=user, token=token) owner=user, token=token)
icingatools.create_service(service_name, app) icingatools.create_service(user, service_name, app)
db.session.merge(service) db.session.merge(service)
db.session.commit() db.session.commit()
@@ -142,14 +142,16 @@ def service_details():
status_list = db.session.query(Status).filter(Status.service==service.service).all() 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, 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"]) @app.route("/entry-form", methods=["GET", "POST", "DELETE"])
def create_interface(): 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 # # check if is delete #
operation = flask.request.args.get("operation") operation = flask.request.args.get("operation")
@@ -162,7 +164,7 @@ def create_interface():
if not service_del_object: if not service_del_object:
return ("Failed to delete the requested service", 404) 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.delete(service_del_object)
db.session.commit() db.session.commit()
@@ -331,6 +333,7 @@ if __name__ == "__main__":
parser.add_argument('--icinga-api-pass', required=True) parser.add_argument('--icinga-api-pass', required=True)
parser.add_argument('--icinga-api-user', required=True) parser.add_argument('--icinga-api-user', required=True)
parser.add_argument('--icinga-api-url', required=True) parser.add_argument('--icinga-api-url', required=True)
parser.add_argument('--icinga-web-url', required=True)
args = parser.parse_args() args = parser.parse_args()
@@ -341,6 +344,8 @@ if __name__ == "__main__":
app.config["ICINGA_API_PASS"] = args.icinga_api_pass app.config["ICINGA_API_PASS"] = args.icinga_api_pass
app.config["ICINGA_API_URL"] = args.icinga_api_url app.config["ICINGA_API_URL"] = args.icinga_api_url
app.config["ICINGA_WEB_URL"] = args.icinga_web_url
with app.app_context(): with app.app_context():
create_app() create_app()

View File

@@ -169,4 +169,10 @@ body{
border-style: solid; border-style: solid;
border-color: red; border-color: red;
font-size: 17px; font-size: 17px;
float: right;
max-width: 40%;
}
.clear {
clear: both;
} }

View File

@@ -3,18 +3,22 @@
<body> <body>
{% include "navbar.html" %} {% include "navbar.html" %}
<div class="container"> <div class="container">
<a href="{{ icinga_link }}">Icinga Link</a>
<h2 class="service-name">Service: {{ service.service }}</h2> <h2 class="service-name">Service: {{ service.service }}</h2>
{% if service.staticly_configured %} {% if service.staticly_configured %}
<h4 class="static-configured-info">
This service is staticly configured, to permanently delete it, you have to remove
it from the configuration file on the server.
</h4>
{% endif %} {% endif %}
{% if not service.staticly_configured %}
<a class="service-info-button mt-3" style="background-color: orange;" <a class="service-info-button mt-3" style="background-color: orange;"
href="/entry-form?service={{ service.service }}">Modify</a> href="/entry-form?service={{ service.service }}">Modify</a>
<a class="service-info-button mt-3" style="background-color: red;" <a class="service-info-button mt-3" style="background-color: red;"
href="/entry-form?service={{ service.service }}&operation=delete">Delete</a> href="/entry-form?service={{ service.service }}&operation=delete">Delete</a>
{% else %}
<div class="static-configured-info">
This service is staticly configured, to edit or delete it, you have to modify the
configuration file on the server.
</div>
{% endif %}
<div class="last-status"> <div class="last-status">
{% if status_list | length > 0 %} {% if status_list | length > 0 %}
@@ -26,14 +30,14 @@
{% endif %} {% endif %}
</div> </div>
<div class="p-4 box mt-4 mb-3" style="display: none;"> <div class="clear p-4 box mt-4 mb-3" style="display: none;">
<div class="service-timeout">Timeout: {{ service.timeout }} days</div> <div class="service-timeout">Timeout: {{ service.timeout }} days</div>
<div class="service-timeout">Owner: {{ service.owner }}</div> <div class="service-timeout">Owner: {{ service.owner }}</div>
<div style="display: none;" <div style="display: none;"
class="service-token">Secret Token: {{ service.token }}</div> class="service-token">Secret Token: {{ service.token }}</div>
</div> </div>
<h5 class="my-4">Curl</h5> <h5 class="clear my-4">Curl</h5>
<div class="ml-3 example"> <div class="ml-3 example">
curl -X POST \ <br> curl -X POST \ <br>
<div class="example-indent"> <div class="example-indent">