waithook 0.3.4 → 0.4.1

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
  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