mirror of
https://github.com/FAUSheppy/icinga-webhook-gateway
synced 2025-12-05 23:11:43 +01:00
feat: icinga links and ownerships
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
13
server.py
13
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()
|
||||
|
||||
|
||||
@@ -169,4 +169,10 @@ body{
|
||||
border-style: solid;
|
||||
border-color: red;
|
||||
font-size: 17px;
|
||||
float: right;
|
||||
max-width: 40%;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@@ -3,18 +3,22 @@
|
||||
<body>
|
||||
{% include "navbar.html" %}
|
||||
<div class="container">
|
||||
<a href="{{ icinga_link }}">Icinga Link</a>
|
||||
<h2 class="service-name">Service: {{ service.service }}</h2>
|
||||
{% 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 %}
|
||||
|
||||
{% if not service.staticly_configured %}
|
||||
<a class="service-info-button mt-3" style="background-color: orange;"
|
||||
href="/entry-form?service={{ service.service }}">Modify</a>
|
||||
<a class="service-info-button mt-3" style="background-color: red;"
|
||||
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">
|
||||
{% if status_list | length > 0 %}
|
||||
@@ -26,14 +30,14 @@
|
||||
{% endif %}
|
||||
</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">Owner: {{ service.owner }}</div>
|
||||
<div style="display: none;"
|
||||
class="service-token">Secret Token: {{ service.token }}</div>
|
||||
</div>
|
||||
|
||||
<h5 class="my-4">Curl</h5>
|
||||
<h5 class="clear my-4">Curl</h5>
|
||||
<div class="ml-3 example">
|
||||
curl -X POST \ <br>
|
||||
<div class="example-indent">
|
||||
|
||||
Reference in New Issue
Block a user