mirror of
https://github.com/puppetlabs/vmfloaty.git
synced 2026-01-26 05:28:40 -05:00
Add OpenTelemetry client instrumentation
This commit is contained in:
parent
6d1130bc8b
commit
8f8630540a
3 changed files with 63 additions and 0 deletions
|
|
@ -14,6 +14,7 @@ require 'vmfloaty/utils'
|
||||||
require 'vmfloaty/service'
|
require 'vmfloaty/service'
|
||||||
require 'vmfloaty/ssh'
|
require 'vmfloaty/ssh'
|
||||||
require 'vmfloaty/logger'
|
require 'vmfloaty/logger'
|
||||||
|
require 'vmfloaty/otel'
|
||||||
|
|
||||||
class Vmfloaty
|
class Vmfloaty
|
||||||
include Commander::Methods
|
include Commander::Methods
|
||||||
|
|
@ -45,6 +46,8 @@ class Vmfloaty
|
||||||
use_token = !options.notoken
|
use_token = !options.notoken
|
||||||
force = options.force
|
force = options.force
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
if args.empty?
|
if args.empty?
|
||||||
FloatyLogger.error 'No operating systems provided to obtain. See `floaty get --help` for more information on how to get VMs.'
|
FloatyLogger.error 'No operating systems provided to obtain. See `floaty get --help` for more information on how to get VMs.'
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -98,6 +101,8 @@ class Vmfloaty
|
||||||
service = Service.new(options, config)
|
service = Service.new(options, config)
|
||||||
filter = args[0]
|
filter = args[0]
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
if options.active
|
if options.active
|
||||||
# list active vms
|
# list active vms
|
||||||
if service.type == "ABS"
|
if service.type == "ABS"
|
||||||
|
|
@ -146,6 +151,8 @@ class Vmfloaty
|
||||||
service = Service.new(options, config)
|
service = Service.new(options, config)
|
||||||
hostname = args[0]
|
hostname = args[0]
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
query_req = service.query(verbose, hostname)
|
query_req = service.query(verbose, hostname)
|
||||||
pp query_req
|
pp query_req
|
||||||
end
|
end
|
||||||
|
|
@ -171,6 +178,8 @@ class Vmfloaty
|
||||||
hostname = args[0]
|
hostname = args[0]
|
||||||
modify_all = options.all
|
modify_all = options.all
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
if hostname.nil? && !modify_all
|
if hostname.nil? && !modify_all
|
||||||
FloatyLogger.error 'ERROR: Provide a hostname or specify --all.'
|
FloatyLogger.error 'ERROR: Provide a hostname or specify --all.'
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -236,6 +245,8 @@ class Vmfloaty
|
||||||
delete_all = options.all
|
delete_all = options.all
|
||||||
force = options.f
|
force = options.f
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
failures = []
|
failures = []
|
||||||
successes = []
|
successes = []
|
||||||
|
|
||||||
|
|
@ -324,6 +335,8 @@ class Vmfloaty
|
||||||
service = Service.new(options, config)
|
service = Service.new(options, config)
|
||||||
hostname = args[0]
|
hostname = args[0]
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
snapshot_req = service.snapshot(verbose, hostname)
|
snapshot_req = service.snapshot(verbose, hostname)
|
||||||
rescue TokenError, ModifyError => e
|
rescue TokenError, ModifyError => e
|
||||||
|
|
@ -352,6 +365,8 @@ class Vmfloaty
|
||||||
hostname = args[0]
|
hostname = args[0]
|
||||||
snapshot_sha = args[1] || options.snapshot
|
snapshot_sha = args[1] || options.snapshot
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
FloatyLogger.info "Two snapshot arguments were given....using snapshot #{snapshot_sha}" if args[1] && options.snapshot
|
FloatyLogger.info "Two snapshot arguments were given....using snapshot #{snapshot_sha}" if args[1] && options.snapshot
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
@ -377,6 +392,9 @@ class Vmfloaty
|
||||||
c.action do |_, options|
|
c.action do |_, options|
|
||||||
verbose = options.verbose || config['verbose']
|
verbose = options.verbose || config['verbose']
|
||||||
service = Service.new(options, config)
|
service = Service.new(options, config)
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
if options.json
|
if options.json
|
||||||
pp service.status(verbose)
|
pp service.status(verbose)
|
||||||
else
|
else
|
||||||
|
|
@ -397,6 +415,8 @@ class Vmfloaty
|
||||||
verbose = options.verbose || config['verbose']
|
verbose = options.verbose || config['verbose']
|
||||||
service = Service.new(options, config)
|
service = Service.new(options, config)
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
summary = service.summary(verbose)
|
summary = service.summary(verbose)
|
||||||
pp summary
|
pp summary
|
||||||
exit 0
|
exit 0
|
||||||
|
|
@ -418,6 +438,8 @@ class Vmfloaty
|
||||||
service = Service.new(options, config)
|
service = Service.new(options, config)
|
||||||
action = args.first
|
action = args.first
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
case action
|
case action
|
||||||
when 'get'
|
when 'get'
|
||||||
|
|
@ -462,6 +484,8 @@ class Vmfloaty
|
||||||
service = Service.new(options, config)
|
service = Service.new(options, config)
|
||||||
use_token = !options.notoken
|
use_token = !options.notoken
|
||||||
|
|
||||||
|
Otel.configure_tracing(service)
|
||||||
|
|
||||||
if args.empty?
|
if args.empty?
|
||||||
FloatyLogger.error 'No operating systems provided to obtain. See `floaty ssh --help` for more information on how to get VMs.'
|
FloatyLogger.error 'No operating systems provided to obtain. See `floaty ssh --help` for more information on how to get VMs.'
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
||||||
35
lib/vmfloaty/otel.rb
Normal file
35
lib/vmfloaty/otel.rb
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'opentelemetry-api'
|
||||||
|
require 'opentelemetry-instrumentation-faraday'
|
||||||
|
require 'opentelemetry-sdk'
|
||||||
|
require 'opentelemetry/exporter/jaeger'
|
||||||
|
require 'socket'
|
||||||
|
require 'vmfloaty/version'
|
||||||
|
|
||||||
|
class Otel
|
||||||
|
def configure_tracing(service)
|
||||||
|
span_processor = if service.config['jaeger_endpoint']
|
||||||
|
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
||||||
|
exporter: OpenTelemetry::Exporter::Jaeger::CollectorExporter.new(endpoint: tracing_jaeger_host)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
||||||
|
exporter: OpenTelemetry::SDK::Trace::Export::NoopSpanExporter.new
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenTelemetry::SDK.configure do |c|
|
||||||
|
c.add_span_processor(span_processor)
|
||||||
|
c.resource = OpenTelemetry::SDK::Resources::Resource.create(
|
||||||
|
{
|
||||||
|
'net.host.name' => Socket.gethostname,
|
||||||
|
'net.peer.name' => URI.parse(service.config['url']).host
|
||||||
|
}
|
||||||
|
)
|
||||||
|
c.service_name = 'vmfloaty'
|
||||||
|
c.service_version = Vmfloaty::VERSION
|
||||||
|
c.use 'OpenTelemetry::Instrumentation::Faraday'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -27,4 +27,8 @@ Gem::Specification.new do |s|
|
||||||
s.add_dependency 'colorize', '~> 0.8.1'
|
s.add_dependency 'colorize', '~> 0.8.1'
|
||||||
s.add_dependency 'commander', '>= 4.4.3', '< 4.6.0'
|
s.add_dependency 'commander', '>= 4.4.3', '< 4.6.0'
|
||||||
s.add_dependency 'faraday', '~> 0.17.0'
|
s.add_dependency 'faraday', '~> 0.17.0'
|
||||||
|
s.add_dependency 'opentelemetry-api', '0.7.0'
|
||||||
|
s.add_dependency 'opentelemetry-exporter-jaeger', '~> 0.7.0'
|
||||||
|
s.add_dependency 'opentelemetry-instrumentation-faraday', '~> 0.7.0'
|
||||||
|
s.add_dependency 'opentelemetry-sdk', '0.7.0'
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue