diff --git a/requirements_test.txt b/requirements_test.txt
index 98a6b1b..58262af 100644
--- a/requirements_test.txt
+++ b/requirements_test.txt
@@ -1,5 +1,6 @@
pytest
selenium
+blinker<1.8.0
selenium-wire
chromedriver-autoinstaller
requests
diff --git a/src/ansibleguy-webui/aw/api_endpoints/alert.py b/src/ansibleguy-webui/aw/api_endpoints/alert.py
index 7502b7c..19207ec 100644
--- a/src/ansibleguy-webui/aw/api_endpoints/alert.py
+++ b/src/ansibleguy-webui/aw/api_endpoints/alert.py
@@ -14,8 +14,8 @@
class BaseAlertWriteRequest(BaseResponse):
# NOTE: not using modelserializer because issues with DRF and PUT unique constraints
name = serializers.CharField(required=True)
- alert_type = serializers.IntegerField()
- condition = serializers.IntegerField()
+ alert_type = serializers.IntegerField(required=False)
+ condition = serializers.IntegerField(required=False)
jobs = serializers.ListSerializer(child=serializers.IntegerField(), required=False)
jobs_all = serializers.BooleanField()
# todo: require alert to be provided if alert-type is plugin
@@ -181,8 +181,10 @@ class Meta:
condition_name = serializers.CharField()
-class AlertUserWriteRequest(BaseAlertWriteRequest):
- user = serializers.IntegerField(required=True)
+class AlertUserCreateRequest(serializers.ModelSerializer):
+ class Meta:
+ model = AlertUser
+ fields = AlertUser.api_fields_write
class APIAlertUser(GenericAPIView):
@@ -204,14 +206,14 @@ def get(request):
)
@extend_schema(
- request=AlertUserWriteRequest,
+ request=AlertUserCreateRequest,
responses=api_docs_post('Alert'),
summary='Create a new Alert.',
operation_id='alert_user_create',
)
def post(self, request):
user = get_api_user(request)
- serializer = AlertUserWriteRequest(data=request.data)
+ serializer = AlertUserCreateRequest(data=request.data)
if not serializer.is_valid():
return Response(
@@ -264,14 +266,14 @@ def get(request, alert_id: int):
)
@extend_schema(
- request=AlertUserWriteRequest,
+ request=BaseAlertWriteRequest,
responses=api_docs_put('Alert'),
summary='Modify an Alert.',
operation_id='alert_user_edit',
)
def put(self, request, alert_id: int):
user = get_api_user(request)
- serializer = AlertUserWriteRequest(data=request.data)
+ serializer = BaseAlertWriteRequest(data=request.data)
if not serializer.is_valid():
return Response(
@@ -333,6 +335,12 @@ class Meta:
condition_name = serializers.CharField()
+class AlertGlobalCreateRequest(serializers.ModelSerializer):
+ class Meta:
+ model = AlertGlobal
+ fields = AlertGlobal.api_fields_write
+
+
class APIAlertGlobal(GenericAPIView):
http_method_names = ['get', 'post']
serializer_class = AlertGlobalReadResponse
@@ -350,7 +358,7 @@ def get(request):
return Response([AlertGlobalReadResponse(instance=alert).data for alert in AlertGlobal.objects.all()])
@extend_schema(
- request=AlertGlobalReadResponse,
+ request=AlertGlobalCreateRequest,
responses=api_docs_post('Alert'),
summary='Create a new Alert.',
operation_id='alert_global_create',
@@ -363,7 +371,7 @@ def post(self, request):
status=403,
)
- serializer = BaseAlertWriteRequest(data=request.data)
+ serializer = AlertGlobalCreateRequest(data=request.data)
if not serializer.is_valid():
return Response(
@@ -487,10 +495,16 @@ class Meta:
group_name = serializers.CharField()
-class AlertGroupWriteRequest(BaseAlertWriteRequest):
+class AlertGrouUpdateRequest(BaseAlertWriteRequest):
group = serializers.IntegerField(required=True)
+class AlertGroupCreateRequest(serializers.ModelSerializer):
+ class Meta:
+ model = AlertGroup
+ fields = AlertGroup.api_fields_write
+
+
class APIAlertGroup(GenericAPIView):
http_method_names = ['get', 'post']
serializer_class = AlertGroupReadResponse
@@ -510,7 +524,7 @@ def get(request):
)
@extend_schema(
- request=AlertGroupWriteRequest,
+ request=AlertGroupCreateRequest,
responses=api_docs_post('Alert'),
summary='Create a new Alert.',
operation_id='alert_group_create',
@@ -523,7 +537,7 @@ def post(self, request):
status=403,
)
- serializer = AlertGroupWriteRequest(data=request.data)
+ serializer = AlertGroupCreateRequest(data=request.data)
if not serializer.is_valid():
return Response(
@@ -575,7 +589,7 @@ def get(request, alert_id: int):
)
@extend_schema(
- request=AlertGroupWriteRequest,
+ request=AlertGrouUpdateRequest,
responses=api_docs_put('Alert'),
summary='Modify an Alert.',
operation_id='alert_group_edit',
@@ -588,7 +602,7 @@ def put(self, request, alert_id: int):
status=403,
)
- serializer = AlertGroupWriteRequest(data=request.data)
+ serializer = AlertGrouUpdateRequest(data=request.data)
if not serializer.is_valid():
return Response(
diff --git a/src/ansibleguy-webui/aw/config/navigation.py b/src/ansibleguy-webui/aw/config/navigation.py
index dc014bd..3bf14aa 100644
--- a/src/ansibleguy-webui/aw/config/navigation.py
+++ b/src/ansibleguy-webui/aw/config/navigation.py
@@ -29,7 +29,7 @@
'login': False,
},
'DON': {
- 'element': '',
+ 'element': '',
'url': 'https://ko-fi.com/ansible0guy',
'login': False,
},
diff --git a/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_email.py b/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_email.py
index 59da52e..3fff73d 100644
--- a/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_email.py
+++ b/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_email.py
@@ -78,7 +78,6 @@ def alert_plugin_email(user: USERS, stats: list[dict], execution: JobExecution):
port = 25
try:
- print(f"Alert user {user.username} via email ({server}:{port} => {user.email})")
ssl_context = ssl.create_default_context()
if config['mail_ssl_verify']:
ssl_context.check_hostname = True
diff --git a/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_wrapper.py b/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_wrapper.py
index 921ffb0..422ff57 100644
--- a/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_wrapper.py
+++ b/src/ansibleguy-webui/aw/execute/alert_plugin/plugin_wrapper.py
@@ -5,4 +5,4 @@
def alert_plugin_wrapper(alert: BaseAlert, user: USERS, stats: [JobExecutionResultHost], execution: JobExecution):
# implement plugin interface
- print(f"Alert user {user.username} via plugin {alert.plugin.executable}")
+ pass
diff --git a/src/ansibleguy-webui/aw/templates/body.html b/src/ansibleguy-webui/aw/templates/body.html
index ae5c40b..98664e2 100644
--- a/src/ansibleguy-webui/aw/templates/body.html
+++ b/src/ansibleguy-webui/aw/templates/body.html
@@ -28,7 +28,7 @@