Skip to content

Commit c3915e9

Browse files
committed
Add status field in alert
1 parent 7225782 commit c3915e9

File tree

8 files changed

+76
-2
lines changed

8 files changed

+76
-2
lines changed

deploy/helm/ifrcgo-helm/values.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ cronjobs:
111111
schedule: '0 9 * * *'
112112
- command: 'ingest_country_plan_file'
113113
schedule: '1 0 * * *'
114+
- command: 'update_alert_status'
115+
schedule: '0 */12 * * *'
114116

115117
elasticsearch:
116118
enabled: true

main/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from flash_update import enums as flash_update_enums
66
from deployments import enums as deployments_enums
77
from per import enums as per_enums
8+
from notifications import enums as notifications_enums
89

910

1011
apps_enum_register = [
@@ -13,6 +14,7 @@
1314
('flash_update', flash_update_enums.enum_register),
1415
('deployments', deployments_enums.enum_register),
1516
('per', per_enums.enum_register),
17+
('notifications', notifications_enums.enum_register),
1618
]
1719

1820

notifications/drf_views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class SurgeAlertViewset(viewsets.ReadOnlyModelViewSet):
6262
prefetch_related('molnix_tags', 'molnix_tags__groups').\
6363
select_related('event', 'country').all()
6464
filterset_class = SurgeAlertFilter
65-
ordering_fields = ('created_at', 'atype', 'category', 'event', 'is_stood_down',)
65+
ordering_fields = ('created_at', 'atype', 'category', 'event', 'is_stood_down', 'status', 'opens')
6666
search_fields = ('operation', 'message', 'event__name',) # for /docs
6767

6868
def get_serializer_class(self):

notifications/enums.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from . import models
2+
3+
enum_register = {
4+
'surge_alert_status': models.SurgeAlertStatus,
5+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import logging
2+
from django.db import models
3+
4+
from django.core.management.base import BaseCommand
5+
from django.utils import timezone
6+
from notifications.models import SurgeAlert, SurgeAlertStatus
7+
8+
logger = logging.getLogger(__name__)
9+
10+
class Command(BaseCommand):
11+
'''
12+
Updating the Alert Status according:
13+
If the alert status is marked as stood_down, then the status is Stood Down.
14+
If the closing timestamp (closes) is earlier than the current date, the status is displayed as Closed. Otherwise, it is displayed as Open.
15+
'''
16+
17+
help = 'Update alert status'
18+
19+
def handle(self, *args, **options):
20+
now = timezone.now()
21+
try:
22+
SurgeAlert.objects.exclude(status=SurgeAlertStatus.CLOSED).filter(
23+
models.Q(opens__lte=now, closes__gte=now) | models.Q(is_stood_down=True)
24+
).update(
25+
status=models.Case(
26+
models.When(opens__lte=now, closes__gte=now, then=models.Value(SurgeAlertStatus.OPEN)),
27+
models.When(closes__lt=now, then=models.Value(SurgeAlertStatus.CLOSED)),
28+
models.When(is_stood_down=True, then=models.Value(SurgeAlertStatus.STOOD_DOWN)),
29+
default=models.F('status'),
30+
output_field=models.IntegerField()
31+
)
32+
)
33+
except Exception as e:
34+
logger.error('Error while updating alerts status: %s' % str(e))
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.23 on 2024-02-09 10:18
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('notifications', '0013_auto_20230410_0720'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='surgealert',
15+
name='status',
16+
field=models.IntegerField(choices=[(0, 'open'), (1, 'stood down'), (2, 'closed')], default=0, verbose_name='alert status'),
17+
),
18+
]

notifications/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ class SurgeAlertCategory(models.IntegerChoices):
2323
SHELTER = 3, _('shelter')
2424
STAND_DOWN = 4, _('stand down')
2525

26+
class SurgeAlertStatus(models.IntegerChoices):
27+
OPEN = 0, _('open')
28+
STOOD_DOWN = 1, _('stood down')
29+
CLOSED = 2, _('closed')
2630

2731
class SurgeAlert(models.Model):
2832

@@ -54,6 +58,7 @@ class SurgeAlert(models.Model):
5458

5559
# Don't set `auto_now_add` so we can modify it on save
5660
created_at = models.DateTimeField(verbose_name=_('created at'))
61+
status = models.IntegerField(choices=SurgeAlertStatus.choices, verbose_name=_('alert status'), default=0)
5762

5863
class Meta:
5964
ordering = ['-created_at']
@@ -65,6 +70,13 @@ def save(self, *args, **kwargs):
6570
if (not self.id and not self.created_at) or (self.created_at > timezone.now()):
6671
self.created_at = timezone.now()
6772
self.is_stood_down = self.molnix_status == 'unfilled'
73+
74+
if self.is_stood_down:
75+
self.status = SurgeAlertStatus.STOOD_DOWN
76+
elif self.closes and self.closes < timezone.now():
77+
self.status = SurgeAlertStatus.CLOSED
78+
else:
79+
self.status = SurgeAlertStatus.OPEN
6880
return super(SurgeAlert, self).save(*args, **kwargs)
6981

7082
def __str__(self):

notifications/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class SurgeAlertSerializer(ModelSerializer):
1111
event = SurgeEventSerializer()
1212
country = MiniCountrySerializer()
1313
atype_display = serializers.CharField(source='get_atype_display', read_only=True)
14+
status_display = serializers.CharField(source='get_status_display', read_only=True)
1415
category_display = serializers.CharField(source='get_category_display', read_only=True)
1516
molnix_tags = MolnixTagSerializer(many=True, read_only=True)
1617

@@ -19,7 +20,7 @@ class Meta:
1920
fields = (
2021
'operation', 'country', 'message', 'deployment_needed', 'is_private', 'event', 'created_at', 'id',
2122
'atype', 'atype_display', 'category', 'category_display', 'molnix_id', 'molnix_tags',
22-
'molnix_status', 'opens', 'closes', 'start', 'end', 'is_active', 'is_stood_down'
23+
'molnix_status', 'opens', 'closes', 'start', 'end', 'is_active', 'is_stood_down','status_display'
2324
)
2425

2526

0 commit comments

Comments
 (0)