|
import datetime |
|
import requests |
|
|
|
class Trigger: |
|
def __init__(self, trigger_tags, comparison_tags, time_definition, event_name, included=True): |
|
self.trigger_tags = set(trigger_tags) |
|
self.comparison_tags = set(comparison_tags) |
|
self.time_definition = time_definition |
|
self.event_name = event_name |
|
self.included = included |
|
self.threshold = 0 |
|
self.actions = [] |
|
self.sources = [] |
|
|
|
def add_action(self, action): |
|
self.actions.append(action) |
|
|
|
def remove_action(self, action): |
|
if action in self.actions: |
|
self.actions.remove(action) |
|
else: |
|
print("Action not found") |
|
|
|
def add_source(self, source): |
|
self.sources.append(source) |
|
|
|
def remove_source(self, source): |
|
if source in self.sources: |
|
self.sources.remove(source) |
|
else: |
|
print("Source not found") |
|
|
|
def check_trigger(self, current_tags, current_time): |
|
if self.included: |
|
if current_time in self.time_definition and self.trigger_tags.issubset(current_tags): |
|
self.threshold += 1 |
|
else: |
|
self.threshold = 0 |
|
else: |
|
if current_time in self.time_definition and not self.trigger_tags.intersection(current_tags): |
|
self.threshold += 1 |
|
else: |
|
self.threshold = 0 |
|
|
|
if self.threshold >= len(self.time_definition): |
|
self.fire_actions() |
|
self.make_requests() |
|
|
|
def fire_actions(self): |
|
for action in self.actions: |
|
action(self.event_name) |
|
|
|
def make_requests(self): |
|
for source in self.sources: |
|
try: |
|
response = requests.get(source) |
|
|
|
print(f"Request made to {source}. Status code: {response.status_code}") |
|
except requests.exceptions.RequestException as e: |
|
print(f"Error making request to {source}: {e}") |
|
|
|
|
|
|
|
def action_function(event_name): |
|
print(f"Trigger fired for event: {event_name}") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
trigger = Trigger(["tag1", "tag2"], ["tag3", "tag4"], [datetime.time(10, 0), datetime.time(15, 0)], "Event1") |
|
|
|
|
|
trigger.add_action(action_function) |
|
|
|
|
|
trigger.add_source("https://example.com/api/data") |
|
|
|
|
|
current_tags = {"tag1", "tag2", "tag3"} |
|
current_time = datetime.datetime.now().time() |
|
trigger.check_trigger(current_tags, current_time) |
|
|