From 096c3cdd342d9823069e8b0a08a84fad3463cefb Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Thu, 28 Apr 2022 18:01:11 +0000 Subject: [PATCH] more enum --- .../agents/management/commands/fake_agents.py | 15 ++++++--- api/tacticalrmm/agents/tests.py | 6 ++-- api/tacticalrmm/agents/views.py | 4 +-- api/tacticalrmm/checks/baker_recipes.py | 4 +-- api/tacticalrmm/checks/models.py | 33 +++++-------------- api/tacticalrmm/checks/tests.py | 8 ++--- api/tacticalrmm/tacticalrmm/constants.py | 19 +++++++++++ 7 files changed, 49 insertions(+), 40 deletions(-) diff --git a/api/tacticalrmm/agents/management/commands/fake_agents.py b/api/tacticalrmm/agents/management/commands/fake_agents.py index 4720662a..c5c32b64 100644 --- a/api/tacticalrmm/agents/management/commands/fake_agents.py +++ b/api/tacticalrmm/agents/management/commands/fake_agents.py @@ -17,7 +17,14 @@ from clients.models import Client, Site from logs.models import AuditLog, PendingAction from scripts.models import Script from software.models import InstalledSoftware -from tacticalrmm.constants import CheckType, PAAction, CheckStatus +from tacticalrmm.constants import ( + CheckType, + PAAction, + CheckStatus, + EvtLogNames, + EvtLogTypes, + EvtLogFailWhen, +) from tacticalrmm.demo_data import ( check_network_loc_aware_ps1, check_storage_pool_health_ps1, @@ -741,10 +748,10 @@ class Command(BaseCommand): check9.email_alert = random.choice([True, False]) check9.text_alert = random.choice([True, False]) check9.fails_b4_alert = 2 - check9.log_name = "Application" + check9.log_name = EvtLogNames.APPLICATION check9.event_id = 1001 - check9.event_type = "INFO" - check9.fail_when = "contains" + check9.event_type = EvtLogTypes.INFO + check9.fail_when = EvtLogFailWhen.CONTAINS check9.search_last_days = 30 check_result9 = CheckResult() diff --git a/api/tacticalrmm/agents/tests.py b/api/tacticalrmm/agents/tests.py index 700be2ba..a63f3519 100644 --- a/api/tacticalrmm/agents/tests.py +++ b/api/tacticalrmm/agents/tests.py @@ -12,7 +12,7 @@ from model_bakery import baker from packaging import version as pyver from logs.models import PendingAction -from tacticalrmm.constants import PAAction, PAStatus +from tacticalrmm.constants import PAAction, PAStatus, EvtLogNames from tacticalrmm.test import TacticalTestCase from winupdate.models import WinUpdatePolicy from winupdate.serializers import WinUpdatePolicySerializer @@ -376,7 +376,7 @@ class TestAgentViews(TacticalTestCase): "func": "eventlog", "timeout": 30, "payload": { - "logname": "Application", + "logname": EvtLogNames.APPLICATION, "days": str(22), }, }, @@ -391,7 +391,7 @@ class TestAgentViews(TacticalTestCase): "func": "eventlog", "timeout": 180, "payload": { - "logname": "Security", + "logname": EvtLogNames.SECURITY, "days": str(6), }, }, diff --git a/api/tacticalrmm/agents/views.py b/api/tacticalrmm/agents/views.py index 5b5d6871..d298c1d2 100644 --- a/api/tacticalrmm/agents/views.py +++ b/api/tacticalrmm/agents/views.py @@ -28,7 +28,7 @@ from core.utils import ( from logs.models import AuditLog, DebugLog, PendingAction from scripts.models import Script from scripts.tasks import handle_bulk_command_task, handle_bulk_script_task -from tacticalrmm.constants import AGENT_DEFER, PAAction, PAStatus +from tacticalrmm.constants import AGENT_DEFER, PAAction, PAStatus, EvtLogNames from tacticalrmm.helpers import notify_error from tacticalrmm.permissions import ( _has_perm_on_agent, @@ -358,7 +358,7 @@ def get_event_log(request, agent_id, logtype, days): return demo_get_eventlog() agent = get_object_or_404(Agent, agent_id=agent_id) - timeout = 180 if logtype == "Security" else 30 + timeout = 180 if logtype == EvtLogNames.SECURITY else 30 data = { "func": "eventlog", diff --git a/api/tacticalrmm/checks/baker_recipes.py b/api/tacticalrmm/checks/baker_recipes.py index 2b3875f0..9ff5f1a3 100644 --- a/api/tacticalrmm/checks/baker_recipes.py +++ b/api/tacticalrmm/checks/baker_recipes.py @@ -1,6 +1,6 @@ from model_bakery.recipe import Recipe -from tacticalrmm.constants import CheckType +from tacticalrmm.constants import CheckType, EvtLogTypes check = Recipe("checks.Check") @@ -27,7 +27,7 @@ winsvc_check = check.extend( ) eventlog_check = check.extend( - check_type=CheckType.EVENT_LOG, event_id=5000, event_type="application" + check_type=CheckType.EVENT_LOG, event_id=5000, event_type=EvtLogTypes.INFO ) script_check = check.extend( diff --git a/api/tacticalrmm/checks/models.py b/api/tacticalrmm/checks/models.py index 8fc6bc50..39b5dfc7 100644 --- a/api/tacticalrmm/checks/models.py +++ b/api/tacticalrmm/checks/models.py @@ -14,6 +14,9 @@ from tacticalrmm.constants import ( POLICY_CHECK_FIELDS_TO_COPY, CheckType, CheckStatus, + EvtLogNames, + EvtLogTypes, + EvtLogFailWhen, ) from tacticalrmm.models import PermissionQuerySet @@ -22,26 +25,6 @@ if TYPE_CHECKING: from automation.models import Policy # pragma: no cover -EVT_LOG_NAME_CHOICES = [ - ("Application", "Application"), - ("System", "System"), - ("Security", "Security"), -] - -EVT_LOG_TYPE_CHOICES = [ - ("INFO", "Information"), - ("WARNING", "Warning"), - ("ERROR", "Error"), - ("AUDIT_SUCCESS", "Success Audit"), - ("AUDIT_FAILURE", "Failure Audit"), -] - -EVT_LOG_FAIL_WHEN_CHOICES = [ - ("contains", "Log contains"), - ("not_contains", "Log does not contain"), -] - - class Check(BaseAuditModel): objects = PermissionQuerySet.as_manager() @@ -138,17 +121,17 @@ class Check(BaseAuditModel): # event log checks log_name = models.CharField( - max_length=255, choices=EVT_LOG_NAME_CHOICES, null=True, blank=True + max_length=255, choices=EvtLogNames.choices, null=True, blank=True ) event_id = models.IntegerField(null=True, blank=True) event_id_is_wildcard = models.BooleanField(default=False) event_type = models.CharField( - max_length=255, choices=EVT_LOG_TYPE_CHOICES, null=True, blank=True + max_length=255, choices=EvtLogTypes.choices, null=True, blank=True ) event_source = models.CharField(max_length=255, null=True, blank=True) event_message = models.TextField(null=True, blank=True) fail_when = models.CharField( - max_length=255, choices=EVT_LOG_FAIL_WHEN_CHOICES, null=True, blank=True + max_length=255, choices=EvtLogFailWhen.choices, null=True, blank=True ) search_last_days = models.PositiveIntegerField(null=True, blank=True) number_of_events_b4_alert = models.PositiveIntegerField( @@ -506,13 +489,13 @@ class CheckResult(models.Model): elif check.check_type == CheckType.EVENT_LOG: log = data["log"] - if check.fail_when == "contains": + if check.fail_when == EvtLogFailWhen.CONTAINS: if log and len(log) >= check.number_of_events_b4_alert: self.status = CheckStatus.FAILING else: self.status = CheckStatus.PASSING - elif check.fail_when == "not_contains": + elif check.fail_when == EvtLogFailWhen.NOT_CONTAINS: if log and len(log) >= check.number_of_events_b4_alert: self.status = CheckStatus.PASSING else: diff --git a/api/tacticalrmm/checks/tests.py b/api/tacticalrmm/checks/tests.py index 104fc802..2fcdaa9c 100644 --- a/api/tacticalrmm/checks/tests.py +++ b/api/tacticalrmm/checks/tests.py @@ -6,7 +6,7 @@ from django.utils import timezone as djangotime from model_bakery import baker from checks.models import CheckHistory, CheckResult -from tacticalrmm.constants import CheckType, CheckStatus +from tacticalrmm.constants import CheckType, CheckStatus, EvtLogTypes, EvtLogFailWhen from tacticalrmm.test import TacticalTestCase from .serializers import CheckSerializer @@ -797,8 +797,8 @@ class TestCheckTasks(TacticalTestCase): check = baker.make_recipe( "checks.eventlog_check", - event_type="warning", - fail_when="contains", + event_type=EvtLogTypes.WARNING, + fail_when=EvtLogFailWhen.CONTAINS, event_id=123, alert_severity="warning", agent=self.agent, @@ -855,7 +855,7 @@ class TestCheckTasks(TacticalTestCase): self.assertEqual(check_result.status, CheckStatus.PASSING) # test failing when not contains and message and source - check.fail_when = "not_contains" + check.fail_when = EvtLogFailWhen.NOT_CONTAINS check.alert_severity = "error" check.save() diff --git a/api/tacticalrmm/tacticalrmm/constants.py b/api/tacticalrmm/tacticalrmm/constants.py index 236255ff..31bd9c47 100644 --- a/api/tacticalrmm/tacticalrmm/constants.py +++ b/api/tacticalrmm/tacticalrmm/constants.py @@ -19,6 +19,25 @@ CORESETTINGS_CACHE_KEY = "core_settings" ROLE_CACHE_PREFIX = "role_" +class EvtLogNames(models.TextChoices): + APPLICATION = "Application", "Application" + SYSTEM = "System", "System" + SECURITY = "Security", "Security" + + +class EvtLogTypes(models.TextChoices): + INFO = "INFO", "Information" + WARNING = "WARNING", "Warning" + ERROR = "ERROR", "Error" + AUDIT_SUCCESS = "AUDIT_SUCCESS", "Success Audit" + AUDIT_FAILURE = "AUDIT_FAILURE", "Failure Audit" + + +class EvtLogFailWhen(models.TextChoices): + CONTAINS = "contains", "Log contains" + NOT_CONTAINS = "not_contains", "Log does not contain" + + class CheckStatus(models.TextChoices): PASSING = "passing", "Passing" FAILING = "failing", "Failing"