minimal-rack/sinatra.rb

71 lines
1.6 KiB
Ruby
Executable file

#!/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