Example config, with not the correct schema and some fixes

This commit is contained in:
Marcel Otte 2021-12-15 20:56:31 +01:00
parent 716a3c9d4a
commit d91e1abc58
2 changed files with 59 additions and 25 deletions

31
backive.yml Normal file
View File

@ -0,0 +1,31 @@
devices:
scanner-usbstick:
uuid: 72A9-D8C5
mountname: scanner_usbstick
owner: qwc
server-backups:
uuid: d220b335-ded9-48f5-bc03-800a3f953c34
mountname: server_backups
owner: qwc
backups:
scanner_usbstick_test:
user: qwc
target_device: scanner-usbstick
frequency: 0
script: |
#! /usr/bin/env bash
#
set -x
ls -la ${BACKIVE_MOUNT}/${BACKIVE_TO}
echo "This is a test..."
echo "mount/to ${BACKIVE_MOUNT}/${BACKIVE_TO}"
mkdir -pv ${BACKIVE_MOUNT}/${BACKIVE_TO}
cp -Rv ${BACKIVE_FROM}/* ${BACKIVE_MOUNT}/${BACKIVE_TO}/
ls -la ${BACKIVE_MOUNT}/${BACKIVE_TO}
ls -la ${BACKIVE_MOUNT}
from: /home/qwc/web/worktime
to: worktime
preferences:
mount_root: /mnt/backups

View File

@ -46,7 +46,7 @@ type Database struct {
}
// SaveDb saves the database
func (d Database) Save() {
func (d *Database) Save() {
jsonstr, merr := json.Marshal(d.data)
if merr != nil {
panic(merr)
@ -59,7 +59,7 @@ func (d Database) Save() {
}
// LoadDb loads the database
func (d Database) Load() {
func (d *Database) Load() {
if _, err := os.Stat(d.path); err == nil {
data, rferr := os.ReadFile(d.path)
if rferr != nil {
@ -81,18 +81,18 @@ type Device struct {
}
// Mount will mount a device
func (d Device) Mount() {
func (d *Device) Mount() {
d.isMounted = true
}
// Unmount will unmount a device
func (d Device) Unmount() {
func (d *Device) Unmount() {
d.isMounted = false
}
func (d Device) IsMounted() bool {
func (d *Device) IsMounted() bool {
return d.isMounted
}
@ -112,7 +112,7 @@ type Configuration struct {
Settings Settings `mapstructure:"settings"`
Devices Devices `mapstructure:"devices"`
Backups Backups `mapstructure:"backups"`
vconfig viper.Viper
vconfig *viper.Viper
}
// Settings struct holds the global configuration items
@ -129,21 +129,21 @@ type Devices map[string]Device
type Backups map[string]Backup
// CreateViper creates a viper instance for usage later
func (c Configuration) CreateViper() {
func (c *Configuration) CreateViper() {
vconfig := viper.New()
// vconfig.Debug()
vconfig.SetConfigName("backive")
vconfig.SetConfigFile("backive.yml")
//vconfig.SetConfigFile("backive.yaml")
vconfig.SetConfigType("yaml")
vconfig.AddConfigPath("/etc/backive") // system config
vconfig.AddConfigPath("/etc/backive/") // system config
//vconfig.AddConfigPath("$HOME/.backive/")
vconfig.AddConfigPath(".")
c.vconfig = *vconfig
c.vconfig = vconfig
}
// Load loads the configuration from the disk
func (c Configuration) Load() {
func (c *Configuration) Load() {
c.CreateViper()
vc := c.vconfig
if err := vc.ReadInConfig(); err != nil {
@ -174,7 +174,7 @@ type EventHandler struct {
}
// Init initializes the unix socket.
func (eh EventHandler) Init(socketPath string) {
func (eh *EventHandler) Init(socketPath string) {
var err error
eh.ls, err = net.Listen("unix", socketPath)
if err != nil {
@ -184,7 +184,7 @@ func (eh EventHandler) Init(socketPath string) {
}
// Listen starts the event loop.
func (eh EventHandler) Listen() {
func (eh *EventHandler) Listen() {
for {
go func() {
eh.process()
@ -193,12 +193,12 @@ func (eh EventHandler) Listen() {
}
// RegisterCallback adds a function to the list of callback functions for processing of events.
func (eh EventHandler) RegisterCallback(cb func(map[string]string)) {
func (eh *EventHandler) RegisterCallback(cb func(map[string]string)) {
eh.callbacks = append(eh.callbacks, cb)
}
// process processes each and every unix socket event, Unmarshals the json data and calls the list of callbacks.
func (eh EventHandler) process() {
func (eh *EventHandler) process() {
client, err := eh.ls.Accept()
if err != nil {
log.Fatal(err)
@ -227,9 +227,9 @@ func (eh EventHandler) process() {
}
// Run runs the backup script with appropriate rights.
func (b Backup) Run() error {
func (b *Backup) Run() error {
cfg := config
if cfg.Devices[b.Name].IsMounted() {
if dev := cfg.Devices[b.Name]; dev.IsMounted() {
checkExistence := func(path string, name string) error {
if _, err := os.Stat(path); err != nil {
if os.IsNotExist(err) {
@ -269,15 +269,18 @@ type Runs struct {
}
// Load loads the data from the json database
func (r Runs) Load(db Database) {
runerr := json.Unmarshal([]byte(db.data["runs"]), &r.data)
if runerr != nil {
panic(runerr)
func (r *Runs) Load(db Database) {
data := db.data["runs"]
if data != "" {
runerr := json.Unmarshal([]byte(db.data["runs"]), &r.data)
if runerr != nil {
panic(runerr)
}
}
}
// Save saves the data into the json database
func (r Runs) Save(db Database) {
func (r *Runs) Save(db Database) {
str, err := json.Marshal(r.data)
if err != nil {
panic(err)
@ -286,10 +289,10 @@ func (r Runs) Save(db Database) {
}
// ShouldRun Takes a backup key and returns a bool if a backup should run now.
func (b Backup) ShouldRun() bool {
func (b *Backup) ShouldRun() bool {
freq := b.Frequency
// calculate time difference from last run, return true if no run has taken place
lr, ok := runs.LastRun(b)
lr, ok := runs.LastRun(*b)
if ok == nil {
dur := time.Since(lr)
days := dur.Hours() / 24
@ -304,7 +307,7 @@ func (b Backup) ShouldRun() bool {
}
// RegisterRun saves a date of a backup run into the internal storage
func (r Runs) RegisterRun(b Backup) {
func (r *Runs) RegisterRun(b Backup) {
nbl, ok := r.data[b.Name]
if !ok {
nbl.runlist = list.New()
@ -315,7 +318,7 @@ func (r Runs) RegisterRun(b Backup) {
}
// LastRun returns the time.Time of the last run of the backup given.
func (r Runs) LastRun(b Backup) (time.Time, error) {
func (r *Runs) LastRun(b Backup) (time.Time, error) {
_, ok := r.data[b.Name]
if ok {
var t = time.Time(r.data[b.Name].runlist.Front().Value.(time.Time))