1
1
import datetime
2
- import requests
3
2
4
3
from custos import TwilioNotifier
5
4
from .tools .shift import get_current_shifter
6
- from copy import copy
7
5
from .tools import config , get_alerts
8
6
from .categories import CATEGORY_DEVELOPER
9
7
@@ -37,32 +35,7 @@ def notify(self, recipient, msg):
37
35
)
38
36
self .not_acknowledged_messages .append (msg )
39
37
40
- def _remove_acknowledged_and_old_calls (self ):
41
- """ from the list of not acknowledged calls
42
- remove all calls, which have been acknowledged on the web page
43
-
44
- Also remove calls older than 2 hours, to get out of
45
- a "call the backup shifter" dead lock
46
- """
47
- try :
48
- alerts = {a ['uuid' ]: a for a in get_alerts ()}
49
- except requests .exceptions .RequestException :
50
- return
51
-
52
- for msg in copy (self .not_acknowledged_messages ):
53
- age = datetime .datetime .utcnow () - msg .timestamp
54
- if age > (self .max_time_for_fallback + self .time_before_fallback ):
55
- self .not_acknowledged_messages .remove (msg )
56
- else :
57
- try :
58
- alert = alerts [str (msg .uuid )]
59
- except KeyError :
60
- continue
61
-
62
- if alert ['acknowledged' ] is True :
63
- self .not_acknowledged_messages .remove (msg )
64
-
65
- def _get_oldest_call_age (self ):
38
+ def _get_oldest_message_age (self ):
66
39
max_age = datetime .timedelta ()
67
40
for msg in self .not_acknowledged_messages :
68
41
age = datetime .datetime .utcnow () - msg .timestamp
@@ -97,14 +70,16 @@ def get_numbers_to_call(self, msg):
97
70
log .debug ('Getting phone number of primary shifter' )
98
71
numbers_to_call .append (self .phone_number_of_normal_shifter ())
99
72
100
- if self ._get_oldest_call_age () >= self .time_before_fallback :
73
+ if self ._get_oldest_message_age () >= self .time_before_fallback :
101
74
log .debug ('Getting phone number of fallback shifter' )
102
75
numbers_to_call .append (self .phone_number_of_fallback_shifter ())
103
76
104
77
return numbers_to_call
105
78
106
79
def handle_message (self , msg ):
107
- self ._remove_acknowledged_and_old_calls ()
80
+ self ._remove_old_messages ()
81
+ self ._remove_acknowledged_messages ()
82
+
108
83
log .debug ('Got a message' )
109
84
if msg .level >= self .level :
110
85
log .debug ('Message is over alert level' )
@@ -113,3 +88,37 @@ def handle_message(self, msg):
113
88
for phone_number in numbers_to_call :
114
89
log .info ('Calling {}' .format (phone_number ))
115
90
self .notify (phone_number , msg )
91
+
92
+ def _remove_old_messages (self ):
93
+ """ from the list of not_acknowledged_messages
94
+ remove messages older than a certain limit, to avoid calling the
95
+ fallback forever.
96
+ """
97
+ limit = self .max_time_for_fallback + self .time_before_fallback
98
+ self .not_acknowledged_messages = [
99
+ msg for msg in self .not_acknowledged_messages
100
+ if not is_message_old (msg , limit )
101
+ ]
102
+
103
+ def _remove_acknowledged_messages (self ):
104
+ ''' from the list of not_acknowledged_messages
105
+ remove all messages, which have been acknowledged on the web page
106
+ '''
107
+ alerts = {a ['uuid' ]: a for a in get_alerts ()}
108
+
109
+ self .not_acknowledged_messages = [
110
+ msg for msg in self .not_acknowledged_messages
111
+ if not is_message_acknowledged (alerts , msg )
112
+ ]
113
+
114
+
115
+ def is_message_acknowledged (alerts , msg ):
116
+ try :
117
+ return alerts [str (msg .uuid )]['acknowledged' ]
118
+ except KeyError :
119
+ return False
120
+
121
+
122
+ def is_message_old (msg , limit ):
123
+ age = datetime .datetime .utcnow () - msg .timestamp
124
+ return age > limit
0 commit comments