wink_scheduler 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/wink_scheduler +12 -8
- data/lib/wink_scheduler/client.rb +4 -2
- data/lib/wink_scheduler/schedule.rb +32 -4
- data/lib/wink_scheduler/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2ff30735de7c01df6a4f32dcc45e31aea1cf011
|
4
|
+
data.tar.gz: 0c4974a6528f78eaddbec636fa168db779f88dd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 780e6e6635e9869a29398c3445f1a42fb515fb67dd4c3783b126588851f779e53b92883eece3bad0ca0b6a9966dc4df1a72f3276e059c9c3023b0f632af02df2
|
7
|
+
data.tar.gz: e254e9ff147d319d224d1b2e1805a33b34d6022eac26f6e13d0a43cab056ba0eaae40f550fdd4d7ee34e26e4baf127bbe0a267b610ec2211c8f4e9f7c0f693c6
|
data/bin/wink_scheduler
CHANGED
@@ -1,24 +1,28 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'wink_scheduler'
|
4
|
+
require 'logger'
|
4
5
|
|
5
6
|
$stdout.sync = true
|
6
7
|
$stderr.sync = true
|
7
8
|
|
9
|
+
logger = Logger.new(STDOUT)
|
10
|
+
logger.level = Logger::INFO
|
11
|
+
|
8
12
|
if ARGV[0]
|
9
13
|
begin
|
10
14
|
conf = YAML.load_file(ARGV[0])
|
11
|
-
w = WinkScheduler::Client.new(conf)
|
15
|
+
w = WinkScheduler::Client.new(conf, logger)
|
12
16
|
w.run
|
13
|
-
rescue Psych::SyntaxError => e1
|
14
|
-
$stderr.puts "ERROR -- invalid configuration file #{e1.message}"
|
15
|
-
exit 1
|
16
|
-
rescue => e2
|
17
|
-
$stderr.puts "ERROR -- #{e2.message}"
|
18
|
-
exit 1
|
19
17
|
rescue SystemExit, Interrupt
|
20
18
|
exit 1
|
19
|
+
rescue Psych::SyntaxError => e1
|
20
|
+
logger.fatal "Invalid configuration file #{e1.message}"
|
21
|
+
exit 2
|
22
|
+
rescue => e2
|
23
|
+
logger.fatal e2.message
|
24
|
+
exit 3
|
21
25
|
end
|
22
26
|
else
|
23
|
-
|
27
|
+
logger.fatal "Configuration file must be provided."
|
24
28
|
end
|
@@ -3,9 +3,10 @@ require 'wink_scheduler/schedule'
|
|
3
3
|
|
4
4
|
module WinkScheduler
|
5
5
|
class Client
|
6
|
-
def initialize(conf)
|
6
|
+
def initialize(conf, logger)
|
7
7
|
@auth = conf["auth"]
|
8
8
|
@schedules = conf["schedules"]
|
9
|
+
@logger = logger
|
9
10
|
|
10
11
|
Winker.configure do |wink|
|
11
12
|
wink.client_id = @auth["client_id"]
|
@@ -25,9 +26,10 @@ module WinkScheduler
|
|
25
26
|
threads = []
|
26
27
|
devices = Winker.devices
|
27
28
|
groups = Winker.groups
|
29
|
+
context = { :devices => devices, :groups => groups, :logger => @logger }
|
28
30
|
@schedules.each do |s|
|
29
31
|
threads << Thread.new do
|
30
|
-
w = WinkScheduler::Schedule.new(
|
32
|
+
w = WinkScheduler::Schedule.new(context, s)
|
31
33
|
w.run
|
32
34
|
end
|
33
35
|
end
|
@@ -7,8 +7,13 @@ require 'rufus-scheduler'
|
|
7
7
|
|
8
8
|
module WinkScheduler
|
9
9
|
class Schedule
|
10
|
-
def initialize(
|
10
|
+
def initialize(context, opts)
|
11
11
|
@scheduler = Rufus::Scheduler.new
|
12
|
+
|
13
|
+
@logger = context[:logger]
|
14
|
+
devices = context[:devices]
|
15
|
+
groups = context[:groups]
|
16
|
+
|
12
17
|
if opts["device"]
|
13
18
|
@object = devices.select { |d| next if d == nil; d.name == opts["device"] }[0]
|
14
19
|
raise "device \"#{opts["device"]}\" not found" unless @object
|
@@ -34,6 +39,25 @@ module WinkScheduler
|
|
34
39
|
raise "Schedule must define 'method' option"
|
35
40
|
end
|
36
41
|
|
42
|
+
if opts["method_args"]
|
43
|
+
arity = @object.method(@method).arity
|
44
|
+
if arity == 0
|
45
|
+
raise "#{@method} does not take arguments. 'method_args' must be nil"
|
46
|
+
elsif arity > 0
|
47
|
+
if opts["method_args"].length == arity
|
48
|
+
@method_args = opts["method_args"]
|
49
|
+
else
|
50
|
+
raise "#{@method} requires #{arity} argument(s). Invalid 'method_args' option"
|
51
|
+
end
|
52
|
+
elsif arity < 0
|
53
|
+
if opts["method_args"].length >= arity.abs
|
54
|
+
@method_args = opts["method_args"]
|
55
|
+
else
|
56
|
+
raise "#{@method} requires at least #{arity} argument(s). Invalid 'method_args' option"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
37
61
|
if opts["time"]
|
38
62
|
@time = opts["time"]
|
39
63
|
else
|
@@ -87,12 +111,16 @@ module WinkScheduler
|
|
87
111
|
|
88
112
|
def execute
|
89
113
|
next_time = get_next_time
|
90
|
-
|
114
|
+
@logger.info "Scheduled \"#{@method}#{"(" + @method_args.join(",") + ")" if @method_args}\" on #{@type} \"#{@object.name}\" at #{next_time}."
|
91
115
|
@scheduler.at next_time do
|
92
|
-
@
|
116
|
+
if @method_args
|
117
|
+
@object.send(@method, *@method_args)
|
118
|
+
else
|
119
|
+
@object.send(@method)
|
120
|
+
end
|
93
121
|
end
|
94
122
|
@scheduler.join
|
95
|
-
|
123
|
+
@logger.info "Executed \"#{@method}\" on #{@type} \"#{@object.name}\"."
|
96
124
|
end
|
97
125
|
|
98
126
|
def get_next_time
|