mirror of
https://github.com/FAUSheppy/icinga-webhook-gateway
synced 2025-12-06 07:21:38 +01:00
feat: icinga links and ownerships
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
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),
|
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()
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user