diff --git a/api/tacticalrmm/agents/serializers.py b/api/tacticalrmm/agents/serializers.py index 4d654174..0dbeed9a 100644 --- a/api/tacticalrmm/agents/serializers.py +++ b/api/tacticalrmm/agents/serializers.py @@ -56,6 +56,20 @@ class AgentTableSerializer(serializers.ModelSerializer): logged_username = serializers.SerializerMethodField() italic = serializers.SerializerMethodField() policy = serializers.ReadOnlyField(source="policy.id") + alert_template = serializers.SerializerMethodField() + + def get_alert_template(self, obj): + alert_template = obj.get_alert_template() + + if not alert_template: + return None + else: + return { + "name": alert_template.name, + "always_email": alert_template.agent_always_email, + "always_text": alert_template.agent_always_text, + "always_alert": alert_template.agent_always_alert, + } def get_pending_actions(self, obj): return obj.pendingactions.filter(status="pending").count() @@ -83,6 +97,7 @@ class AgentTableSerializer(serializers.ModelSerializer): model = Agent fields = [ "id", + "alert_template", "hostname", "agent_id", "site_name", diff --git a/api/tacticalrmm/alerts/migrations/0006_auto_20210217_1736.py b/api/tacticalrmm/alerts/migrations/0006_auto_20210217_1736.py new file mode 100644 index 00000000..94005385 --- /dev/null +++ b/api/tacticalrmm/alerts/migrations/0006_auto_20210217_1736.py @@ -0,0 +1,72 @@ +# Generated by Django 3.1.6 on 2021-02-17 17:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('alerts', '0005_auto_20210212_1745'), + ] + + operations = [ + migrations.RemoveField( + model_name='alerttemplate', + name='agent_include_desktops', + ), + migrations.AddField( + model_name='alerttemplate', + name='exclude_servers', + field=models.BooleanField(blank=True, default=False, null=True), + ), + migrations.AddField( + model_name='alerttemplate', + name='exclude_workstations', + field=models.BooleanField(blank=True, default=False, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='agent_always_alert', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='agent_always_email', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='agent_always_text', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='check_always_alert', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='check_always_email', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='check_always_text', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='task_always_alert', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='task_always_email', + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AlterField( + model_name='alerttemplate', + name='task_always_text', + field=models.BooleanField(blank=True, default=None, null=True), + ), + ] diff --git a/api/tacticalrmm/alerts/models.py b/api/tacticalrmm/alerts/models.py index 6cb11bcb..10f79f47 100644 --- a/api/tacticalrmm/alerts/models.py +++ b/api/tacticalrmm/alerts/models.py @@ -170,10 +170,9 @@ class AlertTemplate(models.Model): # agent alert settings agent_email_on_resolved = BooleanField(null=True, blank=True, default=False) agent_text_on_resolved = BooleanField(null=True, blank=True, default=False) - agent_include_desktops = BooleanField(null=True, blank=True, default=False) - agent_always_email = BooleanField(null=True, blank=True, default=False) - agent_always_text = BooleanField(null=True, blank=True, default=False) - agent_always_alert = BooleanField(null=True, blank=True, default=False) + agent_always_email = BooleanField(null=True, blank=True, default=None) + agent_always_text = BooleanField(null=True, blank=True, default=None) + agent_always_alert = BooleanField(null=True, blank=True, default=None) agent_periodic_alert_days = PositiveIntegerField(blank=True, null=True, default=0) # check alert settings @@ -194,9 +193,9 @@ class AlertTemplate(models.Model): ) check_email_on_resolved = BooleanField(null=True, blank=True, default=False) check_text_on_resolved = BooleanField(null=True, blank=True, default=False) - check_always_email = BooleanField(null=True, blank=True, default=False) - check_always_text = BooleanField(null=True, blank=True, default=False) - check_always_alert = BooleanField(null=True, blank=True, default=False) + check_always_email = BooleanField(null=True, blank=True, default=None) + check_always_text = BooleanField(null=True, blank=True, default=None) + check_always_alert = BooleanField(null=True, blank=True, default=None) check_periodic_alert_days = PositiveIntegerField(blank=True, null=True, default=0) # task alert settings @@ -217,11 +216,15 @@ class AlertTemplate(models.Model): ) task_email_on_resolved = BooleanField(null=True, blank=True, default=False) task_text_on_resolved = BooleanField(null=True, blank=True, default=False) - task_always_email = BooleanField(null=True, blank=True, default=False) - task_always_text = BooleanField(null=True, blank=True, default=False) - task_always_alert = BooleanField(null=True, blank=True, default=False) + task_always_email = BooleanField(null=True, blank=True, default=None) + task_always_text = BooleanField(null=True, blank=True, default=None) + task_always_alert = BooleanField(null=True, blank=True, default=None) task_periodic_alert_days = PositiveIntegerField(blank=True, null=True, default=0) + # exclusion settings + exclude_workstations = BooleanField(null=True, blank=True, default=False) + exclude_servers = BooleanField(null=True, blank=True, default=False) + excluded_sites = models.ManyToManyField( "clients.Site", related_name="alert_exclusions", blank=True ) diff --git a/api/tacticalrmm/autotasks/serializers.py b/api/tacticalrmm/autotasks/serializers.py index 26579376..35ad17d7 100644 --- a/api/tacticalrmm/autotasks/serializers.py +++ b/api/tacticalrmm/autotasks/serializers.py @@ -14,6 +14,24 @@ class TaskSerializer(serializers.ModelSerializer): assigned_check = CheckSerializer(read_only=True) schedule = serializers.ReadOnlyField() last_run = serializers.ReadOnlyField(source="last_run_as_timezone") + alert_template = serializers.SerializerMethodField() + + def get_alert_template(self, obj): + + if obj.agent: + alert_template = obj.agent.get_alert_template() + else: + alert_template = None + + if not alert_template: + return None + else: + return { + "name": alert_template.name, + "always_email": alert_template.task_always_email, + "always_text": alert_template.task_always_text, + "always_alert": alert_template.task_always_alert, + } class Meta: model = AutomatedTask diff --git a/api/tacticalrmm/checks/serializers.py b/api/tacticalrmm/checks/serializers.py index 5b26fcc9..50e03cb8 100644 --- a/api/tacticalrmm/checks/serializers.py +++ b/api/tacticalrmm/checks/serializers.py @@ -20,6 +20,23 @@ class CheckSerializer(serializers.ModelSerializer): assigned_task = serializers.SerializerMethodField() last_run = serializers.ReadOnlyField(source="last_run_as_timezone") history_info = serializers.ReadOnlyField() + alert_template = serializers.SerializerMethodField() + + def get_alert_template(self, obj): + if obj.agent: + alert_template = obj.agent.get_alert_template() + else: + alert_template = None + + if not alert_template: + return None + else: + return { + "name": alert_template.name, + "always_email": alert_template.check_always_email, + "always_text": alert_template.check_always_text, + "always_alert": alert_template.check_always_alert, + } ## Change to return only array of tasks after 9/25/2020 def get_assigned_task(self, obj): diff --git a/web/src/components/AgentTable.vue b/web/src/components/AgentTable.vue index 305f7f14..78cc32e7 100644 --- a/web/src/components/AgentTable.vue +++ b/web/src/components/AgentTable.vue @@ -253,6 +253,16 @@ + Setting is overidden by alert template: {{ props.row.alert_template.name }} + + + + Setting is overidden by alert template: {{ props.row.alert_template.name }} + + + + Setting is overidden by alert template: {{ props.row.alert_template.name }} + + +