waithook 0.3.4 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b32b080839c1c70aad64787e2c4ac0f34fe1dbda59282224a033017ae653621d
4
- data.tar.gz: 2adcded9aec179705c2e623aae4a78751ca3c3c057b083744382f7e45934c3fc
3
+ metadata.gz: 5df3978af4bd4dc3330d86dd3a1948d082d1642882163066ec4e09d9b63245b2
4
+ data.tar.gz: af869d9efc1604f24b3fd1455767f06d5af75d62c5a225611b87b450e21f4bc1
5
5
  SHA512:
6
- metadata.gz: d9ed5c757660fcaef33a48243d7695d7b7a2af1c007043c38898cdba459e49aa1ecade64071a5faf15217148269a6e40ab9aea1bd2b8fe4e583bb5270b64fe2d
7
- data.tar.gz: 5dee2730756b927ba2ac01757de9add47a28fd8c53c4f1f7c60fa53f6453445dd33cb4f6e2cc8cacf7a2af9572b5b2d57fb059b561ba63d1a1599fedd3aeee24
6
+ metadata.gz: f2aa1c1079788668a57c3483708aa5158f3fb2b9abdfa8fafb227027ed83c085d970b97d65068a34373cfcb5edcae0ffc481351b1ebc53ee726f7f707eaaadec
7
+ data.tar.gz: 19c9797a9712c5df295515da8a5b299132ec2176364094d7b6d5f7ca96e502aa986e379a6be94fad05c5109114bc7b7423c9ce6550bf2e1d7d903b5209c7d5a5
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  *.gem
2
- doc
2
+ doc
3
+ .idea/
data/Gemfile.lock CHANGED
@@ -1,27 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- waithook (0.3.3)
4
+ waithook (0.4.0)
5
5
  websocket (~> 1.2)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- addressable (2.5.2)
11
- public_suffix (>= 2.0.2, < 4.0)
10
+ addressable (2.8.7)
11
+ public_suffix (>= 2.0.2, < 7.0)
12
12
  ansi (1.5.0)
13
- builder (3.2.3)
14
- excon (0.60.0)
15
- minitest (5.11.3)
16
- minitest-reporters (1.1.19)
13
+ builder (3.3.0)
14
+ excon (0.112.0)
15
+ minitest (5.25.1)
16
+ minitest-reporters (1.7.1)
17
17
  ansi
18
18
  builder
19
19
  minitest (>= 5.0)
20
20
  ruby-progressbar
21
- public_suffix (3.0.2)
22
- rake (12.3.0)
23
- ruby-progressbar (1.9.0)
24
- websocket (1.2.5)
21
+ public_suffix (6.0.1)
22
+ rake (13.2.1)
23
+ ruby-progressbar (1.13.0)
24
+ websocket (1.2.11)
25
25
 
26
26
  PLATFORMS
27
27
  ruby
@@ -34,4 +34,4 @@ DEPENDENCIES
34
34
  waithook!
35
35
 
36
36
  BUNDLED WITH
37
- 1.16.1
37
+ 2.5.11
data/bin/waithook CHANGED
@@ -23,6 +23,10 @@ begin
23
23
  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
24
24
  options[:verbose] = v
25
25
  end
26
+ opts.on("--[no-]debug", "Run verbosely") do |v|
27
+ options[:verbose] = v
28
+ end
29
+
26
30
  opts.on("-f URL", "--forward URL", "Forward to HTTP server") do |value|
27
31
  options[:forward] = value
28
32
  end
data/lib/waithook/cli.rb CHANGED
@@ -39,7 +39,7 @@ class Waithook
39
39
 
40
40
  while true
41
41
  message = waithook.wait_message
42
- puts message.message
42
+ puts message.pretty_print
43
43
  if options[:forward]
44
44
  Thread.new do
45
45
  begin
@@ -61,4 +61,4 @@ class Waithook
61
61
  end
62
62
  end
63
63
  end
64
- end
64
+ end
@@ -1,3 +1,3 @@
1
1
  class Waithook
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -199,6 +199,10 @@ class Waithook
199
199
  def _process_frame(message)
200
200
  logger.trace "Received :#{message.type} #{message.data ? "DATA: #{message.data}" : "(no data)"}"
201
201
 
202
+ if message.type == :pong
203
+ logger.debug "Got pong"
204
+ end
205
+
202
206
  if message.type == :ping
203
207
  send_pong!
204
208
  end
@@ -208,6 +212,13 @@ class Waithook
208
212
  end
209
213
  end
210
214
 
215
+ def ping_sender(interval = 60)
216
+ while @is_open
217
+ send_ping!
218
+ sleep interval
219
+ end
220
+ end
221
+
211
222
  def _wait_frames!
212
223
  while char = @socket.getc
213
224
  @frame_parser << char
data/lib/waithook.rb CHANGED
@@ -47,7 +47,7 @@ class Waithook
47
47
 
48
48
  # Filter (Proc), can be used to to filter incoming messages
49
49
  attr_accessor :filter
50
- # Array of all recieved messages
50
+ # Array of all received messages
51
51
  attr_accessor :messages
52
52
  # Websocket client, instance of Waithook::WebsocketClient
53
53
  attr_reader :client
@@ -106,9 +106,23 @@ class Waithook
106
106
  raise "Waithook connection already started" if @started
107
107
  @started = true
108
108
  @client.connect!.wait_handshake!
109
+ start_pinger_thread!
110
+
109
111
  self
110
112
  end
111
113
 
114
+ def start_pinger_thread!
115
+ Thread.new do
116
+ begin
117
+ logger.debug("Sending ping every 60 seconds")
118
+ client.ping_sender
119
+ logger.debug("Exit ping sender thread")
120
+ rescue => error
121
+ logger.warn("Error in ping sender thread: #{error.message} (#{error.class})\n#{error.backtrace.join("\n")}")
122
+ end
123
+ end
124
+ end
125
+
112
126
  # Whenever connected to server or not
113
127
  def started?
114
128
  !!@started
@@ -116,7 +130,7 @@ class Waithook
116
130
 
117
131
  # Send all incoming webhook requests to running HTTP server
118
132
  #
119
- # webhook = Waithook.subscribe(path: 'my-webhoooks').forward_to('http://localhost:3000/notification')
133
+ # webhook = Waithook.subscribe(path: 'my-webhooks').forward_to('http://localhost:3000/notification')
120
134
  #
121
135
  def forward_to(url, options = {})
122
136
  webhook = wait_message(options)
@@ -132,7 +146,7 @@ class Waithook
132
146
  Timeout.timeout(timeout) do
133
147
  while true
134
148
  _, data = @client.wait_message
135
- webhook = Webhook.new(data)
149
+ webhook = Webhook.new(data, logger)
136
150
  if @filter && @filter.call(webhook) || !@filter
137
151
  @messages << webhook
138
152
  return webhook
@@ -140,7 +154,7 @@ class Waithook
140
154
  end
141
155
  end
142
156
  rescue Timeout::Error => error
143
- time_diff = (Time.now.to_f - start_time).round(3)
157
+ time_diff = (Time.now.to_f - start_time.to_i).round(3)
144
158
  logger.error "#{error.class}: #{error.message} (after #{time_diff} seconds)"
145
159
  raise error if raise_timeout_error
146
160
  return nil
@@ -166,13 +180,37 @@ class Waithook
166
180
  # Raw message from waithook server
167
181
  attr_reader :message
168
182
 
169
- def initialize(payload)
183
+ def initialize(payload, logger = nil)
170
184
  @message = payload
171
185
  data = JSON.parse(@message)
172
186
  @url = data['url']
173
187
  @headers = data['headers']
174
188
  @body = data['body']
175
189
  @method = data['method']
190
+ @logger = logger
191
+ end
192
+
193
+ def pretty_print
194
+ if @body.start_with?('{') && @body.end_with?('}') || @body.start_with?('[') && @body.end_with?(']')
195
+ begin
196
+ body_data = JSON.parse(body)
197
+ pretty_body = JSON.pretty_generate(body_data)
198
+ data_without_body = JSON.parse(@message)
199
+ data_without_body.delete('body')
200
+
201
+ begin
202
+ require 'coderay'
203
+ pretty_body = CodeRay.scan(pretty_body, :json).term
204
+ rescue => error
205
+ logger&.debug("Error while trying to use CodeRay: #{error.message}")
206
+ end
207
+ return "#{JSON.pretty_generate(data_without_body)}\nBody:\n#{pretty_body}"
208
+ rescue JSON::ParserError => error
209
+ logger&.debug("Error while parsing json body: #{error.message}")
210
+ end
211
+ end
212
+
213
+ return message
176
214
  end
177
215
 
178
216
  # Returns Hash.
@@ -183,9 +221,11 @@ class Waithook
183
221
  end
184
222
  end
185
223
 
224
+ SKIP_FORWARD_HEADERS = %w[host content-length connection accept-encoding accept content-encoding]
225
+
186
226
  # Send webhook information to other HTTP server
187
227
  #
188
- # webhook = Waithook.subscribe(path: 'my-webhoooks').wait_message
228
+ # webhook = Waithook.subscribe(path: 'my-webhooks').wait_message
189
229
  # webhook.send_to('http://localhost:3000/notification')
190
230
  #
191
231
  def send_to(url)
@@ -207,7 +247,9 @@ class Waithook
207
247
 
208
248
  request = http_klass.new(uri)
209
249
  headers.each do |key, value|
210
- request[key] = value
250
+ if !SKIP_FORWARD_HEADERS.include?(key.to_s.downcase)
251
+ request[key] = value
252
+ end
211
253
  end
212
254
 
213
255
  if body
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waithook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Evstigneev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-19 00:00:00.000000000 Z
11
+ date: 2024-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: websocket