Skip to content

Commit 82a1e58

Browse files
authored
Merge pull request #46 from robswc/active-events
add active/inactive attribute to events, add GUI to control this
2 parents ccf6565 + 0f61445 commit 82a1e58

File tree

3 files changed

+71
-15
lines changed

3 files changed

+71
-15
lines changed

src/components/events/base/event.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class Event:
4242

4343
def __init__(self):
4444
self.name = self.get_name()
45+
self.active = True
4546
self.webhook = True # all events are webhooks by default
4647
self.key = f'{self.name}:{md5(f"{self.name + UNIQUE_KEY}".encode()).hexdigest()[:6]}'
4748
self._actions = []
@@ -70,15 +71,17 @@ def register_action(self, action):
7071
self._actions.append(action)
7172

7273
def trigger(self, *args, **kwargs):
73-
# handle logging
74-
logger.info(f'EVENT TRIGGERED --->\t{str(self)}')
75-
log_event = LogEvent(self.name, 'triggered', datetime.now(), f'{self.name} was triggered')
76-
log_event.write()
77-
78-
# pass data
79-
data = kwargs.get('data')
80-
81-
self.logs.append(log_event)
82-
for action in self._actions:
83-
action.set_data(data)
84-
action.run()
74+
if self.active:
75+
logger.info(f'EVENT TRIGGERED --->\t{str(self)}')
76+
log_event = LogEvent(self.name, 'triggered', datetime.now(), f'{self.name} was triggered')
77+
log_event.write()
78+
79+
# pass data
80+
data = kwargs.get('data')
81+
82+
self.logs.append(log_event)
83+
for action in self._actions:
84+
action.set_data(data)
85+
action.run()
86+
else:
87+
logger.info(f'EVENT NOT TRIGGERED (event is inactive) --->\t{str(self)}')

src/main.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,25 @@ def get_logs():
8585
return jsonify([log.as_json() for log in logs])
8686

8787

88+
@app.route("/event/active", methods=["POST"])
89+
def activate_event():
90+
if request.method == 'POST':
91+
# get query parameters
92+
event_name = request.args.get('event', None)
93+
94+
# if event name is not provided, or cannot be found, 404
95+
if event_name is None:
96+
return Response(f'Event name cannot be empty ({event_name})', status=404)
97+
try:
98+
event = em.get(event_name)
99+
except ValueError:
100+
return Response(f'Cannot find event with name: {event_name}', status=404)
101+
102+
# set event to active or inactive, depending on current state
103+
event.active = request.args.get('active', True) == 'true'
104+
logger.info(f'Event {event.name} active set to: {event.active}, via POST request')
105+
return {'active': event.active}
106+
107+
88108
if __name__ == '__main__':
89109
app.run(debug=True)

src/templates/dashboard.html

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,15 @@ <h2 class="accordion-header" id="flush-headingTwo">
133133
</details>
134134
</div>
135135
</div>
136-
<div>
137-
<i class="fa-solid fa-circle-check fs-3 text-success"></i>
136+
<div class="d-flex align-items-center justify-content-end gap-5">
137+
<div class="form-check form-switch">
138+
<input class="form-check-input toggle-active-switch"
139+
type="checkbox" role="switch"
140+
id="{{ event }}toggleActiveSwitch" checked>
141+
<label class="form-check-label"
142+
for="{{ event }}toggleActiveSwitch">Active</label>
143+
</div>
144+
<i id="{{ event }}ActiveStatus" class="fa-solid fa-circle-check fs-3 text-success"></i>
138145
</div>
139146
</div>
140147
</div>
@@ -216,7 +223,33 @@ <h1><i class="fa-solid fa-chart-area pe-3 text-muted"></i>Monitoring</h1>
216223
</div>
217224
</div>
218225
</div>
219-
226+
<script>
227+
// on document load
228+
$(document).ready(
229+
function toggleEventActive() {
230+
$('.toggle-active-switch').on('change', function () {
231+
console.log('toggle active')
232+
let event = $(this).attr('id').split('toggleActiveSwitch')[0];
233+
let active = $(this).is(':checked');
234+
$.ajax({
235+
url: `/event/active?event=${event}&active=${active}`,
236+
type: 'POST',
237+
success: function (data) {
238+
console.log(data);
239+
const statusIcon = $(`#${event}ActiveStatus`)
240+
if (data['active']) {
241+
statusIcon.addClass('fa-circle-check text-success');
242+
statusIcon.removeClass('fa-circle-xmark text-danger');
243+
} else {
244+
statusIcon.removeClass('fa-circle-check text-success');
245+
statusIcon.addClass('fa-circle-xmark text-danger');
246+
}
247+
}
248+
})
249+
})
250+
}
251+
)
252+
</script>
220253
<script>
221254
var data = [
222255
{

0 commit comments

Comments
 (0)