docker_cloud 0.1.3 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 443a84e43b49be4b728ccab3f42ef87ffbba72c3
4
- data.tar.gz: 57ced92d05639f74b56486fea33a26980ca1f183
3
+ metadata.gz: 2aab083ede77f5ec4093334d3cb5bded5d3fb762
4
+ data.tar.gz: 942bea1eaaafa7d2ac87ef8aace4834d7715c7b8
5
5
  SHA512:
6
- metadata.gz: b3732bed627e2ba432bb6e1034c3aeb996d85646b03652091dc3005eeb40e73c78cd04d2f227a0e69fad73fef457a7191500dd90a6079e33156102ffb0825684
7
- data.tar.gz: 5592766ecc087d3e702034a02776ccf4ee4179b6a93145a51b711e65660a237ab8eaccba3d58d7d72207042d7cbd86ee1d9154c1eb1d6c87c64f8535675c2a5d
6
+ metadata.gz: e254f248d11472c3fcfc8393ffe7f92d114f6c7887cfe429753cb9298b2b22ad77f3b84a51c254df4992c92caeb45d853dffd489808bf144f127d594faf91329
7
+ data.tar.gz: a9ac491c8ad7d31e0554210f4cf8fa683683eea85e37b51d55c349750148ac376582edc050aa6205dbf98d9a0b8c72ae0c48fc9253460de852c0265d2f9bd9dc
@@ -0,0 +1,5 @@
1
+ FROM ruby:2.2
2
+ RUN mkdir /workspace
3
+ WORKDIR /workspace
4
+ ADD . /workspace
5
+ RUN bundle install --jobs 4
data/README.md CHANGED
@@ -68,6 +68,49 @@ node_types.all
68
68
  # Get a node type
69
69
  # node_types.get(<provider_name>, <name>)
70
70
  node_types.get('softlayer', '1x2.0GHzCore-2GB')
71
+
72
+ # Events
73
+ events = client.events
74
+
75
+ # Event listeners
76
+ events.on(:open) do |event|
77
+ puts "OPEN"
78
+ end
79
+
80
+ events.on(:close) do |event|
81
+ puts "Code: #{event.code}"
82
+ puts "Reason: #{event.reason}"
83
+ end
84
+
85
+ events.on(:error) do |event|
86
+ puts "Message: #{event.message}"
87
+ end
88
+
89
+ events.on(:message) do |event|
90
+ puts "Type: #{event.type}"
91
+ puts "Action: #{event.action}"
92
+ puts "Parents: #{event.parents}"
93
+ puts "Resource URI: #{event.resource_uri}"
94
+ puts "State: #{event.state}"
95
+ puts "UUID: #{event.uuid}"
96
+ puts "Datetime: #{event.datetime}"
97
+ end
98
+
99
+ events.run! # This will start an EventMachine event loop
100
+
101
+ ```
102
+
103
+ ## Running specs
104
+
105
+ ```
106
+ rake spec
107
+ ```
108
+
109
+ if you are using docker compose then:
110
+
111
+ ```
112
+ docker-compose build
113
+ docker-compose run ruby_docker_cloud
71
114
  ```
72
115
 
73
116
  ## Contributing
@@ -78,4 +121,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/jntull
78
121
  ## License
79
122
 
80
123
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
81
-
@@ -0,0 +1,5 @@
1
+ ruby_docker_cloud:
2
+ build: .
3
+ command: bundle exec rake spec
4
+ volumes:
5
+ - .:/workspace
@@ -6,7 +6,7 @@ require 'docker_cloud/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'docker_cloud'
8
8
  spec.version = DockerCloud::VERSION
9
- spec.authors = ['Jillian Tullo']
9
+ spec.authors = ['Jillian Tullo', 'Richard Adams', 'Pat Leamon']
10
10
  spec.email = ['jillian.tullo@gmail.com']
11
11
 
12
12
  spec.summary = 'Ruby wrapper for the Docker Cloud HTTP REST API'
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_runtime_dependency 'rest-client', '~> 1.8.0'
23
23
  spec.add_runtime_dependency 'json', '~> 1.8.1'
24
+ spec.add_runtime_dependency 'faye-websocket', '~> 0.10.3'
25
+
24
26
 
25
27
  spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4.1'
26
28
  spec.add_development_dependency 'rspec', '~> 3.1.0'
@@ -16,9 +16,11 @@ require 'docker_cloud/stack'
16
16
  require 'docker_cloud/node'
17
17
  require 'docker_cloud/node_cluster'
18
18
  require 'docker_cloud/service'
19
+ require 'docker_cloud/event'
19
20
 
20
21
  # api clients
21
22
  require 'docker_cloud/api/api'
23
+ require 'docker_cloud/api/stream_api'
22
24
  require 'docker_cloud/api/provider_api'
23
25
  require 'docker_cloud/api/region_api'
24
26
  require 'docker_cloud/api/availability_zone_api'
@@ -30,6 +32,7 @@ require 'docker_cloud/api/service_api'
30
32
  require 'docker_cloud/api/container_api'
31
33
  require 'docker_cloud/api/stack_api'
32
34
  require 'docker_cloud/api/registry_api'
35
+ require 'docker_cloud/api/events_api'
33
36
 
34
37
  # ruby libs
35
38
  require 'base64'
@@ -42,6 +45,7 @@ module DockerCloud
42
45
  INFRASTRUCTURE = 'infra'.freeze
43
46
  REPOSITORY = 'repo'.freeze
44
47
  APPLICATION = 'app'.freeze
48
+ AUDIT = 'audit'.freeze
45
49
  end
46
50
 
47
51
  def initialize(username, api_key)
@@ -102,12 +106,16 @@ module DockerCloud
102
106
  @containers ||= DockerCloud::ContainerAPI.new(headers, ApiType::APPLICATION, self)
103
107
  end
104
108
 
109
+ def events
110
+ @containers ||= DockerCloud::EventsAPI.new(headers, ApiType::AUDIT, self)
111
+ end
112
+
105
113
  private
106
114
 
107
115
  attr_reader :api_key
108
116
 
109
117
  def authorization
110
- @auth ||= "Basic #{Base64.strict_encode64(@username + ':' + api_key)}"
118
+ @auth ||= ENV['DOCKERCLOUD_AUTH'] || "Basic #{Base64.strict_encode64(@username + ':' + api_key)}"
111
119
  end
112
120
  end
113
121
  end
@@ -0,0 +1,31 @@
1
+ require 'faye/websocket'
2
+ require 'eventmachine'
3
+
4
+ module DockerCloud
5
+ class EventsAPI < DockerCloud::StreamAPI
6
+
7
+ private
8
+
9
+ def websocket_path
10
+ @websocket_path ||= '/events'.freeze
11
+ end
12
+
13
+ def _on_message(event)
14
+ @listeners[:message].call(convert_to_dockercloud_event(event)) if @listeners[:message]
15
+ end
16
+
17
+ def convert_to_dockercloud_event(original_event)
18
+ data = parse(original_event.data)
19
+ options = {
20
+ websocket_type: original_event.type,
21
+ bubbles: original_event.bubbles,
22
+ cancelable: original_event.cancelable,
23
+ target: original_event.target,
24
+ current_target: original_event.current_target,
25
+ event_phase: original_event.event_phase
26
+ }
27
+ DockerCloud::Event.new('message', options.merge(data))
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,84 @@
1
+ module DockerCloud
2
+ class StreamAPI < DockerCloud::API
3
+ STREAM_API_PATH = 'wss://ws.cloud.docker.com/api'.freeze
4
+
5
+ def websocket
6
+ @websocket ||= begin
7
+ url = URI.escape(STREAM_API_PATH + '/' + @type + '/' + API_VERSION + websocket_path)
8
+ Faye::WebSocket::Client.new(url, nil, ping: 240, headers: headers)
9
+ end
10
+ end
11
+
12
+ def on(type, &block)
13
+ @listeners = {} unless @listeners
14
+ @listeners[type.to_sym] = block
15
+ end
16
+
17
+ def run!(&block)
18
+ EventMachine.kqueue = true if EventMachine.kqueue?
19
+
20
+ EM.run {
21
+ @shutting_down = false
22
+ Signal.trap('INT') { signal_handler('INT') }
23
+ Signal.trap('TERM') { signal_handler('TERM') }
24
+
25
+ if block_given?
26
+ block.call
27
+ end
28
+
29
+ connect
30
+ }
31
+ end
32
+
33
+ private
34
+
35
+ def connect
36
+ websocket.on :open do |event|
37
+ _on_open(event)
38
+ end
39
+ websocket.on :message do |event|
40
+ _on_message(event)
41
+ end
42
+
43
+ websocket.on :error do |event|
44
+ _on_error(event)
45
+ end
46
+
47
+ websocket.on :close do |event|
48
+ _on_close(event)
49
+ end
50
+ end
51
+
52
+ def websocket_path
53
+ nil
54
+ end
55
+
56
+ def signal_handler(type)
57
+ # In rare cases the signal comes multiple times. If we're already shutting down ignore this.
58
+ unless @shutting_down
59
+ @shutting_down = true
60
+ EventMachine.stop
61
+ end
62
+ end
63
+
64
+ def _on_open(event)
65
+ @listeners[:open].call(event) if @listeners[:open]
66
+ end
67
+
68
+ def _on_message(event)
69
+ @listeners[:message].call(event) if @listeners[:message]
70
+ end
71
+
72
+ def _on_error(event)
73
+ @listeners[:error].call(event) if @listeners[:error]
74
+ end
75
+
76
+ def _on_close(event)
77
+ @listeners[:close].call(event) if @listeners[:close]
78
+ unless @shutting_down
79
+ connect
80
+ end
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,8 @@
1
+ require 'faye/websocket'
2
+ require 'faye/websocket/api/event'
3
+
4
+ module DockerCloud
5
+ class Event < Faye::WebSocket::API::MessageEvent
6
+ attr_reader :action, :parents, :resource_uri, :state, :uuid, :datetime
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module DockerCloud
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jillian Tullo
8
+ - Richard Adams
9
+ - Pat Leamon
8
10
  autorequire:
9
11
  bindir: exe
10
12
  cert_chain: []
11
- date: 2016-03-30 00:00:00.000000000 Z
13
+ date: 2016-04-15 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: rest-client
@@ -38,6 +40,20 @@ dependencies:
38
40
  - - "~>"
39
41
  - !ruby/object:Gem::Version
40
42
  version: 1.8.1
43
+ - !ruby/object:Gem::Dependency
44
+ name: faye-websocket
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 0.10.3
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: 0.10.3
41
57
  - !ruby/object:Gem::Dependency
42
58
  name: codeclimate-test-reporter
43
59
  requirement: !ruby/object:Gem::Requirement
@@ -134,15 +150,18 @@ files:
134
150
  - ".rubocop.yml"
135
151
  - ".travis.yml"
136
152
  - CODE_OF_CONDUCT.md
153
+ - Dockerfile
137
154
  - Gemfile
138
155
  - LICENSE.txt
139
156
  - README.md
140
157
  - Rakefile
158
+ - docker-compose.yml
141
159
  - docker_cloud.gemspec
142
160
  - lib/docker_cloud.rb
143
161
  - lib/docker_cloud/api/api.rb
144
162
  - lib/docker_cloud/api/availability_zone_api.rb
145
163
  - lib/docker_cloud/api/container_api.rb
164
+ - lib/docker_cloud/api/events_api.rb
146
165
  - lib/docker_cloud/api/external_repository_api.rb
147
166
  - lib/docker_cloud/api/node_api.rb
148
167
  - lib/docker_cloud/api/node_cluster_api.rb
@@ -152,8 +171,10 @@ files:
152
171
  - lib/docker_cloud/api/registry_api.rb
153
172
  - lib/docker_cloud/api/service_api.rb
154
173
  - lib/docker_cloud/api/stack_api.rb
174
+ - lib/docker_cloud/api/stream_api.rb
155
175
  - lib/docker_cloud/availability_zone.rb
156
176
  - lib/docker_cloud/container.rb
177
+ - lib/docker_cloud/event.rb
157
178
  - lib/docker_cloud/external_repository.rb
158
179
  - lib/docker_cloud/helpers/api.rb
159
180
  - lib/docker_cloud/helpers/services.rb