openpdu/src/webui.go

91 lines
2.1 KiB
Go

package main
import (
"fmt"
"log"
"net/http"
"strconv"
"github.com/go-macaron/binding"
"github.com/go-macaron/pongo2"
"github.com/spf13/viper"
"gopkg.in/macaron.v1"
)
func statusPage(ctx *macaron.Context) {
ctx.Data["pluglist"] = []Dictionary{
{"id": 1, "description": "p1"},
{"id": 2, "description": "p2"},
{"id": 3, "description": "p3"},
{"id": 4, "description": "p4"},
{"id": 5, "description": "p5"},
{"id": 6, "description": "p6"},
{"id": 7, "description": "p7"},
{"id": 8, "description": "p8"},
}
ctx.HTML(200, "status") // 200 is the response code.
}
func jsonStatus(ctx *macaron.Context) {
// MQTTpublish("openpdu/status", "asdss")
var data = [][]string{}
var o Outlet
for i := range outlets {
o = outlets[i]
d := []string{fmt.Sprintf("%d", o.num), o.channel.name, fmt.Sprintf("%v", o.channel.value)}
data = append(data, d)
}
ctx.JSON(http.StatusOK, Dictionary{
"data": data,
})
}
func jsonOutletToggle(ctx *macaron.Context) {
id, err := strconv.ParseUint(ctx.Params(":id"), 10, 64)
if err != nil {
log.Fatal(err)
}
MQTTpublish("openpdu/toggolo1", fmt.Sprint(id))
err = MyBoard.channelToggle(uint(id))
if err != nil {
log.Fatal(err)
}
MQTTpublish("openpdu/toggolo2", fmt.Sprint(id))
ctx.JSON(http.StatusOK, Dictionary{
"data": "ok",
})
}
func init() {
viper.SetDefault("listeningport", 4000)
}
func startServer() {
m := macaron.Classic()
m.Use(pongo2.Pongoer())
m.Use(macaron.Static("static"))
// m.Get("/", myHandler)
m.Get("/", statusPage)
m.Get("/lan", lanPage)
m.Get("/mqtt", mqttPage)
m.Post("/mqtt", binding.Bind(MQTTPostForm{}), mqttPost)
m.Get("/ups", upsPage)
m.Post("/ups", binding.Bind(UPSPostForm{}), upsPost)
m.Get("/syslog", syslogPage)
m.Get("/backup", backupPage)
m.Get("/json/status", jsonStatus)
m.Post("/json/outlet/:id/toggle", jsonOutletToggle)
m.Get("/boards", func(ctx *macaron.Context) {
ctx.HTML(200, "boards") // 200 is the response code.
})
logInfo("hostname: " + viper.GetString("hostname"))
logInfo("Web interface ready")
http.ListenAndServe("0.0.0.0:"+viper.GetString("listeningport"), m)
}