oncall-engine/engine/apps/alerts
Joey Orlando d5b43b0439
minor improvements for check_escalation_finished celery task (#2554)
# What this PR does

This PR adds some enhancements to the `check_escalation_finished` celery
task. It short-circuits auditing of an alert group if it does not have
an escalation chain associated with it. In
`EscalationSnapshotMixin.start_escalation_if_needed`
we will not set `raw_escalation_snapshot`
([here](https://github.com/grafana/oncall/blob/dev/engine/apps/alerts/escalation_snapshot/escalation_snapshot_mixin.py#L262))
in this case:
```python3
def start_escalation_if_needed(self, countdown=START_ESCALATION_DELAY, eta=None):
        """
        :type self:AlertGroup
        """
        AlertGroup = apps.get_model("alerts", "AlertGroup")

        is_on_maintenace_or_debug_mode = self.channel.maintenance_mode is not None

        if (
            self.is_restricted
            or is_on_maintenace_or_debug_mode
            or self.pause_escalation
            or not self.escalation_chain_exists <-- here
        ):
            logger.debug(
                f"Not escalating alert group w/ pk: {self.pk}\n"
                f"is_restricted: {self.is_restricted}\n"
                f"is_on_maintenace_or_debug_mode: {is_on_maintenace_or_debug_mode}\n"
                f"pause_escalation: {self.pause_escalation}\n"
                f"escalation_chain_exists: {self.escalation_chain_exists}"
            )
            return

        logger.debug(f"Start escalation for alert group with pk: {self.pk}")

        # take raw escalation snapshot from db if escalation is paused
        raw_escalation_snapshot = (
            self.build_raw_escalation_snapshot() if not self.pause_escalation else self.raw_escalation_snapshot
        )
        task_id = celery_uuid()

        AlertGroup.all_objects.filter(pk=self.pk,).update(
            active_escalation_id=task_id,
            is_escalation_finished=False,
            raw_escalation_snapshot=raw_escalation_snapshot,
        )
```

`EscalationSnapshotMixin.escalation_chain_exists` is as such:
```python3
@property
    def escalation_chain_exists(self) -> bool:
        if self.pause_escalation:
            return False
        elif not self.channel_filter:
            return False
        return self.channel_filter.escalation_chain is not None
```

## Checklist

- [x] Unit, integration, and e2e (if applicable) tests updated
- [ ] Documentation added (or `pr:no public docs` PR label added if not
required) (N/A)
- [ ] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not
required) (N/A)
2023-07-17 14:04:53 +00:00
..
escalation_snapshot remove organization maintenance mode + fix integration maintenance mode (#2511) 2023-07-12 16:41:44 -04:00
grafana_alerting_sync_manager continue addressing mypy violations (#2170) 2023-06-27 10:23:08 +00:00
incident_appearance Remove url from sms notification, change format (#2317) 2023-07-05 16:32:54 +08:00
incident_log_builder modify check_escalation_finished_task task (#1266) 2023-03-17 10:14:08 +00:00
migrations add index on started_at column in alert groups (#2516) 2023-07-13 05:22:59 -04:00
models Remove INTEGRATIONS_TO_REVERSE_URL_MAP (#2533) 2023-07-17 04:43:24 +00:00
tasks minor improvements for check_escalation_finished celery task (#2554) 2023-07-17 14:04:53 +00:00
tests minor improvements for check_escalation_finished celery task (#2554) 2023-07-17 14:04:53 +00:00
__init__.py World, meet OnCall! 2022-06-03 08:09:47 -06:00
admin.py Alert group search (#488) 2022-09-06 11:30:12 +01:00
constants.py OnCall prometheus metrics exporter (#1605) 2023-05-25 18:26:13 +00:00
integration_options_mixin.py Remove INTEGRATIONS_TO_REVERSE_URL_MAP (#2533) 2023-07-17 04:43:24 +00:00
paging.py Direct paging improvements (#2537) 2023-07-17 14:21:56 +01:00
representative.py World, meet OnCall! 2022-06-03 08:09:47 -06:00
signals.py Fix warnings when running backend tests (#2079) 2023-06-06 18:38:00 +00:00
utils.py Fix outgoing webhook to resolve IP from parsed hostname 2022-09-22 14:35:37 -03:00