Garmin inreach API support

This commit is contained in:
Ian Gulliver
2025-08-20 22:42:21 -07:00
parent f84d5db274
commit 1b2fe81f50
2 changed files with 133 additions and 11 deletions

57
main.go
View File

@@ -10,12 +10,15 @@ import (
)
type PHandler struct {
tmpl *template.Template
pd *pdClient
mux *http.ServeMux
tmpl *template.Template
pd *pdClient
gc *garminClient
garminIMEI string
garminSender string
mux *http.ServeMux
}
func NewPHandler(routingKey string) (*PHandler, error) {
func NewPHandler(pdRoutingKey, garminApiKey, garminIMEI, garminSender string) (*PHandler, error) {
tmpl := template.New("index.html")
tmpl.Funcs(template.FuncMap{
@@ -28,9 +31,12 @@ func NewPHandler(routingKey string) (*PHandler, error) {
}
ph := &PHandler{
tmpl: tmpl,
pd: newPDClient(routingKey),
mux: http.NewServeMux(),
tmpl: tmpl,
pd: newPDClient(pdRoutingKey),
gc: newGarminClient(garminApiKey),
garminIMEI: garminIMEI,
garminSender: garminSender,
mux: http.NewServeMux(),
}
ph.mux.HandleFunc("/{$}", ph.serveRoot)
@@ -62,7 +68,7 @@ func (ph *PHandler) serveRoot(w http.ResponseWriter, r *http.Request) {
return
}
err = ph.pd.sendAlert(m)
err = ph.sendAlert(m)
if err != nil {
sendError(w, http.StatusInternalServerError, "Error sending to PagerDuty: %s", err)
return
@@ -70,6 +76,20 @@ func (ph *PHandler) serveRoot(w http.ResponseWriter, r *http.Request) {
sendResponse(w, "Page sent")
}
func (ph *PHandler) sendAlert(m string) error {
err := ph.pd.sendAlert(m)
if err != nil {
return fmt.Errorf("Error sending to PagerDuty: %s", err)
}
err = ph.gc.sendMessage(ph.garminIMEI, ph.garminSender, m)
if err != nil {
return fmt.Errorf("Error sending to Garmin: %s", err)
}
return nil
}
var allowedEnvs = []string{
"SHORT_NAME",
"CONTACT_NAME",
@@ -94,12 +114,27 @@ func (ph *PHandler) envs() map[string]string {
}
func main() {
routingKey := os.Getenv("PD_ROUTING_KEY")
if routingKey == "" {
pdRoutingKey := os.Getenv("PD_ROUTING_KEY")
if pdRoutingKey == "" {
log.Fatalf("please set PD_ROUTING_KEY")
}
ph, err := NewPHandler(routingKey)
garminApiKey := os.Getenv("GARMIN_API_KEY")
if garminApiKey == "" {
log.Fatalf("please set GARMIN_API_KEY")
}
garminIMEI := os.Getenv("GARMIN_IMEI")
if garminIMEI == "" {
log.Fatalf("please set GARMIN_IMEI")
}
garminSender := os.Getenv("GARMIN_SENDER")
if garminSender == "" {
log.Fatalf("please set GARMIN_SENDER")
}
ph, err := NewPHandler(pdRoutingKey, garminApiKey, garminIMEI, garminSender)
if err != nil {
log.Fatalf("NewPHandler: %s", err)
}