Skip to content

Commit 8153aee

Browse files
committed
Add basic alert endpoints.
1 parent 13cff9b commit 8153aee

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed

api/src/alerts/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from service.internal_service import InternalService
2+
3+
service = InternalService(name="alerts")
4+
5+
import alerts.views

api/src/alerts/views.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from logging import getLogger
2+
3+
from flask import request
4+
from multiaccessy import service
5+
from service.api_definition import POST, PUBLIC
6+
from service.config import config
7+
from service.error import BadRequest, UnprocessableEntity
8+
from slack_sdk import WebClient
9+
10+
logger = getLogger("alerts")
11+
12+
FIRE_ALERT_CHANNEL = "C09S5J35FME"
13+
14+
15+
@service.route("/pressure_sensor_triggered", method=POST, permission=PUBLIC)
16+
def fire() -> str:
17+
token = config.get("SLACK_BOT_TOKEN")
18+
if not token:
19+
logger.error("Slack bot token not configured, but we received an event")
20+
raise BadRequest("Slack bot token not configured")
21+
22+
slack_client = WebClient(token=token)
23+
24+
slack_client.chat_postMessage(
25+
channel=FIRE_ALERT_CHANNEL,
26+
mrkdwn=True,
27+
markdown_text=f":fire: :fire: :fire:\n\nFire detected in wood workshop dust collector. Dumping 20 liters of water into the dust bin.\n\n:fire: :fire: :fire:",
28+
)
29+
return "Alert sent"
30+
31+
32+
@service.route("/pressure_sensor_reset", method=POST, permission=PUBLIC)
33+
def fire_reset() -> str:
34+
token = config.get("SLACK_BOT_TOKEN")
35+
if not token:
36+
logger.error("Slack bot token not configured, but we received an event")
37+
raise BadRequest("Slack bot token not configured")
38+
39+
slack_client = WebClient(token=token)
40+
41+
slack_client.chat_postMessage(
42+
channel=FIRE_ALERT_CHANNEL,
43+
mrkdwn=True,
44+
markdown_text=f"Pressure sensor in wood workshop dust collector has been reset. Presumably someone just refilled the sprinkler system with water. Good work!",
45+
)
46+
return "Alert sent"

api/src/services.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import statistics
22
from collections import namedtuple
33

4+
import alerts
45
import box_terminator
56
import core
67
import member
@@ -32,4 +33,5 @@
3233
Instance(path="/accessy", service=multiaccessy.service),
3334
Instance(path="/box_terminator", service=box_terminator.service),
3435
Instance(path="/tasks", service=tasks.service),
36+
Instance(path="/alerts", service=alerts.service),
3537
)

0 commit comments

Comments
 (0)