Make apps uniform

This commit is contained in:
Loic Nageleisen 2024-05-22 16:36:51 +02:00
parent de989153e4
commit cfba5211d0
Signed by: lloeki
GPG key ID: D05DAEE6889F94C2
6 changed files with 127 additions and 13 deletions

View file

@ -7,6 +7,12 @@ rack:
ruby: '>= 2.4.0' ruby: '>= 2.4.0'
gem: gem:
rackup: '>= 0' rackup: '>= 0'
# thin is not (yet) compatible with rack 3
# TODO: don't bring in an unneeded server (e.g wiht this puma brings in thin)
thin:
github: 'lloeki/thin'
branch: 'rack-3'
# TODO: add blanket incompatibility declaration via e.g
# thin: false # thin: false
sinatra: sinatra:
- version: '~> 1.0' - version: '~> 1.0'
@ -62,6 +68,16 @@ rails:
- version: '~> 7.1.0' - version: '~> 7.1.0'
# 3.3 has a bug: https://bugs.ruby-lang.org/issues/20085 # 3.3 has a bug: https://bugs.ruby-lang.org/issues/20085
ruby: ['>= 2.7', '< 3.3'] ruby: ['>= 2.7', '< 3.3']
gem:
sinatra: '>= 0.a'
grape: '>= 0.a'
pry: '> 0'
# thin is not (yet) compatible with rack 3
thin:
github: 'lloeki/thin'
branch: 'rack-3'
# TODO: add blanket incompatibility declaration via e.g
# thin: false
grape: grape:
- version: ['~> 1.0', '< 1.3'] - version: ['~> 1.0', '< 1.3']
ruby: ['>= 2.0', '< 3.0'] ruby: ['>= 2.0', '< 3.0']
@ -85,3 +101,9 @@ grape:
ruby: ['>= 2.6'] ruby: ['>= 2.6']
gem: gem:
rackup: '>= 0' rackup: '>= 0'
# thin is not (yet) compatible with rack 3
thin:
github: 'lloeki/thin'
branch: 'rack-3'
# TODO: add blanket incompatibility declaration via e.g
# thin: false

28
grape.rb Normal file → Executable file
View file

@ -1,3 +1,5 @@
#!/usr/bin/env ruby
begin begin
require "bundler/inline" require "bundler/inline"
rescue LoadError => e rescue LoadError => e
@ -21,15 +23,17 @@ end.tap do |m|
end.first end.first
server = ARGV[1] || 'thin' server = ARGV[1] || 'thin'
gems = match.fetch('gem', {})
gemfile(true) do gemfile(true) do
source "https://rubygems.org" source "https://rubygems.org"
ruby match['ruby'] ruby match['ruby']
gem 'grape', "~> #{version}.0" gem 'grape', "~> #{version}.0"
gem server gem server unless gems.key?(server)
gem 'ddtrace'
match.fetch('gem', []).each do |name, requirement| gems.each do |name, requirement|
gem name, requirement gem name, requirement
end end
end end
@ -59,6 +63,9 @@ class API < Grape::API
end end
App = Rack::Builder.new do App = Rack::Builder.new do
use Datadog::Tracing::Contrib::Rack::TraceMiddleware
use Datadog::AppSec::Contrib::Rack::RequestMiddleware
# precompile routes # precompile routes
API.compile! API.compile!
@ -69,5 +76,22 @@ App = Rack::Builder.new do
# run Rack::Cascade.new [Web, API] # run Rack::Cascade.new [Web, API]
end end
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
c.tracing.instrument :grape
c.appsec.enabled = true
c.appsec.instrument :rack
end
Rack::Server.new(app: App, Host: '0.0.0.0', Port: 3000).start Rack::Server.new(app: App, Host: '0.0.0.0', Port: 3000).start

28
rack.rb Normal file → Executable file
View file

@ -1,3 +1,5 @@
#!/usr/bin/env ruby
begin begin
require "bundler/inline" require "bundler/inline"
rescue LoadError => e rescue LoadError => e
@ -21,15 +23,17 @@ end.tap do |m|
end.first end.first
server = ARGV[1] || 'thin' server = ARGV[1] || 'thin'
gems = match.fetch('gem', {})
gemfile(true) do gemfile(true) do
source "https://rubygems.org" source "https://rubygems.org"
ruby match['ruby'] ruby match['ruby'] if match['ruby']
gem 'rack', "~> #{version}.0" gem 'rack', "~> #{version}.0"
gem server gem server unless gems.key?(server)
gem 'ddtrace'
match.fetch('gem', []).each do |name, requirement| gems.each do |name, requirement|
gem name, requirement gem name, requirement
end end
end end
@ -37,7 +41,25 @@ end
require 'rack' require 'rack'
require 'json' 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
c.appsec.enabled = true
c.appsec.instrument :rack
end
App = Rack::Builder.new do App = Rack::Builder.new do
use Datadog::Tracing::Contrib::Rack::TraceMiddleware
use Datadog::AppSec::Contrib::Rack::RequestMiddleware
map "/hello/world" do map "/hello/world" do
run -> (env) { [200, { 'content-type' => 'application/json' }, [JSON.dump({ hello: :world })]] } run -> (env) { [200, { 'content-type' => 'application/json' }, [JSON.dump({ hello: :world })]] }
end end

23
rails.rb Normal file → Executable file
View file

@ -1,3 +1,5 @@
#!/usr/bin/env ruby
begin begin
require "bundler/inline" require "bundler/inline"
rescue LoadError => e rescue LoadError => e
@ -21,16 +23,17 @@ end.tap do |m|
end.first end.first
server = ARGV[1] || 'thin' server = ARGV[1] || 'thin'
gems = match.fetch('gem', {})
gemfile(true) do gemfile(true) do
source "https://rubygems.org" source "https://rubygems.org"
ruby match['ruby'] ruby match['ruby']
gem 'rails', "~> #{version}.0" gem 'rails', "~> #{version}.0"
gem server gem server unless gems.key?(server)
gem 'ddtrace', path: '../../Datadog/dd-trace-rb', require: 'ddtrace/auto_instrument' gem 'ddtrace'
match.fetch('gem', []).each do |name, requirement| gems.each do |name, requirement|
gem name, requirement gem name, requirement
end end
end end
@ -163,6 +166,7 @@ class App < Rails::Application
get "/hello/world" => "hello#world" get "/hello/world" => "hello#world"
get "/hello/:id" => "hello#world" get "/hello/:id" => "hello#world"
#mount SimpleEngine::Engine => "/"
mount SimpleEngine::Engine => "/engine/simple" mount SimpleEngine::Engine => "/engine/simple"
mount EndpointEngine::Engine => "/engine/endpoint" mount EndpointEngine::Engine => "/engine/endpoint"
mount RackApp => "/rack" mount RackApp => "/rack"
@ -193,13 +197,24 @@ class HelloController < action_controller_api_class
end end
end end
require 'ddtrace'
Datadog.configure do |c| Datadog.configure do |c|
c.diagnostics.debug = ['true', '1'].include?(ENV['DD_DIAGNOSTICS']) c.diagnostics.debug = true
c.telemetry.enabled = true
c.remote.enabled = true
c.tracing.enabled = true c.tracing.enabled = true
c.tracing.instrument :rack c.tracing.instrument :rack
c.tracing.instrument :rails c.tracing.instrument :rails
c.tracing.instrument :sinatra c.tracing.instrument :sinatra
c.tracing.instrument :grape c.tracing.instrument :grape
c.appsec.enabled = true
c.appsec.instrument :rack
c.appsec.instrument :rails
end end
SimpleApp::App.initialize! SimpleApp::App.initialize!

View file

@ -13,6 +13,14 @@ in llvm.stdenv.mkDerivation {
# for psych >= 5.1 pulled by rails 7.1 # for psych >= 5.1 pulled by rails 7.1
pkgs.libyaml.dev pkgs.libyaml.dev
# some packages want gcc/g++
gcc
# tools
pkgs.vegeta
pkgs.graphviz
pkgs.gnuplot
]; ];

31
sinatra.rb Normal file → Executable file
View file

@ -1,3 +1,5 @@
#!/usr/bin/env ruby
begin begin
require "bundler/inline" require "bundler/inline"
rescue LoadError => e rescue LoadError => e
@ -21,15 +23,17 @@ end.tap do |m|
end.first end.first
server = ARGV[1] || 'thin' server = ARGV[1] || 'thin'
gems = match.fetch('gem', {})
gemfile(true) do gemfile(true) do
source "https://rubygems.org" source "https://rubygems.org"
ruby match['ruby'] if match['ruby'] ruby match['ruby'] if match['ruby']
gem 'sinatra', "~> #{version}.0" gem 'sinatra', "~> #{version}.0"
gem server gem server unless gems.key?(server)
gem 'ddtrace'
match.fetch('gem', []).each do |name, requirement| gems.each do |name, requirement|
gem name, requirement gem name, requirement
end end
end end
@ -37,11 +41,30 @@ end
require 'sinatra/base' require 'sinatra/base'
require 'json' 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 class App < Sinatra::Base
get '/hello/world' do use Datadog::Tracing::Contrib::Rack::TraceMiddleware
get '/hello/:id' do
status 200 status 200
content_type :json content_type :json
body JSON.dump({ hello: :world }) body JSON.dump({ hello: params[:id] || 'world' })
end end
end end