mirror of
https://github.com/Luzifer/duplicity-backup.git
synced 2024-12-20 18:41:21 +00:00
Send notifications only on some commands
Also fixed some linter errors
This commit is contained in:
parent
a227b52dd4
commit
6c841d29f4
4 changed files with 58 additions and 33 deletions
5
Godeps/Godeps.json
generated
5
Godeps/Godeps.json
generated
|
@ -3,6 +3,11 @@
|
||||||
"GoVersion": "go1.6",
|
"GoVersion": "go1.6",
|
||||||
"GodepVersion": "v62",
|
"GodepVersion": "v62",
|
||||||
"Deps": [
|
"Deps": [
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/Luzifer/go_helpers/str",
|
||||||
|
"Comment": "v1.3.0",
|
||||||
|
"Rev": "6abbbafaada02b63dd8f9e185921fd8b3c35b6c2"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Luzifer/go_helpers/which",
|
"ImportPath": "github.com/Luzifer/go_helpers/which",
|
||||||
"Comment": "v1.3.0",
|
"Comment": "v1.3.0",
|
||||||
|
|
|
@ -12,6 +12,23 @@ import (
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
commandBackup = "backup"
|
||||||
|
commandCleanup = "cleanup"
|
||||||
|
commandList = "list-current-files"
|
||||||
|
commandRestore = "restore"
|
||||||
|
commandStatus = "status"
|
||||||
|
commandVerify = "verify"
|
||||||
|
commandRemove = "__remove_old"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
notifyCommands = []string{
|
||||||
|
commandBackup,
|
||||||
|
commandRemove,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
type configFile struct {
|
type configFile struct {
|
||||||
RootPath string `yaml:"root" valid:"required"`
|
RootPath string `yaml:"root" valid:"required"`
|
||||||
Hostname string `yaml:"hostname"`
|
Hostname string `yaml:"hostname"`
|
||||||
|
@ -128,18 +145,18 @@ func (c *configFile) GenerateCommand(argv []string, time string) (commandLine []
|
||||||
)
|
)
|
||||||
|
|
||||||
switch command {
|
switch command {
|
||||||
case "backup":
|
case commandBackup:
|
||||||
option = ""
|
option = ""
|
||||||
root = c.RootPath
|
root = c.RootPath
|
||||||
dest = c.Destination
|
dest = c.Destination
|
||||||
commandLine, env, err = c.generateFullCommand(option, time, root, dest, addTime, "")
|
commandLine, env, err = c.generateFullCommand(option, time, root, dest, addTime, "")
|
||||||
case "cleanup":
|
case commandCleanup:
|
||||||
option = command
|
option = command
|
||||||
commandLine, env, err = c.generateLiteCommand(option, time, addTime)
|
commandLine, env, err = c.generateLiteCommand(option, time, addTime)
|
||||||
case "list-current-files":
|
case commandList:
|
||||||
option = command
|
option = command
|
||||||
commandLine, env, err = c.generateLiteCommand(option, time, addTime)
|
commandLine, env, err = c.generateLiteCommand(option, time, addTime)
|
||||||
case "restore":
|
case commandRestore:
|
||||||
addTime = true
|
addTime = true
|
||||||
option = command
|
option = command
|
||||||
root = c.Destination
|
root = c.Destination
|
||||||
|
@ -156,15 +173,15 @@ func (c *configFile) GenerateCommand(argv []string, time string) (commandLine []
|
||||||
}
|
}
|
||||||
|
|
||||||
commandLine, env, err = c.generateFullCommand(option, time, root, dest, addTime, restoreFile)
|
commandLine, env, err = c.generateFullCommand(option, time, root, dest, addTime, restoreFile)
|
||||||
case "status":
|
case commandStatus:
|
||||||
option = "collection-status"
|
option = "collection-status"
|
||||||
commandLine, env, err = c.generateLiteCommand(option, time, addTime)
|
commandLine, env, err = c.generateLiteCommand(option, time, addTime)
|
||||||
case "verify":
|
case commandVerify:
|
||||||
option = command
|
option = command
|
||||||
root = c.Destination
|
root = c.Destination
|
||||||
dest = c.RootPath
|
dest = c.RootPath
|
||||||
commandLine, env, err = c.generateFullCommand(option, time, root, dest, addTime, "")
|
commandLine, env, err = c.generateFullCommand(option, time, root, dest, addTime, "")
|
||||||
case "__remove_old":
|
case commandRemove:
|
||||||
commandLine, env, err = c.generateRemoveCommand()
|
commandLine, env, err = c.generateRemoveCommand()
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("Did not understand command '%s', please see 'help' for details what to do.", command)
|
err = fmt.Errorf("Did not understand command '%s', please see 'help' for details what to do.", command)
|
||||||
|
|
23
main.go
23
main.go
|
@ -114,29 +114,18 @@ func main() {
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
|
|
||||||
if err := execute(config, argv[1:]); err != nil {
|
if err := execute(config, argv[1:]); err != nil {
|
||||||
if err := config.Notify(false, fmt.Errorf("Could not create backup: %s", err)); err != nil {
|
|
||||||
logf("[ERR] Error sending notifications: %s", err)
|
|
||||||
} else {
|
|
||||||
logf("[INF] Notifications sent")
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.Cleanup.Type != "none" {
|
if config.Cleanup.Type != "none" {
|
||||||
logf("++++ Starting removal of old backups")
|
logf("++++ Starting removal of old backups")
|
||||||
|
|
||||||
if err := execute(config, []string{"__remove_old"}); err != nil {
|
if err := execute(config, []string{commandRemove}); err != nil {
|
||||||
if err := config.Notify(false, fmt.Errorf("Could not cleanup backup: %s", err)); err != nil {
|
|
||||||
logf("[ERR] Error sending notifications: %s", err)
|
|
||||||
} else {
|
|
||||||
logf("[INF] Notifications sent")
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := config.Notify(true, nil); err != nil {
|
if err := config.Notify(argv[1], true, nil); err != nil {
|
||||||
logf("[ERR] Error sending notifications: %s", err)
|
logf("[ERR] Error sending notifications: %s", err)
|
||||||
} else {
|
} else {
|
||||||
logf("[INF] Notifications sent")
|
logf("[INF] Notifications sent")
|
||||||
|
@ -186,6 +175,14 @@ func execute(config *configFile, argv []string) error {
|
||||||
logf("[INF] Execution of duplicity command was successful.")
|
logf("[INF] Execution of duplicity command was successful.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if nErr := config.Notify(argv[0], false, fmt.Errorf("Could not create backup: %s", err)); nErr != nil {
|
||||||
|
logf("[ERR] Error sending notifications: %s", nErr)
|
||||||
|
} else {
|
||||||
|
logf("[INF] Notifications sent")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,15 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Luzifer/go_helpers/str"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *configFile) Notify(success bool, err error) error {
|
func (c *configFile) Notify(command string, success bool, err error) error {
|
||||||
|
if !str.StringInSlice(command, notifyCommands) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
errs := []error{}
|
errs := []error{}
|
||||||
|
|
||||||
for _, n := range []func(bool, error) error{
|
for _, n := range []func(bool, error) error{
|
||||||
|
@ -21,17 +27,17 @@ func (c *configFile) Notify(success bool, err error) error {
|
||||||
|
|
||||||
if len(errs) == 0 {
|
if len(errs) == 0 {
|
||||||
return nil
|
return nil
|
||||||
} else {
|
|
||||||
estr := ""
|
|
||||||
for _, e := range errs {
|
|
||||||
if e == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
estr = fmt.Sprintf("%s\n- %s", estr, e)
|
|
||||||
}
|
|
||||||
return fmt.Errorf("%d notifiers failed:%s", len(errs), estr)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
estr := ""
|
||||||
|
for _, e := range errs {
|
||||||
|
if e == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
estr = fmt.Sprintf("%s\n- %s", estr, e)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("%d notifiers failed:%s", len(errs), estr)
|
||||||
}
|
}
|
||||||
|
|
||||||
type mondashResult struct {
|
type mondashResult struct {
|
||||||
|
@ -64,7 +70,7 @@ func (c *configFile) notifyMonDash(success bool, err error) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := bytes.NewBuffer([]byte{})
|
buf := bytes.NewBuffer([]byte{})
|
||||||
if err := json.NewEncoder(buf).Encode(monitoringResult); err != nil {
|
if err = json.NewEncoder(buf).Encode(monitoringResult); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +120,7 @@ func (c *configFile) notifySlack(success bool, err error) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := bytes.NewBuffer([]byte{})
|
buf := bytes.NewBuffer([]byte{})
|
||||||
if err := json.NewEncoder(buf).Encode(sr); err != nil {
|
if err = json.NewEncoder(buf).Encode(sr); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue