-
Notifications
You must be signed in to change notification settings - Fork 0
/
rsync.go
135 lines (116 loc) · 3.27 KB
/
rsync.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package events
import (
"github.com/larspensjo/config"
"strings"
"errors"
)
type Rsynccli struct {
Se SyncEntry
Code string
Host string
Port string
Username string
Passwd string
Path string
LocalPath string
File string
LocalFile string
SyncTime string
}
func NewRsynccli(se SyncEntry) *Rsynccli {
conf := se.Conf
supname := se.Supname
cli := &Rsynccli{Se: se}
cnf, err := config.ReadDefault(conf)
if err != nil {
Warning(se, "conf err:", err)
}
//host
if cnf.HasSection(supname) && cnf.HasOption(supname, "host") {
cli.Host, _ = cnf.String(supname, "host")
} else if cnf.HasSection("main") && cnf.HasOption("main", "host") {
cli.Host, _ = cnf.String("main", "host")
} else {
Warning(se, "conf err: missing host")
}
//port
if cnf.HasSection(supname) && cnf.HasOption(supname, "port") {
cli.Port, _ = cnf.String(supname, "port")
} else if cnf.HasSection("main") && cnf.HasOption("main", "port") {
cli.Port, _ = cnf.String("main", "port")
} else {
Warning(se, "conf err: missing port")
}
//username
if cnf.HasSection(supname) && cnf.HasOption(supname, "username") {
cli.Username, _ = cnf.String(supname, "username")
} else {
Warning(se, "conf err: missing username")
}
//passwd
if cnf.HasSection(supname) && cnf.HasOption(supname, "passwd") {
cli.Passwd, _ = cnf.String(supname, "passwd")
} else {
Warning(se, "conf err: missing passwd")
}
//path
if cnf.HasSection(supname) && cnf.HasOption(supname, "path") {
cli.Path, _ = cnf.String(supname, "path")
} else if cnf.HasSection("main") && cnf.HasOption("main", "path") {
cli.Path, _ = cnf.String("main", "path")
} else {
cli.Path = "./"
}
//local-path
if cnf.HasSection(supname) && cnf.HasOption(supname, "local-path") {
cli.LocalPath, _ = cnf.String(supname, "local-path")
} else if cnf.HasSection("main") && cnf.HasOption("main", "local-path") {
cli.LocalPath, _ = cnf.String("main", "local-path")
} else {
cli.LocalPath = "./"
}
cli.LocalPath = strings.TrimRight(cli.LocalPath, "/") + "/"
//file
if cnf.HasSection(supname) && cnf.HasOption(supname, "file") {
cli.File, _ = cnf.String(supname, "file")
cli.File = FormatFileName(cli.File)
} else {
cli.File = ""
}
//local-file
if cnf.HasSection(supname) && cnf.HasOption(supname, "local-file") {
cli.LocalFile, _ = cnf.String(supname, "local-file")
cli.LocalFile = FormatFileName(cli.LocalFile)
} else {
cli.LocalFile = ""
}
//sync-time
if cnf.HasSection(supname) && cnf.HasOption(supname, "sync-time") {
cli.SyncTime, _ = cnf.String(supname, "sync-time")
} else {
cli.SyncTime = ""
}
cli.Code = `rsync -auvzP \
--delete \
--bwlimit=30 \
--port=` + cli.Port + ` \
--password-file=`+cli.Passwd+` \
` + cli.LocalPath + cli.LocalFile + ` \
` + cli.Username + `@` + cli.Host + `:` + cli.Path
return cli
}
func (cli *Rsynccli) Rsync() (rterr error) {
Debug(cli.Se, "Rsync:", cli.Se.Supname)
rterr = nil
defer func(){
if err := recover(); err!=nil {
rterr = errors.New("Recover err")
}
}()
if _, err := Cmd("Rsync", cli.Se, cli.Code, false); err != nil {
Warning(cli.Se, "Rsync err:", err, " CMD:" + cli.Code)
}
//UpdateLastSyncTime
cli.Se.UpdateLastSyncTime()
return
}