Skip to content

Commit

Permalink
use separate enum
Browse files Browse the repository at this point in the history
  • Loading branch information
wedamija committed Oct 28, 2024
1 parent 5ecb91c commit c7cf4c0
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 26 deletions.
1 change: 0 additions & 1 deletion src/sentry/types/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ class GroupSubStatus:


class PriorityLevel(IntEnum):
OK = 0
LOW = 25
MEDIUM = 50
HIGH = 75
Expand Down
4 changes: 2 additions & 2 deletions src/sentry/workflow_engine/migrations/0008_detector_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import sentry.db.models.fields.foreignkey
import sentry.workflow_engine.models.detector_state
from sentry.new_migrations.migrations import CheckedMigration
from sentry.types.group import PriorityLevel
from sentry.workflow_engine.types import DetectorPriorityLevel


class Migration(CheckedMigration):
Expand Down Expand Up @@ -46,7 +46,7 @@ class Migration(CheckedMigration):
(
"state",
models.CharField(
default=PriorityLevel.OK,
default=DetectorPriorityLevel.OK,
max_length=200,
),
),
Expand Down
6 changes: 3 additions & 3 deletions src/sentry/workflow_engine/models/detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
from sentry.db.models import DefaultFieldsModel, FlexibleForeignKey, region_silo_model
from sentry.issues import grouptype
from sentry.models.owner_base import OwnerModel
from sentry.types.group import PriorityLevel
from sentry.utils import redis
from sentry.workflow_engine.models import DataPacket
from sentry.workflow_engine.models.detector_state import DetectorState
from sentry.workflow_engine.types import DetectorPriorityLevel

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -93,7 +93,7 @@ def detector_handler(self) -> DetectorHandler | None:
class DetectorStateData:
group_key: str | None
active: bool
status: PriorityLevel
status: DetectorPriorityLevel
# Stateful detectors always process data packets in order. Once we confirm that a data packet has been fully
# processed and all workflows have been done, this value will be used by the stateful detector to prevent
# reprocessing
Expand All @@ -108,7 +108,7 @@ class DetectorStateData:
@dataclasses.dataclass(frozen=True)
class DetectorEvaluationResult:
is_active: bool
priority: PriorityLevel
priority: DetectorPriorityLevel
data: Any
state_update_data: DetectorStateData | None = None

Expand Down
4 changes: 2 additions & 2 deletions src/sentry/workflow_engine/models/detector_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from sentry.backup.scopes import RelocationScope
from sentry.db.models import DefaultFieldsModel, FlexibleForeignKey, region_silo_model
from sentry.types.group import PriorityLevel
from sentry.workflow_engine.types import DetectorPriorityLevel


@region_silo_model
Expand All @@ -21,7 +21,7 @@ class DetectorState(DefaultFieldsModel):
active = models.BooleanField(default=False)

# The current state of the detector
state = models.CharField(max_length=200, default=PriorityLevel.OK)
state = models.CharField(max_length=200, default=DetectorPriorityLevel.OK)

class Meta:
constraints = [
Expand Down
12 changes: 12 additions & 0 deletions src/sentry/workflow_engine/types.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from __future__ import annotations

from enum import IntEnum

from sentry.types.group import PriorityLevel


class DetectorPriorityLevel(IntEnum):
OK = 0
LOW = PriorityLevel.LOW
MEDIUM = PriorityLevel.MEDIUM
HIGH = PriorityLevel.HIGH
10 changes: 5 additions & 5 deletions tests/sentry/workflow_engine/models/test_detector.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import unittest

from sentry.testutils.cases import TestCase
from sentry.types.group import PriorityLevel
from sentry.workflow_engine.models import DataPacket, DetectorEvaluationResult
from sentry.workflow_engine.models.detector import (
Detector,
Expand All @@ -10,6 +9,7 @@
get_redis_client,
)
from sentry.workflow_engine.models.detector_state import DetectorState
from sentry.workflow_engine.types import DetectorPriorityLevel


class MockDetectorStateHandler(StatefulDetectorHandler[dict]):
Expand Down Expand Up @@ -82,7 +82,7 @@ def test(self):
DetectorStateData(
group_key,
True,
PriorityLevel.OK,
DetectorPriorityLevel.OK,
100,
{"some_counter": 1, "another_counter": 2},
)
Expand All @@ -92,7 +92,7 @@ def test(self):
detector=handler.detector,
detector_group_key=group_key,
active=True,
state=PriorityLevel.OK,
state=DetectorPriorityLevel.OK,
).exists()
assert redis.get(dedupe_key) == "100"
assert redis.get(counter_key_1) == "1"
Expand All @@ -103,7 +103,7 @@ def test(self):
DetectorStateData(
group_key,
False,
PriorityLevel.OK,
DetectorPriorityLevel.OK,
150,
{"some_counter": None, "another_counter": 20},
)
Expand All @@ -113,7 +113,7 @@ def test(self):
detector=handler.detector,
detector_group_key=group_key,
active=False,
state=PriorityLevel.OK,
state=DetectorPriorityLevel.OK,
).exists()
assert redis.get(dedupe_key) == "150"
assert not redis.exists(counter_key_1)
Expand Down
26 changes: 13 additions & 13 deletions tests/sentry/workflow_engine/processors/test_detector.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from unittest import mock

from sentry.issues.grouptype import GroupCategory, GroupType
from sentry.types.group import PriorityLevel
from sentry.workflow_engine.models import DataPacket
from sentry.workflow_engine.models.detector import (
DetectorEvaluationResult,
DetectorHandler,
DetectorStateData,
)
from sentry.workflow_engine.processors.detector import process_detectors
from sentry.workflow_engine.types import DetectorPriorityLevel
from tests.sentry.issues.test_grouptype import BaseGroupTypeTest


Expand All @@ -24,7 +24,7 @@ class NoHandlerGroupType(GroupType):

class MockDetectorHandler(DetectorHandler[dict]):
def evaluate(self, data_packet: DataPacket[dict]) -> list[DetectorEvaluationResult]:
return [DetectorEvaluationResult(True, PriorityLevel.HIGH, data_packet)]
return [DetectorEvaluationResult(True, DetectorPriorityLevel.HIGH, data_packet)]

class HandlerGroupType(GroupType):
type_id = 2
Expand All @@ -39,12 +39,12 @@ def evaluate(self, data_packet: DataPacket[dict]) -> list[DetectorEvaluationResu
return [
DetectorEvaluationResult(
True,
PriorityLevel.HIGH,
DetectorPriorityLevel.HIGH,
data_packet,
DetectorStateData(
group_key,
True,
PriorityLevel.OK,
DetectorPriorityLevel.OK,
100,
{},
),
Expand Down Expand Up @@ -72,7 +72,7 @@ def test(self):
data_packet = self.build_data_packet()
results = process_detectors(data_packet, [detector])
assert results == [
(detector, [DetectorEvaluationResult(True, PriorityLevel.HIGH, data_packet)])
(detector, [DetectorEvaluationResult(True, DetectorPriorityLevel.HIGH, data_packet)])
]

def test_state_results(self):
Expand All @@ -81,9 +81,9 @@ def test_state_results(self):
results = process_detectors(data_packet, [detector])
result = DetectorEvaluationResult(
True,
PriorityLevel.HIGH,
DetectorPriorityLevel.HIGH,
data_packet,
DetectorStateData(None, True, PriorityLevel.OK, 100, {}),
DetectorStateData(None, True, DetectorPriorityLevel.OK, 100, {}),
)
assert results == [
(
Expand All @@ -98,15 +98,15 @@ def test_state_results_multi_group(self):
results = process_detectors(data_packet, [detector])
result_1 = DetectorEvaluationResult(
True,
PriorityLevel.HIGH,
DetectorPriorityLevel.HIGH,
data_packet,
DetectorStateData("group_1", True, PriorityLevel.OK, 100, {}),
DetectorStateData("group_1", True, DetectorPriorityLevel.OK, 100, {}),
)
result_2 = DetectorEvaluationResult(
True,
PriorityLevel.HIGH,
DetectorPriorityLevel.HIGH,
data_packet,
DetectorStateData("group_2", True, PriorityLevel.OK, 100, {}),
DetectorStateData("group_2", True, DetectorPriorityLevel.OK, 100, {}),
)
assert results == [
(
Expand All @@ -123,9 +123,9 @@ def test_state_results_multi_group_dupe(self):
assert mock_logger.error.call_args[0][0] == "Duplicate detector state group keys found"
result = DetectorEvaluationResult(
True,
PriorityLevel.HIGH,
DetectorPriorityLevel.HIGH,
data_packet,
DetectorStateData("dupe", True, PriorityLevel.OK, 100, {}),
DetectorStateData("dupe", True, DetectorPriorityLevel.OK, 100, {}),
)
assert results == [
(
Expand Down

0 comments on commit c7cf4c0

Please sign in to comment.