generated from VLADIMIR/template
up
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
// Package wifi_service reads the collector's latest snapshot without LAN access.
|
||||
package wifi_service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"evening_detective_server/internal/modules/cudy"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
path string
|
||||
now func() time.Time
|
||||
}
|
||||
|
||||
func New(path string) *Service { return &Service{path: path, now: time.Now} }
|
||||
|
||||
func (s *Service) Get(ctx context.Context) (cudy.Snapshot, bool) {
|
||||
if s == nil || s.path == "" {
|
||||
return cudy.Snapshot{}, false
|
||||
}
|
||||
snapshot := cudy.Snapshot{Enabled: true, HasError: true}
|
||||
if ctx.Err() != nil {
|
||||
return snapshot, true
|
||||
}
|
||||
file, err := os.Open(s.path)
|
||||
if err != nil {
|
||||
return snapshot, true
|
||||
}
|
||||
defer file.Close()
|
||||
data, err := io.ReadAll(io.LimitReader(file, 2<<20+1))
|
||||
if err != nil || len(data) > 2<<20 || json.Unmarshal(data, &snapshot) != nil {
|
||||
return cudy.Snapshot{Enabled: true, HasError: true}, true
|
||||
}
|
||||
if !snapshot.Enabled {
|
||||
return snapshot, false
|
||||
}
|
||||
stale := snapshot.HasError || snapshot.CollectedAt.IsZero() || s.now().Sub(snapshot.CollectedAt) >= 30*time.Second || snapshot.CollectedAt.After(s.now())
|
||||
return snapshot, stale
|
||||
}
|
||||
Reference in New Issue
Block a user