server/evdist/dashboard.go

93 lines
2.0 KiB
Go

package main
import (
"fmt"
"log"
"os"
"path"
"strconv"
"strings"
"time"
)
var DashboardDir = "DASHBOARD"
type NextDashboardFile struct {
Id int64 `json:"id"`
Name string `json:"name"`
Screen int `json:"screen"`
Date time.Time `json:"date"`
}
func (ndf *NextDashboardFile) GetId() int64 {
return ndf.Id
}
func (ndf *NextDashboardFile) GetDate() *time.Time {
return &ndf.Date
}
// NewDashboardDistList creates a distList from the given src directory
func NewDashboardDistList(src string) (*distList, error) {
var list []DistEvent
files, err := os.ReadDir(DashboardDir)
if err != nil {
return nil, err
}
for _, file := range files {
if !strings.HasPrefix(file.Name(), "public") || len(file.Name()) < 18 {
continue
}
ts, err := strconv.ParseInt(file.Name()[8:18], 10, 64)
if err == nil {
s, _ := strconv.Atoi(file.Name()[6:7])
list = append(list, &NextDashboardFile{
Id: ts * int64(s),
Name: file.Name(),
Screen: s,
Date: time.Unix(ts, 0),
})
}
}
return &distList{List: list, Timer: time.NewTimer(time.Minute)}, nil
}
func parseDashboardFilename(fname string) (int64, error) {
return strconv.ParseInt(fname[8:18], 10, 64)
}
func newDashboardFile(l *distList, raw_path string) {
bpath := path.Base(raw_path)
if !strings.HasPrefix(bpath, "public") || len(bpath) < 18 {
return
}
if ts, err := parseSettingsFilename(bpath); err == nil {
activateTime := time.Unix(ts, 0)
log.Printf("Preparing %s: activation time at %s", bpath, activateTime)
s, _ := strconv.Atoi(bpath[6:7])
l.AddEvent(&NextDashboardFile{
Id: ts * int64(s),
Name: bpath,
Screen: s,
Date: activateTime,
}, nil)
} else {
log.Println("WARNING: Unknown file to treat: not a valid timestamp:", err.Error())
}
}
func treatDashboardFile(e *NextDashboardFile) {
err := os.Rename(path.Join(DashboardDir, e.Name), path.Join(DashboardDir, fmt.Sprintf("public%d.json", e.Screen)))
if err != nil {
log.Printf("Unable to move %q: %s", e.Name, err.Error())
}
}