ocular 0.1.7 → 0.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 33d5f708edcb7dd43619b5222bfa86e5897d84ef
4
- data.tar.gz: 9dcd6fd9dba29ebebc23c0ea227d12cf73b64da0
3
+ metadata.gz: f9744f295fb350d3864ab65a80a3506281f776f3
4
+ data.tar.gz: 453713667fc0c6c7eec8b359dbab2b49d4523b25
5
5
  SHA512:
6
- metadata.gz: 3c2c902cde308bab0ce9885c4d64f665b9a10c296f3ac52ebe3fd53c3ef05e924762ad3ee088c9ccdfa1f2c6f896facc3524ebb836c3fb1ae036009236d68b17
7
- data.tar.gz: a2b3a5f4a76be86332520655793958c81f996513be1fb2cc2a84f26c3a3c235a0e01ac4fd700af3ff3727f0801d88f66ae85184bb6879fc92bc1d944a8c0b8b8
6
+ metadata.gz: c4efd125317945bc07ae03513116e087884895988bfa2d2d92f61326aa9da7d2d9f1d0418b18f005c6c25f5e779c0bd6ebda18c0281b86c5e9ea8a17518bfcbe
7
+ data.tar.gz: 456e9158a506e24382c8a1fa03c6d17ab87ea2fa2b0a8afe11689c7170ab9b267724dff8a1b823506d89d08f3d6c9b6a0c10b07b4e601aa3dd8a0d453ea91210
data/bin/ocular CHANGED
@@ -114,13 +114,18 @@ else
114
114
  if ARGV.length == 0
115
115
  puts "Missing script file to run, starting ocular interactive shell. use \"ocular -h\" to get full options"
116
116
  puts ""
117
- longest_name = $dsl_help.keys.max_by(&:length).length
117
+ longest_name = [$dsl_help.keys.max_by(&:length).length, $dsl_event_help.keys.max_by(&:length).length].max
118
118
  $dsl_help.each do |cmd, help|
119
119
  spacing = " "*(longest_name.to_i+1-cmd.length)
120
120
  puts " #{cmd}#{spacing}#{help}"
121
121
  end
122
122
  puts ""
123
-
123
+ puts "Event triggering functions:"
124
+ $dsl_event_help.each do |cmd, help|
125
+ spacing = " "*(longest_name.to_i+1-cmd.length)
126
+ puts " #{cmd}#{spacing}#{help}"
127
+ end
128
+ puts ""
124
129
  ARGV.clear
125
130
  require 'irb'
126
131
  IRB.setup nil
@@ -144,7 +149,9 @@ else
144
149
  IRB.conf[:SAVE_HISTORY] = 1000
145
150
  IRB.conf[:HISTORY_FILE] = '~/.ocular_history'
146
151
 
147
- context = Ocular::DSL::RunContext.new
152
+ ef = Ocular::Event::EventFactory.new
153
+
154
+ context = Ocular::DSL::REPLRunContext.new(ef.handlers)
148
155
 
149
156
  irb = IRB::Irb.new(IRB::WorkSpace.new(context))
150
157
  IRB.conf[:MAIN_CONTEXT] = irb.context
@@ -5,6 +5,12 @@ def add_help(name, help)
5
5
  $dsl_help[name] = help
6
6
  end
7
7
 
8
+ $dsl_event_help = {}
9
+
10
+ def add_event_help(name, help)
11
+ $dsl_event_help[name] = help
12
+ end
13
+
8
14
 
9
15
  require 'ocular/dsl/etcd.rb'
10
16
  require 'ocular/dsl/fog.rb'
@@ -12,13 +12,18 @@ class Ocular
12
12
  @etcd = etcd
13
13
  end
14
14
 
15
- add_help "orbit::get_service_endpoints(service_name)", "Returns an array of ips running service_name"
15
+ add_help "orbit.get_service_endpoints(service_name)", "Returns an array of ips running service_name"
16
16
  def get_service_endpoints(service_name)
17
17
  orbit_endpoints = []
18
- endpoints = @etcd.get("/orbit/services/#{service_name}/endpoints").node.children
19
- endpoints.each do |node|
20
- ip = node.key.match(/.*endpoints.(.+?):.+/).captures[0]
21
- orbit_endpoints << ip
18
+ begin
19
+ endpoints = @etcd.get("/orbit/services/#{service_name}/endpoints").node.children
20
+ pp endpoints
21
+ endpoints.each do |node|
22
+ ip = node.key.match(/.*endpoints.(.+?):.+/).captures[0]
23
+ orbit_endpoints << ip
24
+ end
25
+ rescue ::Etcd::KeyNotFound
26
+ return []
22
27
  end
23
28
 
24
29
  return orbit_endpoints
@@ -1,5 +1,6 @@
1
1
 
2
2
  require 'securerandom'
3
+ require 'ocular/inputs/cron_input'
3
4
 
4
5
  class Ocular
5
6
  module DSL
@@ -15,6 +16,8 @@ class Ocular
15
16
  include Ocular::DSL::Etcd
16
17
  include Ocular::DSL::Orbit
17
18
 
19
+ include Ocular::Inputs::Cron::DSL
20
+
18
21
  def initialize
19
22
  @run_id = SecureRandom.uuid()
20
23
  @logger = Ocular::DSL::Logger.new
@@ -25,7 +28,7 @@ class Ocular
25
28
  if self.proxy
26
29
  self.proxy.send(method_sym, *arguments, &block)
27
30
  else
28
- raise NoMethodError("undefined method `#{method_sym}` in event #{self.class_name}")
31
+ raise NoMethodError, "undefined method `#{method_sym}` in event #{self.class_name}"
29
32
  end
30
33
  end
31
34
 
@@ -39,5 +42,18 @@ class Ocular
39
42
  end
40
43
  end
41
44
  end
45
+
46
+ class REPLRunContext < RunContext
47
+ attr_reader :handlers
48
+ attr_reader :events
49
+ attr_reader :do_fork
50
+
51
+ def initialize(handlers)
52
+ super()
53
+ @events = {}
54
+ @handlers = handlers
55
+ @do_fork = false
56
+ end
57
+ end
42
58
  end
43
59
  end
@@ -1,6 +1,7 @@
1
1
  require 'ocular/inputs/handlers.rb'
2
2
  require 'ocular/event/eventbase.rb'
3
3
  require 'ocular/inputs/http_input.rb'
4
+ require 'ocular/inputs/cron_input.rb'
4
5
 
5
6
  class Ocular
6
7
  module Event
@@ -24,6 +25,7 @@ class Ocular
24
25
  include Ocular::DSL::Etcd
25
26
 
26
27
  include Ocular::Inputs::HTTP::DSL
28
+ include Ocular::Inputs::Cron::DSL
27
29
 
28
30
  def fork(value)
29
31
  @do_fork = value
@@ -0,0 +1,111 @@
1
+
2
+ require 'ocular/inputs/base.rb'
3
+ require 'ocular/dsl/dsl.rb'
4
+ require 'ocular/dsl/runcontext.rb'
5
+ require 'rufus/scheduler'
6
+
7
+ class Ocular
8
+ module Inputs
9
+
10
+ module Cron
11
+
12
+ module DSL
13
+
14
+ add_event_help "cron.in(rule)", "Schedule event to be executed in 'rule'. eg: '1m'"
15
+ add_event_help "cron.at(rule)", "Schedule event to be executed at 'rule'. eg: '2030/12/12 23:30:00'"
16
+ add_event_help "cron.every(rule)", "Schedule event to be executed every 'rule'. eg: '15m'"
17
+ add_event_help "cron.cron(rule)", "Schedule event with cron syntax. eg: '5 0 * * *'"
18
+ def cron()
19
+ handler = handlers.get(::Ocular::Inputs::Cron::Input)
20
+ return Input::DSLProxy.new(self, handler)
21
+ end
22
+
23
+ end
24
+
25
+ class Input < ::Ocular::Inputs::Base
26
+
27
+ attr_reader :routes
28
+ attr_reader :scheduler
29
+
30
+ def initialize(settings_factory)
31
+ settings = settings_factory[:http]
32
+
33
+ @scheduler = ::Rufus::Scheduler.new
34
+
35
+ end
36
+
37
+ def start()
38
+
39
+ end
40
+
41
+ def stop()
42
+ @scheduler.shutdown
43
+ end
44
+
45
+ class DSLProxy
46
+ def initialize(proxy, handler)
47
+ @proxy = proxy
48
+ @handler = handler
49
+ end
50
+
51
+ def in(rule, &block)
52
+ eventbase = Ocular::DSL::EventBase.new(&block)
53
+ eventbase.proxy = @proxy
54
+
55
+ id = @handler.scheduler.in(rule) do
56
+ context = ::Ocular::DSL::RunContext.new
57
+ eventbase.exec(context)
58
+ end
59
+
60
+ @proxy.events[id] = eventbase
61
+
62
+ return id
63
+ end
64
+
65
+ def at(rule, &block)
66
+ eventbase = Ocular::DSL::EventBase.new(&block)
67
+ eventbase.proxy = @proxy
68
+
69
+ id = @handler.scheduler.at(rule) do
70
+ context = ::Ocular::DSL::RunContext.new
71
+ eventbase.exec(context)
72
+ end
73
+
74
+ @proxy.events[id] = eventbase
75
+
76
+ return id
77
+ end
78
+
79
+ def every(rule, &block)
80
+ eventbase = Ocular::DSL::EventBase.new(&block)
81
+ eventbase.proxy = @proxy
82
+
83
+ id = @handler.scheduler.every(rule) do
84
+ context = ::Ocular::DSL::RunContext.new
85
+ eventbase.exec(context)
86
+ end
87
+
88
+ @proxy.events[id] = eventbase
89
+
90
+ return id
91
+ end
92
+
93
+ def cron(rule, &block)
94
+ eventbase = Ocular::DSL::EventBase.new(&block)
95
+ eventbase.proxy = @proxy
96
+
97
+ id = @handler.scheduler.cron(rule) do
98
+ context = ::Ocular::DSL::RunContext.new
99
+ eventbase.exec(context)
100
+ end
101
+
102
+ @proxy.events[id] = eventbase
103
+
104
+ return id
105
+ end
106
+ end
107
+
108
+ end
109
+ end
110
+ end
111
+ end
data/lib/ocular/ocular.rb CHANGED
@@ -4,6 +4,7 @@ require 'ocular/settings'
4
4
  require 'ocular/event/eventbase'
5
5
  require 'ocular/event/eventfactory'
6
6
  require 'ocular/dsl/dsl'
7
+ require 'ocular/inputs/cron_input'
7
8
  require 'ocular/dsl/runcontext'
8
9
  require 'ocular/inputs/handlers'
9
10
  require 'ocular/inputs/base'
@@ -1,3 +1,3 @@
1
1
  class Ocular
2
- Version = "0.1.7"
2
+ Version = "0.1.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocular
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juho Mäkinen
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
110
  version: 0.3.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: rufus-scheduler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 3.2.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 3.2.0
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rspec
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -152,6 +166,7 @@ files:
152
166
  - lib/ocular/event/eventbase.rb
153
167
  - lib/ocular/event/eventfactory.rb
154
168
  - lib/ocular/inputs/base.rb
169
+ - lib/ocular/inputs/cron_input.rb
155
170
  - lib/ocular/inputs/handlers.rb
156
171
  - lib/ocular/inputs/http_input.rb
157
172
  - lib/ocular/mixin/from_file.rb