arlo-cleaner/config/config.go

108 lines
2.5 KiB
Go
Executable File

package config
import (
"context"
"fmt"
"local/args"
"local/logb"
"os"
"strings"
"sync"
"time"
"github.com/rclone/rclone/fs/config"
)
var (
refresh = &sync.Mutex{}
ArloUser string
ArloPass string
ArloCapacity int64
ArloBPS int64
RCloneConfig string
RCloneName string
MonitorInterval time.Duration
DryRun bool
ArchiveLength time.Duration
)
func dump() {
logb.Infof(`CONFIG:
ArloUser %v
ArloPass %v
ArloCapacity %v
ArloBPS %v
RCloneConfig %v
RCloneName %v
MonitorInterval %v
DryRun %v
ArchiveLength %v
`,
ArloUser,
ArloPass,
ArloCapacity,
ArloBPS,
RCloneConfig,
RCloneName,
MonitorInterval,
DryRun,
ArchiveLength,
)
}
func init() {
if err := Refresh(); err != nil {
panic(err)
}
}
func Refresh() error {
defer dump()
if strings.Contains(fmt.Sprint(os.Args), "-test") {
return nil
}
refresh.Lock()
defer refresh.Unlock()
configFiles := []string{}
as := args.NewArgSet()
as.Append(args.STRING, "c", "path to config", "")
as.Parse()
if c := as.Get("c").GetString(); c != "" {
configFiles = []string{c}
}
as = args.NewArgSet(configFiles...)
as.Append(args.STRING, "c", "path to config", "")
as.Append(args.STRING, "arlouser", "username for arlo.com", "squeaky2x3@gmail.com")
as.Append(args.STRING, "arlopass", "password for arlo.com", "LetMe!23In")
as.Append(args.STRING, "rcname", "key:prefix/path for rclone", "drive:/projects/arlo/stash")
as.Append(args.STRING, "rcconf", "path to rclone config", "./rclone.config")
as.Append(args.INT, "arlomb", "arlo MB storage cap before prune", 800)
as.Append(args.INT, "arlobps", "arlo BPS for videos", 70*1000)
as.Append(args.DURATION, "interval", "interval between remote storage checks", time.Hour)
as.Append(args.BOOL, "dry", "dry run reads from remotes only", false)
as.Append(args.DURATION, "archive", "duration to retain videos", time.Hour*24*30)
if err := as.Parse(); err != nil {
return err
}
ArloUser = as.Get("arlouser").GetString()
ArloPass = as.Get("arlopass").GetString()
ArloCapacity = int64(as.Get("arlomb").GetInt()) * 1024 * 1024
ArloBPS = int64(as.Get("arlobps").GetInt())
RCloneName = as.Get("rcname").GetString()
RCloneConfig = as.Get("rcconf").GetString()
os.Setenv("RCLONE_CONFIG", RCloneConfig)
config.SetConfigPath(RCloneConfig)
config.LoadConfig(context.Background())
MonitorInterval = as.Get("interval").GetDuration()
DryRun = as.Get("dry").GetBool()
ArchiveLength = as.Get("archive").GetDuration()
return nil
}