Support multiple Garmin IMEIs via comma-separated GARMIN_IMEI
This commit is contained in:
@@ -37,12 +37,12 @@ func newGarminClient(apiKey string) *garminClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gc *garminClient) sendMessage(imei, sender, msg string) error {
|
func (gc *garminClient) sendMessage(imeis []string, sender, msg string) error {
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
err := json.NewEncoder(buf).Encode(garminMessageRequest{
|
err := json.NewEncoder(buf).Encode(garminMessageRequest{
|
||||||
Messages: []garminMessage{
|
Messages: []garminMessage{
|
||||||
{
|
{
|
||||||
Recipients: []string{imei},
|
Recipients: imeis,
|
||||||
Sender: sender,
|
Sender: sender,
|
||||||
Timestamp: time.Now().UTC().Format("2006-01-02T15:04:05Z"),
|
Timestamp: time.Now().UTC().Format("2006-01-02T15:04:05Z"),
|
||||||
Message: msg,
|
Message: msg,
|
||||||
@@ -84,8 +84,8 @@ func (gc *garminClient) sendMessage(imei, sender, msg string) error {
|
|||||||
|
|
||||||
log.Printf("[<-garmin] %s", string(body))
|
log.Printf("[<-garmin] %s", string(body))
|
||||||
|
|
||||||
if grResp.Count != 1 {
|
if grResp.Count != len(imeis) {
|
||||||
return fmt.Errorf("expected 1 message, got %d", grResp.Count)
|
return fmt.Errorf("expected %d messages, got %d", len(imeis), grResp.Count)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
23
main.go
23
main.go
@@ -13,12 +13,12 @@ type PHandler struct {
|
|||||||
tmpl *template.Template
|
tmpl *template.Template
|
||||||
pd *pdClient
|
pd *pdClient
|
||||||
gc *garminClient
|
gc *garminClient
|
||||||
garminIMEI string
|
garminIMEIs []string
|
||||||
garminSender string
|
garminSender string
|
||||||
mux *http.ServeMux
|
mux *http.ServeMux
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPHandler(pdRoutingKey, garminAPIKey, garminIMEI, garminSender string) (*PHandler, error) {
|
func NewPHandler(pdRoutingKey, garminAPIKey string, garminIMEIs []string, garminSender string) (*PHandler, error) {
|
||||||
tmpl := template.New("index.html")
|
tmpl := template.New("index.html")
|
||||||
|
|
||||||
tmpl.Funcs(template.FuncMap{
|
tmpl.Funcs(template.FuncMap{
|
||||||
@@ -33,7 +33,7 @@ func NewPHandler(pdRoutingKey, garminAPIKey, garminIMEI, garminSender string) (*
|
|||||||
ph := &PHandler{
|
ph := &PHandler{
|
||||||
tmpl: tmpl,
|
tmpl: tmpl,
|
||||||
pd: newPDClient(pdRoutingKey),
|
pd: newPDClient(pdRoutingKey),
|
||||||
garminIMEI: garminIMEI,
|
garminIMEIs: garminIMEIs,
|
||||||
garminSender: garminSender,
|
garminSender: garminSender,
|
||||||
mux: http.NewServeMux(),
|
mux: http.NewServeMux(),
|
||||||
}
|
}
|
||||||
@@ -86,7 +86,7 @@ func (ph *PHandler) sendAlert(m string) error {
|
|||||||
|
|
||||||
if ph.gc != nil {
|
if ph.gc != nil {
|
||||||
go func() {
|
go func() {
|
||||||
err := ph.gc.sendMessage(ph.garminIMEI, ph.garminSender, m)
|
err := ph.gc.sendMessage(ph.garminIMEIs, ph.garminSender, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res <- fmt.Errorf("Error sending to Garmin: %w", err)
|
res <- fmt.Errorf("Error sending to Garmin: %w", err)
|
||||||
} else {
|
} else {
|
||||||
@@ -152,17 +152,26 @@ func main() {
|
|||||||
|
|
||||||
garminAPIKey := os.Getenv("GARMIN_API_KEY")
|
garminAPIKey := os.Getenv("GARMIN_API_KEY")
|
||||||
|
|
||||||
garminIMEI := os.Getenv("GARMIN_IMEI")
|
garminIMEIStr := os.Getenv("GARMIN_IMEI")
|
||||||
if garminAPIKey != "" && garminIMEI == "" {
|
if garminAPIKey != "" && garminIMEIStr == "" {
|
||||||
log.Fatalf("please set GARMIN_IMEI")
|
log.Fatalf("please set GARMIN_IMEI")
|
||||||
}
|
}
|
||||||
|
var garminIMEIs []string
|
||||||
|
if garminIMEIStr != "" {
|
||||||
|
for _, imei := range strings.Split(garminIMEIStr, ",") {
|
||||||
|
imei = strings.TrimSpace(imei)
|
||||||
|
if imei != "" {
|
||||||
|
garminIMEIs = append(garminIMEIs, imei)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
garminSender := os.Getenv("GARMIN_SENDER")
|
garminSender := os.Getenv("GARMIN_SENDER")
|
||||||
if garminAPIKey != "" && garminSender == "" {
|
if garminAPIKey != "" && garminSender == "" {
|
||||||
log.Fatalf("please set GARMIN_SENDER")
|
log.Fatalf("please set GARMIN_SENDER")
|
||||||
}
|
}
|
||||||
|
|
||||||
ph, err := NewPHandler(pdRoutingKey, garminAPIKey, garminIMEI, garminSender)
|
ph, err := NewPHandler(pdRoutingKey, garminAPIKey, garminIMEIs, garminSender)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("NewPHandler: %s", err)
|
log.Fatalf("NewPHandler: %s", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user