lsync 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/lsync.rb +7 -0
- data/lib/lsync/controller.rb +62 -0
- data/lib/lsync/event_timer.rb +1 -1
- data/lib/lsync/script.rb +36 -76
- data/lib/lsync/version.rb +2 -2
- metadata +4 -3
data/lib/lsync.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
|
2
|
+
module LSync
|
3
|
+
class BasicController
|
4
|
+
def initialize(script, logger)
|
5
|
+
@script = script
|
6
|
+
@logger = logger
|
7
|
+
end
|
8
|
+
|
9
|
+
# The containing script.
|
10
|
+
attr :script
|
11
|
+
|
12
|
+
# The output logger.
|
13
|
+
attr :logger
|
14
|
+
end
|
15
|
+
|
16
|
+
# The server controller provides event handlers with a unified interface
|
17
|
+
# for dealing with servers and associated actions.
|
18
|
+
class ServerController < BasicController
|
19
|
+
def initialize(script, logger, server)
|
20
|
+
super(script, logger)
|
21
|
+
|
22
|
+
@server = server
|
23
|
+
end
|
24
|
+
|
25
|
+
# The current server.
|
26
|
+
attr :server
|
27
|
+
|
28
|
+
# Run a given shell script on the server.
|
29
|
+
def run!(*function)
|
30
|
+
action = Action.new(function)
|
31
|
+
action.run_on_server(@server, @logger)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class CopyController < BasicController
|
36
|
+
def initialize(script, logger, master, target)
|
37
|
+
super(script, logger)
|
38
|
+
|
39
|
+
@master = ServerController.new(script, logger, master)
|
40
|
+
@target = ServerController.new(script, logger, target)
|
41
|
+
end
|
42
|
+
|
43
|
+
# The master server controller (where the data is being copied from).
|
44
|
+
attr :master
|
45
|
+
|
46
|
+
# The target server controller (where the data is being copied to).
|
47
|
+
attr :target
|
48
|
+
end
|
49
|
+
|
50
|
+
# The directory controller provides event handlers with a unified interface
|
51
|
+
# for dealing with a particular backup in a particular directory.
|
52
|
+
class DirectoryController < CopyController
|
53
|
+
def initialize(script, logger, master, target, directory)
|
54
|
+
super(script, logger, master, target)
|
55
|
+
|
56
|
+
@directory = directory
|
57
|
+
end
|
58
|
+
|
59
|
+
# The directory that the data is being copied within.
|
60
|
+
attr :directory
|
61
|
+
end
|
62
|
+
end
|
data/lib/lsync/event_timer.rb
CHANGED
data/lib/lsync/script.rb
CHANGED
@@ -5,71 +5,29 @@ require 'lsync/action'
|
|
5
5
|
require 'lsync/method'
|
6
6
|
require 'lsync/server'
|
7
7
|
require 'lsync/directory'
|
8
|
+
require 'lsync/controller'
|
8
9
|
|
9
10
|
module LSync
|
10
|
-
|
11
|
-
# The server controller provides event handlers with a unified interface
|
12
|
-
# for dealing with servers and associated actions.
|
13
|
-
class ServerController
|
14
|
-
def initialize(script, server, logger)
|
15
|
-
@script = script
|
16
|
-
@server = server
|
17
|
-
@logger = logger
|
18
|
-
end
|
19
|
-
|
20
|
-
# The containing script.
|
21
|
-
attr :script
|
22
|
-
|
23
|
-
# The current server.
|
24
|
-
attr :server
|
25
|
-
|
26
|
-
# The output logger.
|
27
|
-
attr :logger
|
28
|
-
|
29
|
-
# Run a given shell script on the server.
|
30
|
-
def run!(*function)
|
31
|
-
action = Action.new(function)
|
32
|
-
action.run_on_server(@server, @logger)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# The directory controller provides event handlers with a unified interface
|
37
|
-
# for dealing with a particular backup in a particular directory.
|
38
|
-
class DirectoryController < ServerController
|
39
|
-
def initialize(script, master, server, directory, logger)
|
40
|
-
super(script, server, logger)
|
41
|
-
|
42
|
-
@master = master
|
43
|
-
@directory = directory
|
44
|
-
end
|
45
|
-
|
46
|
-
# The master server where data is being copied from.
|
47
|
-
attr :master
|
48
|
-
|
49
|
-
# The directory that the data is being copied within.
|
50
|
-
attr :directory
|
51
|
-
end
|
52
|
-
|
53
11
|
# The main backup/synchronisation mechanism is the backup script. It specifies all
|
54
12
|
# servers and directories, and these are then combined specifically to produce the
|
55
13
|
# desired data replication behaviour.
|
56
14
|
class Script
|
57
15
|
include EventHandler
|
58
|
-
|
16
|
+
|
59
17
|
def initialize(options = {}, &block)
|
60
18
|
@logger = options[:logger] || Logger.new($stdout)
|
61
19
|
@method = nil
|
62
|
-
|
20
|
+
|
63
21
|
@servers = {}
|
64
22
|
@directories = []
|
65
23
|
|
66
24
|
@log = nil
|
67
|
-
|
25
|
+
|
68
26
|
if block_given?
|
69
27
|
instance_eval &block
|
70
28
|
end
|
71
29
|
end
|
72
|
-
|
30
|
+
|
73
31
|
# Given a name, find out which server config matches it
|
74
32
|
def find_named_server name
|
75
33
|
if @servers.key? name
|
@@ -79,19 +37,19 @@ module LSync
|
|
79
37
|
return @servers.values.find { |s| s["host"] == hostname }
|
80
38
|
end
|
81
39
|
end
|
82
|
-
|
40
|
+
|
83
41
|
alias :[] :find_named_server
|
84
|
-
|
42
|
+
|
85
43
|
# Find the master server based on the name #master= specified
|
86
44
|
def find_master_server
|
87
45
|
find_named_server(@master)
|
88
46
|
end
|
89
|
-
|
47
|
+
|
90
48
|
# Find out the config section for the current server
|
91
49
|
def find_current_server
|
92
50
|
master = find_master_server
|
93
51
|
server = nil
|
94
|
-
|
52
|
+
|
95
53
|
# Find out if the master server is local...
|
96
54
|
if master.is_local?
|
97
55
|
server = master
|
@@ -99,59 +57,61 @@ module LSync
|
|
99
57
|
# Find a server config that specifies the local host
|
100
58
|
server = @servers.values.find { |s| s.is_local? }
|
101
59
|
end
|
102
|
-
|
60
|
+
|
103
61
|
return server
|
104
62
|
end
|
105
|
-
|
63
|
+
|
106
64
|
# Register a server with the backup script.
|
107
|
-
def server(name
|
65
|
+
def server(name)
|
108
66
|
case name
|
109
67
|
when Symbol
|
110
68
|
host = "localhost"
|
111
69
|
else
|
112
70
|
host = name.to_s
|
113
71
|
end
|
114
|
-
|
72
|
+
|
115
73
|
server = Server.new(host)
|
116
|
-
|
74
|
+
|
117
75
|
yield server if block_given?
|
118
|
-
|
76
|
+
|
119
77
|
@servers[name] = server
|
120
78
|
end
|
121
|
-
|
79
|
+
|
122
80
|
# Backup a particular path (or paths).
|
123
|
-
def
|
81
|
+
def copy(*paths)
|
124
82
|
paths.each do |path|
|
125
83
|
directory = Directory.new(path)
|
126
|
-
|
84
|
+
|
127
85
|
yield directory if block_given?
|
128
|
-
|
86
|
+
|
129
87
|
@directories << directory
|
130
88
|
end
|
131
89
|
end
|
132
90
|
|
91
|
+
alias :backup :copy
|
92
|
+
|
133
93
|
# The script logger which will be provided all events when the script is run.
|
134
94
|
attr :logger, true
|
135
|
-
|
95
|
+
|
136
96
|
# The master server name (e.g. symbolic or host name)
|
137
97
|
attr :master, true
|
138
|
-
|
98
|
+
|
139
99
|
# A specific method which will perform the backup (e.g. an isntance of LSync::Method)
|
140
100
|
attr :method, true
|
141
|
-
|
101
|
+
|
142
102
|
# All servers which are participating in the backup process.
|
143
103
|
attr :servers
|
144
|
-
|
104
|
+
|
145
105
|
# All directories which may be synchronised.
|
146
106
|
attr :directories
|
147
|
-
|
107
|
+
|
148
108
|
# Log data (an +IO+) specific to the current script.
|
149
109
|
attr :log
|
150
|
-
|
110
|
+
|
151
111
|
# Run the backup process for all servers and directories specified.
|
152
112
|
def run!
|
153
113
|
start_time = Time.now
|
154
|
-
|
114
|
+
|
155
115
|
# We buffer the log data so that if there is an error it is available to the notification sub-system
|
156
116
|
@log = StringIO.new
|
157
117
|
local_logger = Logger.new(@log)
|
@@ -173,24 +133,24 @@ module LSync
|
|
173
133
|
logger.info "Master server is #{@master}..."
|
174
134
|
end
|
175
135
|
|
176
|
-
master_controller = ServerController.new(self,
|
136
|
+
master_controller = ServerController.new(self, logger, master)
|
177
137
|
|
178
138
|
self.try do
|
179
139
|
method.try do
|
180
140
|
master.try(master_controller) do
|
181
141
|
logger.info "Running backups for server #{current}..."
|
182
|
-
|
142
|
+
|
183
143
|
run_backups!(master, current, logger)
|
184
144
|
end
|
185
145
|
end
|
186
146
|
end
|
187
|
-
|
147
|
+
|
188
148
|
end_time = Time.now
|
189
149
|
logger.info "Backup Completed (#{end_time - start_time}s)."
|
190
150
|
end
|
191
|
-
|
151
|
+
|
192
152
|
protected
|
193
|
-
|
153
|
+
|
194
154
|
# This function runs the method for each directory and server combination specified.
|
195
155
|
def run_backups!(master, current, logger)
|
196
156
|
@servers.each do |name, server|
|
@@ -203,15 +163,15 @@ module LSync
|
|
203
163
|
next
|
204
164
|
end
|
205
165
|
|
206
|
-
server_controller =
|
166
|
+
server_controller = CopyController.new(self, logger, master, server)
|
207
167
|
|
208
168
|
server.try(server_controller) do
|
209
169
|
@directories.each do |directory|
|
210
|
-
directory_controller = DirectoryController.new(self, master, server, directory
|
170
|
+
directory_controller = DirectoryController.new(self, logger, master, server, directory)
|
211
171
|
|
212
172
|
directory.try(directory_controller) do
|
213
173
|
logger.info "\t" + ("Processing " + directory.to_s).rjust(20) + " : #{server}"
|
214
|
-
|
174
|
+
|
215
175
|
method.run(master, server, directory)
|
216
176
|
end
|
217
177
|
end
|
data/lib/lsync/version.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 2
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 2.0.2
|
9
|
+
version: 2.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Samuel Williams
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-07-
|
17
|
+
date: 2011-07-26 00:00:00 +12:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- lib/lsync/actions/generic/rotate
|
62
62
|
- lib/lsync/actions/linux/disk
|
63
63
|
- lib/lsync/actions/linux/terminal
|
64
|
+
- lib/lsync/controller.rb
|
64
65
|
- lib/lsync/directory.rb
|
65
66
|
- lib/lsync/error.rb
|
66
67
|
- lib/lsync/event_handler.rb
|