philbot-scheduler 1.3.1 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/scheduler.rb +58 -10
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfdb1868af424341b615986e599981eabc136f8c3383544f273dd178b95ff5e0
4
- data.tar.gz: 563da33d33b14f2c42a6f60380c9f8e70bd4059c2610bbe6f3f0ab4e32abeab1
3
+ metadata.gz: 49a7fca6e5c448e17f2bfd0e36c93e1f2e87ea78230094142d03470b3db469d4
4
+ data.tar.gz: d7486a4b06f9399bb6b3131e23ba93f818f755c54f393a9c59cb299315275bba
5
5
  SHA512:
6
- metadata.gz: 0c0da0ffbf7cecaaa73344508495c755a026884414dc115f8c7aff8f0d315c3211ef5e42fe494b453dc60f17b5def9abee7c325f66e45cadc6fadf2ab9940da7
7
- data.tar.gz: 5a59579482d20a5f49506edbde8f9188965a89efa9d6eddc456bfae56e6d4af39d5fd6a4afb8021311b89a975585e85d9d5b27f233db1ccae41588209a6788c8
6
+ metadata.gz: 368bedf690b2b4a8b50308af4ffc3cb8dc62aae499da6f840caffcc4df5d6c33b211190fce1be12c7fd823b553798705d346d02d6989235feeb3584ed499f17d
7
+ data.tar.gz: 0dad12df59bf85179bed8b236b5a6e7c08ffa99c9c80c9fd3f6943b891a97c757dae9927f5cf51974b34996fc8e6b8be1a967cdbcee2c4aa3b7b048f925a844e
data/lib/scheduler.rb CHANGED
@@ -8,21 +8,67 @@ require 'net/http'
8
8
 
9
9
  $stdout.sync = true
10
10
 
11
- OpenTelemetry::SDK.configure do |c|
12
- c.use_all()
13
- c.resource = OpenTelemetry::SDK::Resources::Resource.create({
14
- OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'Philbot',
15
- OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => 'Philbot Scheduler',
16
- OpenTelemetry::SemanticConventions::Resource::SERVICE_INSTANCE_ID => SecureRandom.uuid,
17
- OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => ENV['SERVICE_VERSION']
18
- })
19
- for name in ["dt_metadata_e617c525669e072eebe3d0f08212e8f2.properties", "/var/lib/dynatrace/enrichment/dt_metadata.properties"] do
11
+ module ServiceResourceDetector
12
+ extend self
13
+ def detect()
14
+ version = 'unknown'
20
15
  begin
21
- c.resource = OpenTelemetry::SDK::Resources::Resource.create(Hash[*File.read(name.start_with?("/var") ? name : File.read(name)).split(/[=\n]+/)])
16
+ version = File.read('version.txt')
22
17
  rescue
23
18
  end
19
+ return OpenTelemetry::SDK::Resources::Resource.create({
20
+ OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'Philbot',
21
+ OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => 'Philbot Scheduler',
22
+ OpenTelemetry::SemanticConventions::Resource::SERVICE_INSTANCE_ID => SecureRandom.uuid,
23
+ OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => version
24
+ })
25
+ end
26
+ end
27
+
28
+ module AwsEC2ResourceDetector
29
+ extend self
30
+
31
+ def detect
32
+ token_request = Net::HTTP.new(URI('http://169.254.169.254/latest/api/token'))
33
+ token_request['X-aws-ec2-metadata-token-ttl-seconds'] = '60'
34
+ token = token_request.send_request('PUT', '/latest/api/token').body
35
+ identity = JSON.parse(Net::HTTP.get(URI('http://169.254.169.254/latest/dynamic/instance-identity/document'), { 'X-aws-ec2-metadata-token' => token }).body)
36
+ hostname = Net::HTTP.get(URI('http://169.254.169.254/latest/meta-data/hostname'), { 'X-aws-ec2-metadata-token' => token }).body
37
+ resource_attributes = {}
38
+ unless identity.nil?
39
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PROVIDER] = 'aws'
40
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PLATFORM] = 'aws_ec2'
41
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_ACCOUNT_ID] = identity['accountId']
42
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_REGION] = identity['region']
43
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_AVAILABILITY_ZONE] = identity['availabilityZone']
44
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_ID] = identity['instanceId']
45
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_TYPE] = identity['instanceType']
46
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_NAME] = hostname
47
+ end
48
+ resource_attributes.delete_if { |_key, value| value.nil? || value.empty? }
49
+ OpenTelemetry::SDK::Resources::Resource.create(resource_attributes)
50
+ end
51
+ end
52
+
53
+ module DynatraceResourceDetector
54
+ extend self
55
+ def detect()
56
+ for name in ["dt_metadata_e617c525669e072eebe3d0f08212e8f2.properties", "/var/lib/dynatrace/enrichment/dt_metadata.properties"] do
57
+ begin
58
+ return OpenTelemetry::SDK::Resources::Resource.create(Hash[*File.read(name.start_with?("/var") ? name : File.read(name)).split(/[=\n]+/)])
59
+ rescue
60
+ end
61
+ end
62
+ return OpenTelemetry::SDK::Resources::Resource.create({})
24
63
  end
64
+ end
65
+
66
+ OpenTelemetry::SDK.configure do |c|
67
+ c.resource = DynatraceResourceDetector.detect
68
+ c.resource = AwsEC2ResourceDetector.detect
69
+ c.resource = ServiceResourceDetector.detect
25
70
  c.resource = OpenTelemetry::Resource::Detectors::AutoDetector.detect
71
+
26
72
  c.add_span_processor(
27
73
  OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
28
74
  OpenTelemetry::Exporter::OTLP::Exporter.new(
@@ -31,6 +77,8 @@ OpenTelemetry::SDK.configure do |c|
31
77
  )
32
78
  )
33
79
  )
80
+
81
+ c.use_all()
34
82
  end
35
83
 
36
84
  tracer = OpenTelemetry.tracer_provider.tracer('scheduler', '1.0')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: philbot-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philipp Lengauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-01 00:00:00.000000000 Z
11
+ date: 2023-09-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: ''
14
14
  email: p.lengauer@gmail.com