doorkeepr-watcher 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +39 -0
- data/Rakefile +2 -0
- data/bin/console +11 -0
- data/bin/setup +7 -0
- data/doorkeepr-watcher.gemspec +33 -0
- data/exe/doorkeeper-watcher +6 -0
- data/lib/doorkeepr/watcher.rb +8 -0
- data/lib/doorkeepr/watcher/agent.rb +63 -0
- data/lib/doorkeepr/watcher/application.rb +11 -0
- data/lib/doorkeepr/watcher/bouton.rb +22 -0
- data/lib/doorkeepr/watcher/cli.rb +14 -0
- data/lib/doorkeepr/watcher/config.rb +54 -0
- data/lib/doorkeepr/watcher/customer.rb +8 -0
- data/lib/doorkeepr/watcher/doorkeepr.rb +17 -0
- data/lib/doorkeepr/watcher/event.rb +14 -0
- data/lib/doorkeepr/watcher/rest_resource.rb +171 -0
- data/lib/doorkeepr/watcher/service.rb +11 -0
- data/lib/doorkeepr/watcher/version.rb +5 -0
- data/lib/doorkeepr/watcher/zookeeper.rb +14 -0
- metadata +220 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 78d7bf81120533eecae38fc64f67c510168d08e5
|
4
|
+
data.tar.gz: c7cc22bc7375b0864cb0d7b368fa20f2a0804df6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f9f59b16ac1febe9013bea700aa953357c1e5e084d1bafb8c9c681b8533b6a57c59fbc66eeab7040c4a37316e72f2b6b0f6cc5df17614708cc0e04de7b487a3e
|
7
|
+
data.tar.gz: 2a9c06b6e64b88677b74c2b93ca8906de6f5190173b37ce557067382a2bba2e92d99c29812c05f7b87ff77b49ea84d571c4bb9e06478edee8b3565808dc84abe
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Doorkeepr::Watcher
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/doorkeepr/watcher`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'doorkeepr-watcher'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install doorkeepr-watcher
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
1. Fork it ( https://github.com/[my-github-username]/doorkeepr-watcher/fork )
|
36
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
37
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
38
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
39
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "doorkeepr/watcher"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
require "pry"
|
11
|
+
Pry.start
|
data/bin/setup
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'doorkeepr/watcher/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "doorkeepr-watcher"
|
8
|
+
spec.version = Doorkeepr::Watcher::VERSION
|
9
|
+
spec.authors = ["Mathias Kaufmann"]
|
10
|
+
spec.email = ["me@stei.gr"]
|
11
|
+
|
12
|
+
spec.summary = %q{Doorkeepr Watcher Agent}
|
13
|
+
spec.description = %q{Doorkeepr Watcher Agent}
|
14
|
+
spec.homepage = "https://doorkeepr.stei.gr/watcher"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "entrance-watcher"
|
22
|
+
spec.add_dependency "entrance-publisher"
|
23
|
+
spec.add_dependency "resolv-consul"
|
24
|
+
spec.add_dependency "thor"
|
25
|
+
spec.add_dependency "unirest"
|
26
|
+
spec.add_dependency "activesupport"
|
27
|
+
spec.add_dependency "boutons"
|
28
|
+
spec.add_dependency "synapse-easy"
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler", "~> 1.8"
|
31
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
+
spec.add_development_dependency "pry"
|
33
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require "doorkeepr/watcher/version"
|
2
|
+
require "doorkeepr/watcher/config"
|
3
|
+
require "doorkeepr/watcher/agent"
|
4
|
+
require "doorkeepr/watcher/cli"
|
5
|
+
require "doorkeepr/watcher/customer"
|
6
|
+
require "doorkeepr/watcher/application"
|
7
|
+
require "doorkeepr/watcher/service"
|
8
|
+
require "doorkeepr/watcher/event"
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "entrance/publisher"
|
2
|
+
require "entrance/watcher"
|
3
|
+
require "doorkeepr/watcher/config"
|
4
|
+
require "doorkeepr/watcher/customer"
|
5
|
+
require "doorkeepr/watcher/application"
|
6
|
+
require "doorkeepr/watcher/service"
|
7
|
+
require "doorkeepr/watcher/event"
|
8
|
+
|
9
|
+
module Doorkeepr
|
10
|
+
module Watcher
|
11
|
+
class Agent
|
12
|
+
def callback
|
13
|
+
Proc.new do |caller|
|
14
|
+
self.process caller
|
15
|
+
end
|
16
|
+
end
|
17
|
+
def process caller
|
18
|
+
Event.cycle += 1
|
19
|
+
# update or build services
|
20
|
+
update caller
|
21
|
+
# inform frontend servers
|
22
|
+
inform caller
|
23
|
+
end
|
24
|
+
def update caller
|
25
|
+
puts "rescan announcements"
|
26
|
+
caller.services do |srv|
|
27
|
+
puts "http://#{srv.url} => http://#{srv.host}:#{srv.port} (#{srv.application}://#{srv.customer}/#{srv.function}) via #{srv.zk_path}"
|
28
|
+
customer = Customer.find_or_create_by(name:srv.customer)
|
29
|
+
application = Application.find_or_create_by(name:srv.application,customer_id:customer.id)
|
30
|
+
service = Service.find_or_create_by(name:srv.function,application_id:application.id)
|
31
|
+
service.host = srv.host
|
32
|
+
service.port = srv.port
|
33
|
+
service.url = srv.url
|
34
|
+
service.zk_path = srv.zk_path
|
35
|
+
service.save
|
36
|
+
end
|
37
|
+
end
|
38
|
+
def inform caller
|
39
|
+
puts "publish services"
|
40
|
+
publisher.publish
|
41
|
+
end
|
42
|
+
def publisher
|
43
|
+
params = {
|
44
|
+
name: "entrance-notifier",
|
45
|
+
host: Boutons.doorkeepr.host,
|
46
|
+
port: Boutons.doorkeepr.port
|
47
|
+
}
|
48
|
+
@publisher ||= Entrance::Publisher::Agent.new Config.current.publish_path, params
|
49
|
+
end
|
50
|
+
def watcher
|
51
|
+
@watcher ||= Entrance::Watcher::Agent.new Config.current.watch_path, name: "doorkeeper-publisher"
|
52
|
+
end
|
53
|
+
def start
|
54
|
+
publisher.start
|
55
|
+
watcher.callback = callback
|
56
|
+
watcher.start
|
57
|
+
loop do
|
58
|
+
sleep 1
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "boutons"
|
2
|
+
require "synapse/easy"
|
3
|
+
require "doorkeepr/watcher/config"
|
4
|
+
|
5
|
+
module Doorkeepr
|
6
|
+
module Watcher
|
7
|
+
module Bouton
|
8
|
+
attr_accessor :customer, :application, :function
|
9
|
+
def config
|
10
|
+
@mode ||= :tcp
|
11
|
+
@function ||= "common"
|
12
|
+
@application ||= self.class.name.split("::").last
|
13
|
+
@customer ||= "global"
|
14
|
+
Synapse::Easy::Service.new customer: @customer,
|
15
|
+
application: @application,
|
16
|
+
function: @function,
|
17
|
+
mode: @mode,
|
18
|
+
uri: @uri
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "resolv/consul"
|
2
|
+
require "doorkeepr/watcher/zookeeper"
|
3
|
+
require "doorkeepr/watcher/doorkeepr"
|
4
|
+
require "unirest"
|
5
|
+
|
6
|
+
module Doorkeepr
|
7
|
+
module Watcher
|
8
|
+
class Config
|
9
|
+
class << self
|
10
|
+
attr_accessor :current
|
11
|
+
end
|
12
|
+
attr_accessor :publish_path, :watch_path, :api_headers, :user_agent,
|
13
|
+
:api_path, :application, :customer, :function
|
14
|
+
attr_writer :doorkeepr_server
|
15
|
+
def initialize
|
16
|
+
@watch_path = "/doorkeepr/publish"
|
17
|
+
@publish_path = "/doorkeepr/entrance"
|
18
|
+
@api_headers = {
|
19
|
+
"X-Doorkeepr-API" => 1,
|
20
|
+
"Accept" => 'application/json',
|
21
|
+
}
|
22
|
+
@api_path = "api"
|
23
|
+
@api_timeout = 5
|
24
|
+
@user_agent = "Doorkeepr Watcher 1"
|
25
|
+
@doorkeepr_server = "localhost:3000"
|
26
|
+
@doorkeepr_customer = ENV["USER"]
|
27
|
+
@doorkeepr_service = "rails"
|
28
|
+
end
|
29
|
+
def zk_hosts
|
30
|
+
Resolv::Consul.services(:zookeeper)
|
31
|
+
end
|
32
|
+
def doorkeepr_server
|
33
|
+
Pathname.new(Boutons.doorkeepr.to_s || @doorkeepr_server)
|
34
|
+
end
|
35
|
+
def api_url
|
36
|
+
doorkeepr_server.join(api_path)
|
37
|
+
end
|
38
|
+
def url_for *elements
|
39
|
+
api_url.join(elements.join("/")).to_s
|
40
|
+
end
|
41
|
+
def method_missing method, *args, &block
|
42
|
+
return self.instance_variable_get("@#{method}")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
Doorkeepr::Watcher::Config.current ||= Doorkeepr::Watcher::Config.new
|
49
|
+
Doorkeepr::Watcher::Zookeeper.new
|
50
|
+
Doorkeepr::Watcher::Doorkeepr.new
|
51
|
+
Unirest.timeout(Doorkeepr::Watcher::Config.current.api_timeout)
|
52
|
+
Doorkeepr::Watcher::Config.current.api_headers.each do |header,value|
|
53
|
+
Unirest.default_header header,value
|
54
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "doorkeepr/watcher/bouton"
|
2
|
+
|
3
|
+
module Doorkeepr
|
4
|
+
module Watcher
|
5
|
+
class Doorkeepr
|
6
|
+
include Bouton
|
7
|
+
def initialize
|
8
|
+
@customer = Config.current.doorkeepr_customer
|
9
|
+
@application = "doorkeepr"
|
10
|
+
@function = Config.current.doorkeepr_service
|
11
|
+
@mode = :http
|
12
|
+
@uri = "/doorkeepr"
|
13
|
+
Boutons.add config
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require "doorkeepr/watcher/config"
|
2
|
+
require "doorkeepr/watcher/event"
|
3
|
+
require "unirest"
|
4
|
+
require "active_support/core_ext/class/attribute_accessors"
|
5
|
+
require "active_support/core_ext/string/inflections"
|
6
|
+
require "active_support/core_ext/module/introspection"
|
7
|
+
require "ostruct"
|
8
|
+
|
9
|
+
module Doorkeepr
|
10
|
+
module Watcher
|
11
|
+
class RestResource < OpenStruct
|
12
|
+
class << self
|
13
|
+
attr_accessor :parent
|
14
|
+
attr_writer :data
|
15
|
+
attr_accessor :cycle
|
16
|
+
def data
|
17
|
+
update if (self.cycle||0) < Event.cycle
|
18
|
+
@data
|
19
|
+
end
|
20
|
+
def first
|
21
|
+
self.data.values.first
|
22
|
+
end
|
23
|
+
def last
|
24
|
+
self.data.values.last
|
25
|
+
end
|
26
|
+
def all
|
27
|
+
self.data.values
|
28
|
+
end
|
29
|
+
def collection_name
|
30
|
+
resource_name.pluralize
|
31
|
+
end
|
32
|
+
def resource_name
|
33
|
+
self.name.split("::").last.underscore
|
34
|
+
end
|
35
|
+
def resource_id_label
|
36
|
+
"#{resource_name}_ids"
|
37
|
+
end
|
38
|
+
def update
|
39
|
+
result_data = {}
|
40
|
+
if parent
|
41
|
+
parent.data.each do |id,parent_data|
|
42
|
+
parent_data[resource_id_label].each do |instance_id|
|
43
|
+
url = Config.current.url_for(collection_name,instance_id.values.first)
|
44
|
+
tries = 0
|
45
|
+
begin
|
46
|
+
response = Unirest.get(url)
|
47
|
+
raise Exception if response.code != 200
|
48
|
+
rescue Exception
|
49
|
+
if tries < 100
|
50
|
+
tries += 1
|
51
|
+
sleep 0.5
|
52
|
+
retry
|
53
|
+
end
|
54
|
+
end
|
55
|
+
http_data = response.body[resource_name]
|
56
|
+
result_data[http_data["id"]] = self.new http_data.merge(persisted:true)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
else
|
60
|
+
url = Config.current.url_for(collection_name)
|
61
|
+
tries = 0
|
62
|
+
begin
|
63
|
+
response = Unirest.get(url)
|
64
|
+
raise Exception if response.code != 200
|
65
|
+
rescue
|
66
|
+
if tries < 100
|
67
|
+
tries += 1
|
68
|
+
sleep 0.5
|
69
|
+
retry
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
collection_data = response.body
|
74
|
+
collection_data[collection_name].each do |instance_data|
|
75
|
+
http_data = instance_data[resource_name]
|
76
|
+
result_data[http_data["id"]] = self.new http_data.merge(persisted:true)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
self.data = result_data
|
80
|
+
self.cycle = Event.cycle += 1
|
81
|
+
end
|
82
|
+
def where params
|
83
|
+
data.values.select do |instance|
|
84
|
+
params.map{|k,v| instance.send(k) == v }.reduce(:&)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
def find_by params
|
88
|
+
where(params).first
|
89
|
+
end
|
90
|
+
def find id
|
91
|
+
where(id:id).first
|
92
|
+
end
|
93
|
+
def find_or_create_by params={}
|
94
|
+
result = find_by params
|
95
|
+
result ||= self.new params.merge(persisted:false)
|
96
|
+
result.save
|
97
|
+
result
|
98
|
+
end
|
99
|
+
def find_or_create id
|
100
|
+
find_or_create_by id: id
|
101
|
+
end
|
102
|
+
def create params={}
|
103
|
+
self.new(params).save
|
104
|
+
end
|
105
|
+
def belongs_to instance_name
|
106
|
+
@associations ||= []
|
107
|
+
@associations << instance_name
|
108
|
+
end
|
109
|
+
def associations
|
110
|
+
@associations ||= []
|
111
|
+
end
|
112
|
+
end
|
113
|
+
def save
|
114
|
+
if persisted
|
115
|
+
Unirest.put(url,parameters:to_h)
|
116
|
+
else
|
117
|
+
http_data = Unirest.post(url,parameters:to_h).body[self.class.resource_name]
|
118
|
+
update_instance http_data
|
119
|
+
end
|
120
|
+
self
|
121
|
+
end
|
122
|
+
def reload
|
123
|
+
update_instance Unirest.get(url).body[self.class.resource_name]
|
124
|
+
self
|
125
|
+
end
|
126
|
+
def delete
|
127
|
+
Unirest.delete(url) if persisted
|
128
|
+
self.class.data.delete(id) if id
|
129
|
+
self.persisted = false
|
130
|
+
self
|
131
|
+
end
|
132
|
+
def url
|
133
|
+
return Config.current.url_for(self.class.collection_name,id) if persisted
|
134
|
+
return Config.current.url_for(self.class.collection_name) if self.class.associations.empty?
|
135
|
+
if self.class.associations.count == 1
|
136
|
+
association_name = self.class.associations.first
|
137
|
+
return self.send(association_name).url + "/#{self.class.collection_name}"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
def update_instance params={}
|
141
|
+
return unless params
|
142
|
+
ap params, raw: true
|
143
|
+
@table = @table.merge params
|
144
|
+
end
|
145
|
+
def to_h
|
146
|
+
{ self.class.resource_name => filtered_attributes }
|
147
|
+
end
|
148
|
+
def filtered_attributes
|
149
|
+
result = @table
|
150
|
+
result = result.except(:id,:persisted)
|
151
|
+
result = result.reject{|k,v| [/_ids$/].map{|r| true if k =~ r}.reduce(:|) }
|
152
|
+
result = result.reject{|k,v| v.is_a? RestResource }
|
153
|
+
result
|
154
|
+
end
|
155
|
+
def method_missing method, *args, &block
|
156
|
+
if self.class.associations.include? method
|
157
|
+
if @table[:"#{method}_id"]
|
158
|
+
klass = "#{self.class.parent_name}::#{method.to_s.classify}".constantize
|
159
|
+
@table[method] = klass.find(@table[:"#{method}_id"])
|
160
|
+
return @table[method]
|
161
|
+
end
|
162
|
+
end
|
163
|
+
if method =~ /=$/
|
164
|
+
@table.[]= method.to_s.sub(/=$/,''), *args
|
165
|
+
else
|
166
|
+
@table.[] method.to_s
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
metadata
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: doorkeepr-watcher
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mathias Kaufmann
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: entrance-watcher
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: entrance-publisher
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: resolv-consul
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: unirest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: activesupport
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: boutons
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: synapse-easy
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: bundler
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.8'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.8'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rake
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '10.0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '10.0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pry
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
description: Doorkeepr Watcher Agent
|
168
|
+
email:
|
169
|
+
- me@stei.gr
|
170
|
+
executables:
|
171
|
+
- doorkeeper-watcher
|
172
|
+
extensions: []
|
173
|
+
extra_rdoc_files: []
|
174
|
+
files:
|
175
|
+
- ".gitignore"
|
176
|
+
- ".travis.yml"
|
177
|
+
- Gemfile
|
178
|
+
- README.md
|
179
|
+
- Rakefile
|
180
|
+
- bin/console
|
181
|
+
- bin/setup
|
182
|
+
- doorkeepr-watcher.gemspec
|
183
|
+
- exe/doorkeeper-watcher
|
184
|
+
- lib/doorkeepr/watcher.rb
|
185
|
+
- lib/doorkeepr/watcher/agent.rb
|
186
|
+
- lib/doorkeepr/watcher/application.rb
|
187
|
+
- lib/doorkeepr/watcher/bouton.rb
|
188
|
+
- lib/doorkeepr/watcher/cli.rb
|
189
|
+
- lib/doorkeepr/watcher/config.rb
|
190
|
+
- lib/doorkeepr/watcher/customer.rb
|
191
|
+
- lib/doorkeepr/watcher/doorkeepr.rb
|
192
|
+
- lib/doorkeepr/watcher/event.rb
|
193
|
+
- lib/doorkeepr/watcher/rest_resource.rb
|
194
|
+
- lib/doorkeepr/watcher/service.rb
|
195
|
+
- lib/doorkeepr/watcher/version.rb
|
196
|
+
- lib/doorkeepr/watcher/zookeeper.rb
|
197
|
+
homepage: https://doorkeepr.stei.gr/watcher
|
198
|
+
licenses: []
|
199
|
+
metadata: {}
|
200
|
+
post_install_message:
|
201
|
+
rdoc_options: []
|
202
|
+
require_paths:
|
203
|
+
- lib
|
204
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - ">="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
requirements: []
|
215
|
+
rubyforge_project:
|
216
|
+
rubygems_version: 2.4.6
|
217
|
+
signing_key:
|
218
|
+
specification_version: 4
|
219
|
+
summary: Doorkeepr Watcher Agent
|
220
|
+
test_files: []
|