Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions src/mod/main.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,24 +49,24 @@
begin
# TODO: pass args, e.g context, location, etc...
injected, err = injector.call

if err
telemetry.emit([
{ :name => 'library_entrypoint.error', :tags => ["reason:#{err}"] },
], { :result => report.errored(err) })
else
log.info { 'inject:complete' }

telemetry.emit([
{ :name => 'library_entrypoint.complete' },
], { :result => report.completed(injected) })
end
rescue StandardError => e
log.info { 'inject:error' }

telemetry.emit([
{ :name => 'library_entrypoint.error', :tags => ["reason:exc.fatal"] },
], { :result => report.raised(e) })
end

if err
telemetry.emit([
{ :name => 'library_entrypoint.error', :tags => ["reason:#{err}"] },
], { :result => report.errored(err) })
else
log.info { 'inject:complete' }

telemetry.emit([
{ :name => 'library_entrypoint.complete' },
], { :result => report.completed(injected) })
end
end
end
34 changes: 19 additions & 15 deletions src/mod/telemetry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,30 +32,34 @@ def payload(pid, version, result, points)
private :payload

def emit(*args)
opts = args.last.is_a?(Hash) ? args.pop : {}
points = args.shift
begin
opts = args.last.is_a?(Hash) ? args.pop : {}
points = args.shift

LOG.info { "telemetry:emit points:#{points.inspect}" }
LOG.info { "telemetry:emit points:#{points.inspect}" }

pid = opts[:pid] || PROCESS.pid # TODO: emit from isolate
version = opts[:version] || package_version
result = opts[:result]
pid = opts[:pid] || PROCESS.pid # TODO: emit from isolate
version = opts[:version] || package_version
result = opts[:result]

forwarder = ENV['DD_TELEMETRY_FORWARDER_PATH']
forwarder = ENV['DD_TELEMETRY_FORWARDER_PATH']

return unless forwarder && !forwarder.empty?
return unless forwarder && !forwarder.empty?

rd, wr = IO.pipe
rd, wr = IO.pipe

pid = PROCESS.spawn(forwarder, 'library_entrypoint', { :in => rd, [:out, :err] => '/dev/null' })
pid = PROCESS.spawn(forwarder, 'library_entrypoint', { :in => rd, [:out, :err] => '/dev/null' })

wr.write(payload(pid, version, result, points))
wr.flush
wr.close
wr.write(payload(pid, version, result, points))
wr.flush
wr.close

cpid, status = Process.waitpid2(pid)
cpid, status = Process.waitpid2(pid)

LOG.info { "telemetry:forwarder cpid:#{cpid} status:#{status}" }
LOG.info { "telemetry:forwarder cpid:#{cpid} status:#{status}" }
rescue StandardError => exc
LOG.info { "telemetry:error exc:#{exc}" }
end
end

# TODO: extract to a package module
Expand Down