aws-xray-sdk 0.14.0 → 0.16.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: 04c1d1cb98a0d55632a4f77d366d4722008401851555c0ab515236f03837b323
4
- data.tar.gz: a0c68de2fadd545185740d95264312687a131e6cdb7d448993ad20b86e9b8084
3
+ metadata.gz: bc61d9c6666321d0823056381091a1b0ca2a3f342cb08bde2d7b580c111c5655
4
+ data.tar.gz: 2a386b6cf75fdba8750e5e96c9892ee2cd716c453177fc95478ff5712adaad4e
5
5
  SHA512:
6
- metadata.gz: 3d30fc99a86495bc0cd41100b4b563cec11eab0f05ea14afa3ae8f9cd51fe91ebaa3bfe961d368e895caf7aac0ca88016cc0c90d85ead87f03b0c1678fc1ecf4
7
- data.tar.gz: 56318868c3beea5f5c67635d2a6ec6b3d9e624bfff9ac1c310b0f6b0c4871768ed9213ae69289b91a9f74f7ae69a8f0bd2b1e0f8283852b0670c26ff137eeccd
6
+ metadata.gz: 2a8f08ac7c0de83359f0d1e8eaf88e596f50d8440e320ee0e11b5fa0eb109af99901711f315de664db6bab750bcd96d78170cff419830e8c377cd86749dbaaa3
7
+ data.tar.gz: b4422f3ecdf07fd952e4351447777d03e9606003aa74ce1024402261f483814f0c0d2504792e641e2be20ada505ad9cfa4a54abe496d47ef47dcc7429b127a70
@@ -27,9 +27,11 @@ module XRay
27
27
  subsegment = XRay.recorder.begin_subsegment name, namespace: 'remote'
28
28
  # subsegment is nil in case of context missing
29
29
  return if subsegment.nil?
30
- subsegment.start_time = transaction.time.to_f
30
+ # Rails 7.1 introduced time measurement in milliseconds instead seconds of causing xray-sdk to report wrong duration for transaction calls.
31
+ # This is being handled in rails 7.2 and later. https://github.com/rails/rails/pull/50779
32
+ subsegment.start_time = (::Rails::VERSION::MAJOR == 7 and ::Rails::VERSION::MINOR == 1) ? transaction.time.to_f/1000 : transaction.time.to_f
31
33
  subsegment.sql = sql
32
- XRay.recorder.end_subsegment end_time: transaction.end.to_f
34
+ XRay.recorder.end_subsegment end_time: (::Rails::VERSION::MAJOR == 7 and ::Rails::VERSION::MINOR == 1) ? transaction.end.to_f/1000 : transaction.end.to_f
33
35
  end
34
36
 
35
37
  private
@@ -3,19 +3,82 @@ require 'aws-xray-sdk/logger'
3
3
 
4
4
  module XRay
5
5
  module Plugins
6
- # Due to lack of ECS container metadata service, the only host information
7
- # available is the host name.
8
6
  module ECS
9
7
  include Logging
10
8
 
11
9
  ORIGIN = 'AWS::ECS::Container'.freeze
12
10
 
11
+ # Only compatible with v4!
12
+ # The v3 metadata url does not contain cloudwatch informations
13
+ METADATA_ENV_KEY = 'ECS_CONTAINER_METADATA_URI_V4'
14
+
13
15
  def self.aws
14
- @@aws ||= begin
15
- { ecs: { container: Socket.gethostname } }
16
+ metadata = get_metadata()
17
+
18
+ begin
19
+ metadata[:ecs][:container] = Socket.gethostname
16
20
  rescue StandardError => e
17
- @@aws = {}
18
21
  Logging.logger.warn %(cannot get the ecs container hostname due to: #{e.message}.)
22
+ metadata[:ecs][:container] = nil
23
+ end
24
+
25
+ @@aws = {
26
+ ecs: metadata[:ecs],
27
+ cloudwatch_logs: metadata[:cloudwatch_logs]
28
+ }
29
+ end
30
+
31
+ private
32
+
33
+ def self.get_metadata()
34
+ begin
35
+ metadata_uri = URI(ENV[METADATA_ENV_KEY])
36
+ req = Net::HTTP::Get.new(metadata_uri)
37
+ metadata_json = do_request(req)
38
+ return parse_metadata(metadata_json)
39
+ rescue StandardError => e
40
+ Logging.logger.warn %(cannot get the ecs instance metadata due to: #{e.message}. Make sure you are using Fargate platform version >=1.4.0)
41
+ { ecs: {}, cloudwatch_logs: {} }
42
+ end
43
+ end
44
+
45
+ def self.parse_metadata(json_str)
46
+ data = JSON(json_str)
47
+
48
+ metadata = {
49
+ ecs: {
50
+ container_arn: data['ContainerARN'],
51
+ },
52
+ cloudwatch_logs: {
53
+ log_group: data["LogOptions"]['awslogs-group'],
54
+ log_region: data["LogOptions"]['awslogs-region'],
55
+ arn: data['ContainerARN']
56
+ }
57
+ }
58
+ metadata
59
+ end
60
+
61
+ def self.do_request(request)
62
+ begin
63
+ response = Net::HTTP.start(request.uri.hostname, read_timeout: 1) { |http|
64
+ http.request(request)
65
+ }
66
+
67
+ if response.code == '200'
68
+ return response.body
69
+ else
70
+ raise(StandardError.new('Unsuccessful response::' + response.code + '::' + response.message))
71
+ end
72
+ rescue StandardError => e
73
+ # Two attempts in total to complete the request successfully
74
+ @retries ||= 0
75
+ if @retries < 1
76
+ @retries += 1
77
+ retry
78
+ else
79
+ Logging.logger.warn %(Failed to complete request due to: #{e.message}.)
80
+ raise e
81
+ end
19
82
  end
20
83
  end
21
84
  end
@@ -1,3 +1,3 @@
1
1
  module XRay
2
- VERSION = '0.14.0'
2
+ VERSION = '0.16.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-xray-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-05 00:00:00.000000000 Z
11
+ date: 2024-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-xray