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