async-http 0.88.0 → 0.90.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
  SHA256:
3
- metadata.gz: 605cb4a26c37dbfdaa3225fb306b3c2bc9e01da814094babb8e46cdb05594999
4
- data.tar.gz: 40c28864c03492bc20d8aa02947210841ca5f2c75b841e222c90d8f3a36102af
3
+ metadata.gz: 4deafcd4307a062ea1c30e318ad047ca05189a901b9a992dad49229bd1b29f24
4
+ data.tar.gz: 8525c40739af32f69dab67e3c813660057831b09ecfe2927e346dd4a6b585b2c
5
5
  SHA512:
6
- metadata.gz: 95eb6bb5d079d59b9ed9698d648bd709a7f60ae1a5833547cadd9a11def31e6e8d99b929650df676c0ed215a0719bd604ffc7c57c6e047cdefaa0ac11ff2d71b
7
- data.tar.gz: 0cdbfe53cbcf3acb1529536ddac851c09e53dd9b7c40fb1d1059abc073138f67cda426a5825966052d52a2d35f39170047c814f7ca6168b25f149fb2baf1e7e0
6
+ metadata.gz: d8da92f52774dc4ada4701cea046fed2c948603f8327e68c5dbbbe0618eeb0b9a0d3fe3fe197c0ba3fbdaf95916375930a73f65e4121e7021ea0e95f236d7205
7
+ data.tar.gz: f01f486824e2345b637344235d710e727a422fa068d5a376497966052ec8b791edde1725e118489061e52b85ac2aa3b671f81bf5e5115925d8c3e16314540690
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2024, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
 
6
6
  def build
7
7
  # Fetch the code:
@@ -53,7 +53,6 @@ module Async
53
53
 
54
54
  @head.close_write
55
55
  rescue => error
56
- raise
57
56
  ensure
58
57
  @input.close(error)
59
58
 
@@ -71,7 +70,6 @@ module Async
71
70
  @output.write(chunk)
72
71
  end
73
72
  rescue => error
74
- raise
75
73
  ensure
76
74
  @output.close_write(error)
77
75
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2017-2024, by Samuel Williams.
4
+ # Copyright, 2017-2025, by Samuel Williams.
5
5
  # Copyright, 2022, by Ian Ker-Seymer.
6
6
 
7
7
  require "io/endpoint"
@@ -80,9 +80,8 @@ module Async
80
80
  end
81
81
 
82
82
  def close
83
- while @pool.busy?
83
+ @pool.wait_until_free do
84
84
  Console.warn(self) {"Waiting for #{@protocol} pool to drain: #{@pool}"}
85
- @pool.wait
86
85
  end
87
86
 
88
87
  @pool.close
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2024, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
  # Copyright, 2021-2022, by Adam Daniels.
6
6
  # Copyright, 2024, by Thomas Morgan.
7
7
  # Copyright, 2024, by Igor Sidorov.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Released under the MIT License.
4
4
  # Copyright, 2024, by Thomas Morgan.
5
- # Copyright, 2024, by Samuel Williams.
5
+ # Copyright, 2024-2025, by Samuel Williams.
6
6
 
7
7
  require_relative "defaulton"
8
8
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "request"
7
7
  require_relative "response"
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
  # Copyright, 2020, by Igor Sidorov.
6
6
  # Copyright, 2023, by Thomas Morgan.
7
7
  # Copyright, 2024, by Anton Zhuravsky.
8
+ # Copyright, 2025, by Jean Boussier.
8
9
 
9
10
  require_relative "connection"
10
11
  require_relative "finishable"
@@ -52,7 +53,7 @@ module Async
52
53
  end
53
54
 
54
55
  return request
55
- rescue ::Protocol::HTTP1::BadRequest => error
56
+ rescue ::Protocol::HTTP1::BadRequest
56
57
  fail_request(400)
57
58
  # Conceivably we could retry here, but we don't really know how bad the error is, so it's better to just fail:
58
59
  raise
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2017-2024, by Samuel Williams.
4
+ # Copyright, 2017-2025, by Samuel Williams.
5
5
  # Copyright, 2024, by Thomas Morgan.
6
6
 
7
7
  require_relative "configurable"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2017-2024, by Samuel Williams.
4
+ # Copyright, 2017-2025, by Samuel Williams.
5
5
  # Copyright, 2024, by Thomas Morgan.
6
6
 
7
7
  require_relative "http1"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2017-2024, by Samuel Williams.
4
+ # Copyright, 2017-2025, by Samuel Williams.
5
5
  # Copyright, 2018, by Janko Marohnić.
6
6
  # Copyright, 2024, by Thomas Morgan.
7
7
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "connection"
7
7
  require_relative "response"
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
  # Copyright, 2020, by Bruno Sutic.
6
+ # Copyright, 2025, by Jean Boussier.
6
7
 
7
8
  require_relative "stream"
8
9
 
@@ -94,7 +95,7 @@ module Async
94
95
  # Error is raised if a response is actively reading from the
95
96
  # connection. The connection is silently closed if GOAWAY is
96
97
  # received outside the request/response cycle.
97
- rescue SocketError, IOError, EOFError, Errno::ECONNRESET, Errno::EPIPE => ignored_error
98
+ rescue SocketError, IOError, EOFError, Errno::ECONNRESET, Errno::EPIPE
98
99
  # Ignore.
99
100
  rescue => error
100
101
  # Every other error.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "connection"
7
7
  require_relative "request"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
  # Copyright, 2022, by Marco Concetto Rudilosso.
6
6
  # Copyright, 2023, by Thomas Morgan.
7
7
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
  # Copyright, 2024, by Thomas Morgan.
6
6
 
7
7
  require_relative "configurable"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
  # Copyright, 2019, by Brian Morearty.
6
6
 
7
7
  require_relative "defaulton"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2017-2024, by Samuel Williams.
4
+ # Copyright, 2017-2025, by Samuel Williams.
5
5
  # Copyright, 2019, by Brian Morearty.
6
6
 
7
7
  require "async"
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2017-2024, by Samuel Williams.
4
+ # Copyright, 2017-2025, by Samuel Williams.
5
5
 
6
6
  module Async
7
7
  module HTTP
8
- VERSION = "0.88.0"
8
+ VERSION = "0.90.0"
9
9
  end
10
10
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2025, by Samuel Williams.
5
+
6
+ require_relative "../../../../async/http/client"
7
+ require "metrics/provider"
8
+
9
+ Metrics::Provider(Async::HTTP::Client) do
10
+ ASYNC_HTTP_CLIENT_REQUEST_INITIATED = Metrics.metric("async.http.client.request.initiated", :counter, description: "The number of HTTP client requests initiated.")
11
+ ASYNC_HTTP_CLIENT_REQUEST_COMPLETED = Metrics.metric("async.http.client.request.completed", :counter, description: "The number of HTTP client requests completed.")
12
+
13
+ def make_response(request, connection, attempt)
14
+ ASYNC_HTTP_CLIENT_REQUEST_INITIATED.emit(1, tags: ["method:#{request.method}"])
15
+
16
+ response = super(request, connection, attempt)
17
+
18
+ ASYNC_HTTP_CLIENT_REQUEST_COMPLETED.emit(1, tags: ["method:#{request.method}", "status:#{response.status}"])
19
+
20
+ return response
21
+ ensure
22
+ unless response
23
+ ASYNC_HTTP_CLIENT_REQUEST_COMPLETED.emit(1, tags: ["method:#{request.method}", "status:failed"])
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2025, by Samuel Williams.
5
+
6
+ require_relative "../../../../async/http/server"
7
+ require "metrics/provider"
8
+
9
+ Metrics::Provider(Async::HTTP::Server) do
10
+ ASYNC_HTTP_SERVER_REQUEST_INITIATED = Metrics.metric("async.http.server.request.initiated", :counter, description: "The number of HTTP server requests initiated.")
11
+ ASYNC_HTTP_SERVER_REQUEST_COMPLETED = Metrics.metric("async.http.server.request.completed", :counter, description: "The number of HTTP server requests completed.")
12
+
13
+ def call(request)
14
+ ASYNC_HTTP_SERVER_REQUEST_INITIATED.emit(1, tags: ["method:#{request.method}"])
15
+
16
+ if response = super(request)
17
+ ASYNC_HTTP_SERVER_REQUEST_COMPLETED.emit(1, tags: ["method:#{request.method}", "status:#{response.status}"])
18
+ return response
19
+ else
20
+ return nil
21
+ end
22
+ ensure
23
+ unless response
24
+ ASYNC_HTTP_SERVER_REQUEST_COMPLETED.emit(1, tags: ["method:#{request.method}", "status:failed"])
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "http/client"
4
+ require_relative "http/server"
data/license.md CHANGED
@@ -22,6 +22,7 @@ Copyright, 2023, by dependabot[bot].
22
22
  Copyright, 2023, by Josh Huber.
23
23
  Copyright, 2024, by Anton Zhuravsky.
24
24
  Copyright, 2024, by Hal Brodigan.
25
+ Copyright, 2025, by Jean Boussier.
25
26
 
26
27
  Permission is hereby granted, free of charge, to any person obtaining a copy
27
28
  of this software and associated documentation files (the "Software"), to deal
data/readme.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Async::HTTP
2
2
 
3
- An asynchronous client and server implementation of HTTP/1.0, HTTP/1.1 and HTTP/2 including TLS. Support for streaming requests and responses. Built on top of [async](https://github.com/socketry/async) and [async-io](https://github.com/socketry/async-io). [falcon](https://github.com/socketry/falcon) provides a rack-compatible server.
3
+ An asynchronous client and server implementation of HTTP/1.0, HTTP/1.1 and HTTP/2 including TLS. Support for streaming requests and responses. Built on top of [async](https://github.com/socketry/async), [io-endpoint](https://github.com/socketry/io-endpoint) and [io-stream](https://github.com/socketry/io-stream). [falcon](https://github.com/socketry/falcon) provides a rack-compatible server.
4
4
 
5
5
  [![Development Status](https://github.com/socketry/async-http/workflows/Test/badge.svg)](https://github.com/socketry/async-http/actions?workflow=Test)
6
6
 
data.tar.gz.sig CHANGED
@@ -1,2 +1 @@
1
- NNɧEm��#�ӵ��F��}��vlK�.u��fQ%�%"�7 �3jA�[a4+���t�ūd���is��=7�&P�`�c��d�W>��X�Bh�l-_Q��������(�N໗B�eB��#4ǘ���}8��.���n�6�P5� D�+�Y�!"��e2T�%�r�uV�grڮ�po���}͜�L�<{�})�ƗD������Ѕ���%%��AH�M�3xՓ�cm��M����ڝX�Q�CDW�������JԚ��g+q3y����r�dn,����㝹�N���)<��Ui���N-�mFbl���X�G.-}�I�ੵ�"Ĥb�S�
2
- �vO:��+�1�|Pͼ�*iOR��@i��N"��@�-�iܪ˥�s�F6�WE��
1
+ ?F��q�"K���M�j���/Z��O&u,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.88.0
4
+ version: 0.90.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -16,6 +16,7 @@ authors:
16
16
  - Denis Talakevich
17
17
  - Hal Brodigan
18
18
  - Ian Ker-Seymer
19
+ - Jean Boussier
19
20
  - Josh Huber
20
21
  - Marco Concetto Rudilosso
21
22
  - Olle Jonsson
@@ -57,7 +58,7 @@ cert_chain:
57
58
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
58
59
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
59
60
  -----END CERTIFICATE-----
60
- date: 2025-03-13 00:00:00.000000000 Z
61
+ date: 1980-01-02 00:00:00.000000000 Z
61
62
  dependencies:
62
63
  - !ruby/object:Gem::Dependency
63
64
  name: async
@@ -79,14 +80,14 @@ dependencies:
79
80
  requirements:
80
81
  - - "~>"
81
82
  - !ruby/object:Gem::Version
82
- version: '0.9'
83
+ version: '0.11'
83
84
  type: :runtime
84
85
  prerelease: false
85
86
  version_requirements: !ruby/object:Gem::Requirement
86
87
  requirements:
87
88
  - - "~>"
88
89
  - !ruby/object:Gem::Version
89
- version: '0.9'
90
+ version: '0.11'
90
91
  - !ruby/object:Gem::Dependency
91
92
  name: io-endpoint
92
93
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +235,9 @@ files:
234
235
  - lib/async/http/server.rb
235
236
  - lib/async/http/statistics.rb
236
237
  - lib/async/http/version.rb
238
+ - lib/metrics/provider/async/http.rb
239
+ - lib/metrics/provider/async/http/client.rb
240
+ - lib/metrics/provider/async/http/server.rb
237
241
  - license.md
238
242
  - readme.md
239
243
  - releases.md
@@ -250,14 +254,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
250
254
  requirements:
251
255
  - - ">="
252
256
  - !ruby/object:Gem::Version
253
- version: '3.1'
257
+ version: '3.2'
254
258
  required_rubygems_version: !ruby/object:Gem::Requirement
255
259
  requirements:
256
260
  - - ">="
257
261
  - !ruby/object:Gem::Version
258
262
  version: '0'
259
263
  requirements: []
260
- rubygems_version: 3.6.2
264
+ rubygems_version: 3.6.9
261
265
  specification_version: 4
262
266
  summary: A HTTP client and server library.
263
267
  test_files: []
metadata.gz.sig CHANGED
Binary file