philbot-scheduler 1.3.0 → 1.4.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/lib/scheduler.rb +57 -6
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4472e204e081f36de3b834f457ee7d78e75d8246230634634695ea2a68738a0
4
- data.tar.gz: 510d0942cab662914f2db004bc82c18a6c4b7fd85af7db77ba95cb4f23619b25
3
+ metadata.gz: debf37bf197fe5adb00fadb7bfa6772d33514fe53171bb1d2f0bb9cbd356d5f0
4
+ data.tar.gz: 39a42710a6ef5422cfefbd49f513647cbe87c40a2f318d6cbd8a0f01be613a80
5
5
  SHA512:
6
- metadata.gz: 1954d824a669a4dcedf11c1d3baa75a44d7a36bc18f95dce1f44f04fa591cd449f013bec5ca62a6d4daac28ce4b164386f9ad70183042ffdd2fb9f46ba48db51
7
- data.tar.gz: 8751f9ec4d6b8168b88681c7360aa35e59472b3ac5b1e76f5b44b1571815d2b734198a196b5e6dba4adcdc24c9e6ce2568e05d607d96fa9df0c3bb43d7ae7a5c
6
+ metadata.gz: 7a8af00df59f782b8af9526a8c56c7510c726d1655c2ff4df96377415ea25b0dc081426f103453b178de13ca8626774839f04460214e0d9213ce5b6236349100
7
+ data.tar.gz: 2b9ce5e9df7d0d7e9e8eaf038adcd91e5ac908082ea73730f00a5e4321d620f421f05984f87e4f9402bce35a177aea7d09af6505fd2121839adcdfe2567a72ab
data/Gemfile CHANGED
@@ -2,4 +2,4 @@ source "https://rubygems.org"
2
2
  gem 'opentelemetry-sdk'
3
3
  gem 'opentelemetry-exporter-otlp'
4
4
  gem 'opentelemetry-instrumentation-all'
5
- gem 'opentelemetry-resource-detectors'
5
+ gem 'opentelemetry-resource_detectors'
data/lib/scheduler.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'securerandom'
1
2
  require 'opentelemetry/sdk'
2
3
  require 'opentelemetry/exporter/otlp'
3
4
  require 'opentelemetry/instrumentation/all'
@@ -7,17 +8,65 @@ require 'net/http'
7
8
 
8
9
  $stdout.sync = true
9
10
 
10
- OpenTelemetry::SDK.configure do |c|
11
- c.service_name = ENV['SERVICE_NAME']
12
- c.service_version = ENV['SERVICE_VERSION']
13
- c.use_all()
14
- 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'
15
15
  begin
16
- 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')
17
17
  rescue
18
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({})
19
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
20
68
  c.resource = OpenTelemetry::Resource::Detectors::AutoDetector.detect
69
+
21
70
  c.add_span_processor(
22
71
  OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
23
72
  OpenTelemetry::Exporter::OTLP::Exporter.new(
@@ -26,6 +75,8 @@ OpenTelemetry::SDK.configure do |c|
26
75
  )
27
76
  )
28
77
  )
78
+
79
+ c.use_all()
29
80
  end
30
81
 
31
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.0
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