1
0
Fork 0

Synchronous HTTP notification

This commit is contained in:
Michał Rudowicz 2025-01-07 00:11:03 +01:00
parent 499fa82d96
commit a5034ca3b5
2 changed files with 50 additions and 8 deletions

View File

@ -7,6 +7,8 @@ import (
"html/template"
"log"
"net/http"
"git.sr.ht/~michalr/go-satel"
)
type SendToTelegramSync struct {
@ -42,6 +44,13 @@ type SendToMatterbridgeSync struct {
tpl *template.Template
}
func MakeSendToMatterbridgeSync(s SatelNameGetter,
config AppConfig,
logger *log.Logger,
tpl *template.Template) SendToMatterbridgeSync {
return SendToMatterbridgeSync{SyncFilterImpl[GenericMessage]{}, s, config, logger, tpl}
}
func (mbridge *SendToMatterbridgeSync) Call(msg GenericMessage) {
for _, matterbridgeConfig := range mbridge.config.Matterbridge {
body, err := json.Marshal(MatterbridgeMessage{
@ -67,3 +76,38 @@ func (mbridge *SendToMatterbridgeSync) Call(msg GenericMessage) {
mbridge.CallNext(msg)
}
type NotifyViaHTTPSync struct {
SyncFilterImpl[GenericMessage]
config AppConfig
logger *log.Logger
}
func MakeNofityViaHTTPSync(config AppConfig, logger *log.Logger) NotifyViaHTTPSync {
return NotifyViaHTTPSync{SyncFilterImpl[GenericMessage]{}, config, logger}
}
func (notifyViaHttp *NotifyViaHTTPSync) Call(msg GenericMessage) {
inner_arm:
for _, basicElement := range msg.Messages {
if (basicElement.Index == NotificationPartitionIndex) && (basicElement.Type == satel.ArmedPartition) {
if basicElement.Value == ArmedPartition_Armed {
notifyAllHttp(notifyViaHttp.config.ArmCallbackUrls, notifyViaHttp.logger)
} else {
notifyAllHttp(notifyViaHttp.config.DisarmCallbackUrls, notifyViaHttp.logger)
}
break inner_arm
}
}
inner_alarm:
for _, basicElement := range msg.Messages {
if basicElement.Type == satel.PartitionAlarm {
if basicElement.Value == PartitionAlarm_Alarm {
notifyAllHttp(notifyViaHttp.config.AlarmCallbackUrls, notifyViaHttp.logger)
break inner_alarm
}
}
}
}

View File

@ -54,9 +54,7 @@ func SendToTg(events <-chan GenericMessage, s Sender, wg *sync.WaitGroup, logger
return returnEvents
}
func doHttpNotification(url string, logger *log.Logger, wg *sync.WaitGroup) {
wg.Add(1)
defer wg.Done()
func doHttpNotification(url string, logger *log.Logger) {
if len(url) == 0 {
return
@ -74,9 +72,9 @@ func doHttpNotification(url string, logger *log.Logger, wg *sync.WaitGroup) {
logger.Print("Notified via HTTP with result ", res.StatusCode)
}
func notifyAllHttp(urls []string, logger *log.Logger, wg *sync.WaitGroup) {
func notifyAllHttp(urls []string, logger *log.Logger) {
for _, uri := range urls {
go doHttpNotification(uri, logger, wg)
go doHttpNotification(uri, logger)
}
}
@ -94,9 +92,9 @@ func NotifyViaHTTP(events <-chan GenericMessage, config AppConfig, wg *sync.Wait
for _, basicElement := range e.Messages {
if (basicElement.Index == NotificationPartitionIndex) && (basicElement.Type == satel.ArmedPartition) {
if basicElement.Value == ArmedPartition_Armed {
notifyAllHttp(config.ArmCallbackUrls, logger, wg)
notifyAllHttp(config.ArmCallbackUrls, logger)
} else {
notifyAllHttp(config.DisarmCallbackUrls, logger, wg)
notifyAllHttp(config.DisarmCallbackUrls, logger)
}
break inner_arm
}
@ -105,7 +103,7 @@ func NotifyViaHTTP(events <-chan GenericMessage, config AppConfig, wg *sync.Wait
for _, basicElement := range e.Messages {
if basicElement.Type == satel.PartitionAlarm {
if basicElement.Value == PartitionAlarm_Alarm {
notifyAllHttp(config.AlarmCallbackUrls, logger, wg)
notifyAllHttp(config.AlarmCallbackUrls, logger)
break inner_alarm
}
}