mirror of
https://github.com/FAUSheppy/icinga-webhook-gateway
synced 2026-04-26 22:22:30 +02:00
fix: better handling of duplicates
This commit is contained in:
24
server.py
24
server.py
@@ -23,6 +23,8 @@ from sqlalchemy.sql import func
|
|||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
from sqlalchemy.sql.expression import func
|
from sqlalchemy.sql.expression import func
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
from psycopg2.errors import UniqueViolation
|
||||||
|
|
||||||
import icingatools
|
import icingatools
|
||||||
import smarttools
|
import smarttools
|
||||||
@@ -227,9 +229,21 @@ def create_interface():
|
|||||||
return ("Not a valid service to modify", 404)
|
return ("Not a valid service to modify", 404)
|
||||||
|
|
||||||
if flask.request.method == "POST":
|
if flask.request.method == "POST":
|
||||||
|
|
||||||
|
try:
|
||||||
create_entry(form, user)
|
create_entry(form, user)
|
||||||
|
except IntegrityError as e:
|
||||||
|
session.rollback()
|
||||||
|
# TODO: this only works for PG
|
||||||
|
if isinstance(e.orig, UniqueViolation):
|
||||||
|
return ("A service with this name already exists (possibly by another user)", 409)
|
||||||
|
else:
|
||||||
|
return (f"Error: {e}", 500)
|
||||||
|
|
||||||
|
# service created successfully #
|
||||||
service_name = form.service.data or form.service_hidden.data
|
service_name = form.service.data or form.service_hidden.data
|
||||||
return flask.redirect('/service-details?service={}'.format(service_name))
|
return flask.redirect('/service-details?service={}'.format(service_name))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return flask.render_template('add_modify_service.html', form=form,
|
return flask.render_template('add_modify_service.html', form=form,
|
||||||
is_modification=bool(modify_service_name))
|
is_modification=bool(modify_service_name))
|
||||||
@@ -348,7 +362,17 @@ def default():
|
|||||||
status = Status(service=service, timestamp=timestamp, status=status,
|
status = Status(service=service, timestamp=timestamp, status=status,
|
||||||
info_text=text)
|
info_text=text)
|
||||||
db.session.merge(status)
|
db.session.merge(status)
|
||||||
|
|
||||||
|
try:
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
except IntegrityError as e:
|
||||||
|
session.rollback()
|
||||||
|
# TODO: this only works for PG
|
||||||
|
if isinstance(e.orig, UniqueViolation):
|
||||||
|
return ("Status at this time already submitted", 409)
|
||||||
|
else:
|
||||||
|
return (f"Error: {e}", 500)
|
||||||
|
|
||||||
return ("", 204)
|
return ("", 204)
|
||||||
else:
|
else:
|
||||||
return ("Method not implemented: {}".format(flask.request.method), 405)
|
return ("Method not implemented: {}".format(flask.request.method), 405)
|
||||||
|
|||||||
Reference in New Issue
Block a user