acquia-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: 53cb76feb20ac22454007a19fb6964fa0d6c17e4
4
- data.tar.gz: ef0c5bed0661a57a91082e1c31b49d63f6d3c9bd
3
+ metadata.gz: 4182a6236125a8d1f01f9e91e413ed3f8d2c026a
4
+ data.tar.gz: 326ab2c189dc55f63ccf49959d1e0752f59396a5
5
5
  SHA512:
6
- metadata.gz: a83a7da094a08ebbc25abf5557effd882899134848626c102166724ce3727b6d1e3d99da195d6e7b1e4ca4ce2ebf41779df396a3c9106cdadfbaee962a15d484
7
- data.tar.gz: 5a0170443e5aa0361f071e755ef2033d2695c74ed6472959a4e66c9bfe77bcf2c7e98b8918d232d9d5f8463ab7ed91048ac8af18af91e5918d2f2032d7b0c786
6
+ metadata.gz: 830ea71f88ba33fc22c8eb3b249e0522916c92f2c7fe39c120a5501766bd170c906e0dec973c7fbf2b44e2d001acef6c24b96536347d63f75272b0e453440be1
7
+ data.tar.gz: 6a2bd7d7e024eb3ea6bddc47846b7c9753897c46bf503ccdf1ff42f681796ccd251eb375efcdf7ce075e74a06c15d4c091b53863dbbda4ba656df725bb9e452f
@@ -1,7 +1,8 @@
1
- require 'socket'
2
- require 'websocket'
3
1
  require 'json'
2
+ require 'socket'
3
+ require 'time'
4
4
  require 'uri'
5
+ require 'websocket'
5
6
 
6
7
  module Acquia
7
8
  class Cloud
@@ -12,6 +13,7 @@ module Acquia
12
13
  RECV_LENGTH = 16 * 1024
13
14
 
14
15
  attr_reader :remote_server
16
+ attr_accessor :keepalive_duration
15
17
 
16
18
  def initialize(url, message)
17
19
  @url = url
@@ -19,6 +21,8 @@ module Acquia
19
21
  @logs = []
20
22
  @available = []
21
23
  @enabled_types = []
24
+ @keepalive_duration = 5000
25
+ @last_keepalive = @last_data = Time.now
22
26
  end
23
27
 
24
28
  def debug
@@ -58,11 +62,11 @@ module Acquia
58
62
  opts[:type] = opts[:source].type
59
63
  end
60
64
 
61
- send({
65
+ send(
62
66
  cmd: 'enable',
63
67
  server: opts[:server],
64
68
  type: opts[:type],
65
- })
69
+ )
66
70
  end
67
71
 
68
72
  def enable_type(type)
@@ -78,11 +82,11 @@ module Acquia
78
82
  opts[:type] = opts[:source].type
79
83
  end
80
84
 
81
- send({
85
+ send(
82
86
  cmd: 'disable',
83
87
  server: opts[:server],
84
88
  type: opts[:type],
85
- })
89
+ )
86
90
  end
87
91
 
88
92
  def disable_type(type)
@@ -99,19 +103,35 @@ module Acquia
99
103
  end
100
104
  end
101
105
 
102
- protected
106
+ # protected
103
107
 
104
108
  def send(message)
105
109
  message = message.to_json
106
110
  STDERR.puts "-> #{message}" if @debug
107
111
  frame = ::WebSocket::Frame::Outgoing::Client.new(version: @handshake.version, type: 'text', data: message)
108
- @socket.print frame.to_s
112
+ @socket.send frame.to_s, 0
109
113
  end
110
114
 
111
115
  def update
116
+ # Send a keepalive if required
117
+ if Time.now - @last_keepalive < @keepalive_duration
118
+ send(cmd: 'keepalive')
119
+ end
120
+
112
121
  # Read as much as possible
113
- @incoming << @socket.read_nonblock(RECV_LENGTH) while true
114
- rescue ::IO::WaitReadable
122
+ while true
123
+ read = @socket.read_nonblock(RECV_LENGTH)
124
+ @last_data = Time.now
125
+ @incoming << read
126
+ end
127
+ rescue ::IO::WaitReadable => e
128
+ if Time.now - @last_data > @keepalive_duration * 1.5
129
+ # There hasn't been a socket level error, but we're worried at this
130
+ # point. Trigger a proper socket close 'just in case' then flag a
131
+ # broken pipe to downstream code.
132
+ close
133
+ raise Errno::EPIPE
134
+ end
115
135
  loop do
116
136
  msg = @incoming.next
117
137
  break unless msg
@@ -1,5 +1,5 @@
1
1
  module Acquia
2
2
  class Cloud
3
- VERSION = '0.1.3'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acquia-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
  - Equiem
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-24 00:00:00.000000000 Z
11
+ date: 2015-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday