wink_scheduler 0.0.4 → 0.0.5
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.
- 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
|