philbot-scheduler 1.3.1 → 1.4.0

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 +56 -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: debf37bf197fe5adb00fadb7bfa6772d33514fe53171bb1d2f0bb9cbd356d5f0
4
+ data.tar.gz: 39a42710a6ef5422cfefbd49f513647cbe87c40a2f318d6cbd8a0f01be613a80
5
5
  SHA512:
6
- metadata.gz: 0c0da0ffbf7cecaaa73344508495c755a026884414dc115f8c7aff8f0d315c3211ef5e42fe494b453dc60f17b5def9abee7c325f66e45cadc6fadf2ab9940da7
7
- data.tar.gz: 5a59579482d20a5f49506edbde8f9188965a89efa9d6eddc456bfae56e6d4af39d5fd6a4afb8021311b89a975585e85d9d5b27f233db1ccae41588209a6788c8
6
+ metadata.gz: 7a8af00df59f782b8af9526a8c56c7510c726d1655c2ff4df96377415ea25b0dc081426f103453b178de13ca8626774839f04460214e0d9213ce5b6236349100
7
+ data.tar.gz: 2b9ce5e9df7d0d7e9e8eaf038adcd91e5ac908082ea73730f00a5e4321d620f421f05984f87e4f9402bce35a177aea7d09af6505fd2121839adcdfe2567a72ab
data/lib/scheduler.rb CHANGED
@@ -8,21 +8,65 @@ 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 = Net::HTTP.put(URI('http://169.254.169.254/latest/api/token'), { 'X-aws-ec2-metadata-token-ttl-seconds' => '60' }).body
33
+ identity = JSON.parse(Net::HTTP.get(URI('http://169.254.169.254/latest/dynamic/instance-identity/document'), { 'X-aws-ec2-metadata-token' => token }).body)
34
+ hostname = Net::HTTP.get(URI('http://169.254.169.254/latest/meta-data/hostname'), { 'X-aws-ec2-metadata-token' => token }).body
35
+ resource_attributes = {}
36
+ unless identity.nil?
37
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PROVIDER] = 'aws'
38
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PLATFORM] = 'aws_ec2'
39
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_ACCOUNT_ID] = identity['accountId']
40
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_REGION] = identity['region']
41
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_AVAILABILITY_ZONE] = identity['availabilityZone']
42
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_ID] = identity['instanceId']
43
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_TYPE] = identity['instanceType']
44
+ resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_NAME] = hostname
45
+ end
46
+ resource_attributes.delete_if { |_key, value| value.nil? || value.empty? }
47
+ OpenTelemetry::SDK::Resources::Resource.create(resource_attributes)
48
+ end
49
+ end
50
+
51
+ module DynatraceResourceDetector
52
+ extend self
53
+ def detect()
54
+ for name in ["dt_metadata_e617c525669e072eebe3d0f08212e8f2.properties", "/var/lib/dynatrace/enrichment/dt_metadata.properties"] do
55
+ begin
56
+ return OpenTelemetry::SDK::Resources::Resource.create(Hash[*File.read(name.start_with?("/var") ? name : File.read(name)).split(/[=\n]+/)])
57
+ rescue
58
+ end
59
+ end
60
+ return OpenTelemetry::SDK::Resources::Resource.create({})
24
61
  end
62
+ end
63
+
64
+ OpenTelemetry::SDK.configure do |c|
65
+ c.resource = DynatraceResourceDetector.detect
66
+ c.resource = AwsEC2ResourceDetector.detect
67
+ c.resource = ServiceResourceDetector.detect
25
68
  c.resource = OpenTelemetry::Resource::Detectors::AutoDetector.detect
69
+
26
70
  c.add_span_processor(
27
71
  OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
28
72
  OpenTelemetry::Exporter::OTLP::Exporter.new(
@@ -31,6 +75,8 @@ OpenTelemetry::SDK.configure do |c|
31
75
  )
32
76
  )
33
77
  )
78
+
79
+ c.use_all()
34
80
  end
35
81
 
36
82
  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.0
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