philbot-scheduler 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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