108 lines
2.5 KiB
Go
Executable File
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
|
|
}
|