package main import ( "mqttListener/Config" "mqttListener/models" "mqttListener/mqtt" "fmt" "log" "os" "os/signal" "syscall" "net/http" ) type Env struct { db models.Datastore } func main() { c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) Config.ReadConfig() // DEBUG Config // fmt.Println("BrokerAddress = ", Config.BrokerAddress) db, err := models.NewDB("simple.sqlite") if err != nil { log.Panic(err) } env := &Env{db} mqtt.Setup() mqtt.Connect() go mqtt.Listen() http.HandleFunc("/devices", env.devicesIndex) go http.ListenAndServe(":3000", nil) fmt.Println("awaiting signal") <-c // wait for SIGTERM fmt.Println("exiting") mqtt.Disconnect() } func (env *Env) devicesIndex(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Error(w, http.StatusText(405), 405) return } devices, err := env.db.AllDevices() if err != nil { http.Error(w, http.StatusText(500), 500) return } for _, device := range devices { fmt.Fprintf(w, "%s, %s, %s, £%.2f\n", device.ID, device.MAC, device.SN, device.LastMsg) } }