#!/usr/bin/env ruby begin require "bundler/inline" rescue LoadError => e $stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler" raise e end require 'yaml' compatibility = YAML.load(File.read('compatibility')) kind = File.basename(__FILE__, '.rb') version = ARGV[0] || raise(ArgumentError, 'missing version') match = compatibility[kind].select do |e| Gem::Requirement.new(e['version']).satisfied_by?(Gem::Version.new(version)) end.tap do |m| if m.empty? raise ArgumentError, "unmatched requirement for #{kind}:#{version}" elsif !m.one? raise ArgumentError, "ambiguous version range for #{kind}:#{version}" end end.first server = ARGV[1] || 'thin' gems = match.fetch('gem', {}) gemfile(true) do source "https://rubygems.org" ruby match['ruby'] if match['ruby'] gem 'sinatra', "~> #{version}.0" gem server unless gems.key?(server) gem 'ddtrace' gems.each do |name, requirement| gem name, requirement end end require 'sinatra/base' require 'json' require 'ddtrace' Datadog.configure do |c| c.diagnostics.debug = true c.telemetry.enabled = true c.remote.enabled = true c.tracing.enabled = true c.tracing.instrument :rack, service_name: 'minimal-rack' c.tracing.instrument :sinatra, service_name: 'minimal-sinatra' c.appsec.enabled = true c.appsec.instrument :rack c.appsec.instrument :sinatra end class App < Sinatra::Base use Datadog::Tracing::Contrib::Rack::TraceMiddleware get '/hello/:id' do status 200 content_type :json body JSON.dump({ hello: params[:id] || 'world' }) end end Rack::Server.new(app: App, Host: '0.0.0.0', Port: 3000).start