ddtrace 0.45.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +79 -0
- data/.rubocop.yml +250 -7
- data/.rubocop_todo.yml +396 -0
- data/Appraisals +15 -0
- data/CHANGELOG.md +68 -1
- data/Gemfile +38 -3
- data/Rakefile +5 -23
- data/ddtrace.gemspec +6 -36
- data/docs/DevelopmentGuide.md +28 -0
- data/docs/GettingStarted.md +8 -9
- data/integration/README.md +68 -0
- data/integration/apps/rack/.dockerignore +1 -0
- data/integration/apps/rack/.envrc.sample +1 -0
- data/integration/apps/rack/.gitignore +4 -0
- data/integration/apps/rack/.rspec +1 -0
- data/integration/apps/rack/Dockerfile +25 -0
- data/integration/apps/rack/Dockerfile-ci +11 -0
- data/integration/apps/rack/Gemfile +24 -0
- data/integration/apps/rack/README.md +93 -0
- data/integration/apps/rack/app/acme.rb +80 -0
- data/integration/apps/rack/app/datadog.rb +17 -0
- data/integration/apps/rack/bin/run +22 -0
- data/integration/apps/rack/bin/setup +17 -0
- data/integration/apps/rack/bin/test +24 -0
- data/integration/apps/rack/config.ru +6 -0
- data/integration/apps/rack/config/puma.rb +14 -0
- data/integration/apps/rack/config/unicorn.rb +23 -0
- data/integration/apps/rack/docker-compose.ci.yml +62 -0
- data/integration/apps/rack/docker-compose.yml +78 -0
- data/integration/apps/rack/script/build-images +38 -0
- data/integration/apps/rack/script/ci +50 -0
- data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rack/spec/spec_helper.rb +16 -0
- data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/.dockerignore +1 -0
- data/integration/apps/rails-five/.env +3 -0
- data/integration/apps/rails-five/.envrc.sample +1 -0
- data/integration/apps/rails-five/.gitignore +30 -0
- data/integration/apps/rails-five/Dockerfile +25 -0
- data/integration/apps/rails-five/Dockerfile-ci +11 -0
- data/integration/apps/rails-five/Gemfile +104 -0
- data/integration/apps/rails-five/README.md +94 -0
- data/integration/apps/rails-five/Rakefile +6 -0
- data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
- data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
- data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
- data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
- data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
- data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
- data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
- data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
- data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
- data/integration/apps/rails-five/app/models/application_record.rb +3 -0
- data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/models/test.rb +2 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
- data/integration/apps/rails-five/bin/bundle +3 -0
- data/integration/apps/rails-five/bin/rails +9 -0
- data/integration/apps/rails-five/bin/rake +9 -0
- data/integration/apps/rails-five/bin/run +24 -0
- data/integration/apps/rails-five/bin/setup +27 -0
- data/integration/apps/rails-five/bin/spring +17 -0
- data/integration/apps/rails-five/bin/test +21 -0
- data/integration/apps/rails-five/bin/update +28 -0
- data/integration/apps/rails-five/config.ru +5 -0
- data/integration/apps/rails-five/config/application.rb +97 -0
- data/integration/apps/rails-five/config/boot.rb +4 -0
- data/integration/apps/rails-five/config/cable.yml +10 -0
- data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
- data/integration/apps/rails-five/config/database.yml +28 -0
- data/integration/apps/rails-five/config/environment.rb +5 -0
- data/integration/apps/rails-five/config/environments/development.rb +51 -0
- data/integration/apps/rails-five/config/environments/production.rb +82 -0
- data/integration/apps/rails-five/config/environments/test.rb +43 -0
- data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
- data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
- data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
- data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
- data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
- data/integration/apps/rails-five/config/locales/en.yml +33 -0
- data/integration/apps/rails-five/config/puma.rb +24 -0
- data/integration/apps/rails-five/config/routes.rb +11 -0
- data/integration/apps/rails-five/config/spring.rb +6 -0
- data/integration/apps/rails-five/config/unicorn.rb +29 -0
- data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
- data/integration/apps/rails-five/db/schema.rb +23 -0
- data/integration/apps/rails-five/db/seeds.rb +7 -0
- data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
- data/integration/apps/rails-five/docker-compose.yml +100 -0
- data/integration/apps/rails-five/lib/tasks/.keep +0 -0
- data/integration/apps/rails-five/log/.keep +0 -0
- data/integration/apps/rails-five/public/robots.txt +1 -0
- data/integration/apps/rails-five/script/build-images +35 -0
- data/integration/apps/rails-five/script/ci +50 -0
- data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
- data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/storage/.keep +0 -0
- data/integration/apps/rails-five/tmp/.keep +0 -0
- data/integration/apps/rails-five/vendor/.keep +0 -0
- data/integration/apps/ruby/.dockerignore +1 -0
- data/integration/apps/ruby/.envrc.sample +1 -0
- data/integration/apps/ruby/.gitignore +2 -0
- data/integration/apps/ruby/Dockerfile +25 -0
- data/integration/apps/ruby/Dockerfile-ci +11 -0
- data/integration/apps/ruby/Gemfile +11 -0
- data/integration/apps/ruby/README.md +70 -0
- data/integration/apps/ruby/agent.yaml +3 -0
- data/integration/apps/ruby/app/datadog.rb +13 -0
- data/integration/apps/ruby/app/fibonacci.rb +58 -0
- data/integration/apps/ruby/bin/run +20 -0
- data/integration/apps/ruby/bin/setup +17 -0
- data/integration/apps/ruby/bin/test +21 -0
- data/integration/apps/ruby/docker-compose.ci.yml +51 -0
- data/integration/apps/ruby/docker-compose.yml +63 -0
- data/integration/apps/ruby/script/build-images +38 -0
- data/integration/apps/ruby/script/ci +50 -0
- data/integration/images/agent/Dockerfile +2 -0
- data/integration/images/agent/agent.yaml +3 -0
- data/integration/images/include/datadog/analyzer.rb +71 -0
- data/integration/images/include/datadog/demo_env.rb +101 -0
- data/integration/images/include/http-health-check +33 -0
- data/integration/images/ruby/2.0/Dockerfile +54 -0
- data/integration/images/ruby/2.1/Dockerfile +54 -0
- data/integration/images/ruby/2.2/Dockerfile +54 -0
- data/integration/images/ruby/2.3/Dockerfile +70 -0
- data/integration/images/ruby/2.4/Dockerfile +54 -0
- data/integration/images/ruby/2.5/Dockerfile +54 -0
- data/integration/images/ruby/2.6/Dockerfile +54 -0
- data/integration/images/ruby/2.7/Dockerfile +54 -0
- data/integration/images/ruby/3.0/Dockerfile +54 -0
- data/integration/images/wrk/Dockerfile +33 -0
- data/integration/images/wrk/scripts/entrypoint.sh +17 -0
- data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
- data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
- data/integration/script/build-images +43 -0
- data/lib/ddtrace.rb +0 -5
- data/lib/ddtrace/analytics.rb +2 -0
- data/lib/ddtrace/buffer.rb +4 -4
- data/lib/ddtrace/configuration.rb +1 -1
- data/lib/ddtrace/configuration/base.rb +1 -1
- data/lib/ddtrace/configuration/components.rb +2 -2
- data/lib/ddtrace/configuration/option_definition.rb +1 -3
- data/lib/ddtrace/configuration/options.rb +2 -3
- data/lib/ddtrace/configuration/settings.rb +17 -3
- data/lib/ddtrace/context.rb +5 -6
- data/lib/ddtrace/context_provider.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
- data/lib/ddtrace/contrib/action_view/event.rb +1 -1
- data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +17 -5
- data/lib/ddtrace/contrib/active_record/utils.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +2 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
- data/lib/ddtrace/contrib/auto_instrument.rb +1 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +1 -0
- data/lib/ddtrace/contrib/aws/services.rb +1 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +1 -4
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -10
- data/lib/ddtrace/contrib/cucumber/ext.rb +0 -2
- data/lib/ddtrace/contrib/cucumber/formatter.rb +5 -11
- data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -1
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +5 -5
- data/lib/ddtrace/contrib/excon/middleware.rb +2 -6
- data/lib/ddtrace/contrib/extensions.rb +1 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
- data/lib/ddtrace/contrib/grape/endpoint.rb +8 -15
- data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
- data/lib/ddtrace/contrib/http/instrumentation.rb +5 -5
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +2 -3
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +2 -3
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
- data/lib/ddtrace/contrib/patcher.rb +1 -1
- data/lib/ddtrace/contrib/qless/qless_job.rb +1 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +1 -0
- data/lib/ddtrace/contrib/que/ext.rb +19 -19
- data/lib/ddtrace/contrib/que/tracer.rb +1 -1
- data/lib/ddtrace/contrib/racecar/event.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
- data/lib/ddtrace/contrib/rack/middlewares.rb +5 -10
- data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
- data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
- data/lib/ddtrace/contrib/redis/quantize.rb +1 -0
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
- data/lib/ddtrace/contrib/registry.rb +2 -2
- data/lib/ddtrace/contrib/resque/resque_job.rb +2 -0
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -10
- data/lib/ddtrace/contrib/rspec/example.rb +24 -10
- data/lib/ddtrace/contrib/rspec/ext.rb +0 -3
- data/lib/ddtrace/contrib/rspec/integration.rb +1 -1
- data/lib/ddtrace/contrib/rspec/patcher.rb +0 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -1
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +2 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
- data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -3
- data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
- data/lib/ddtrace/contrib/sneakers/tracer.rb +2 -4
- data/lib/ddtrace/contrib/status_code_matcher.rb +5 -3
- data/lib/ddtrace/correlation.rb +1 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +2 -1
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
- data/lib/ddtrace/ext/ci.rb +2 -2
- data/lib/ddtrace/ext/distributed.rb +1 -1
- data/lib/ddtrace/ext/http.rb +1 -1
- data/lib/ddtrace/ext/runtime.rb +1 -1
- data/lib/ddtrace/forced_tracing.rb +2 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/metrics.rb +10 -6
- data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
- data/lib/ddtrace/opentracer/span.rb +2 -6
- data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
- data/lib/ddtrace/patcher.rb +2 -3
- data/lib/ddtrace/pin.rb +3 -52
- data/lib/ddtrace/pipeline/span_filter.rb +1 -1
- data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
- data/lib/ddtrace/quantization/http.rb +1 -0
- data/lib/ddtrace/runtime/cgroup.rb +1 -1
- data/lib/ddtrace/runtime/container.rb +2 -2
- data/lib/ddtrace/sampler.rb +1 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +1 -0
- data/lib/ddtrace/span.rb +7 -7
- data/lib/ddtrace/sync_writer.rb +7 -10
- data/lib/ddtrace/tracer.rb +1 -1
- data/lib/ddtrace/transport/http.rb +1 -3
- data/lib/ddtrace/transport/http/adapters/net.rb +9 -4
- data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
- data/lib/ddtrace/transport/http/builder.rb +2 -0
- data/lib/ddtrace/transport/http/traces.rb +2 -3
- data/lib/ddtrace/transport/io.rb +1 -1
- data/lib/ddtrace/transport/traces.rb +3 -0
- data/lib/ddtrace/utils/time.rb +25 -1
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers.rb +5 -0
- data/lib/ddtrace/workers/async.rb +8 -0
- data/lib/ddtrace/workers/loop.rb +3 -0
- data/lib/ddtrace/workers/polling.rb +1 -0
- data/lib/ddtrace/workers/trace_writer.rb +9 -10
- data/lib/ddtrace/writer.rb +3 -3
- metadata +133 -400
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
- data/lib/ddtrace/monkey.rb +0 -58
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Rails 5: Demo application for Datadog APM
|
|
2
|
+
|
|
3
|
+
A generic Rails 5 web application with some common use scenarios.
|
|
4
|
+
|
|
5
|
+
For generating Datadog APM traces and profiles.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Install [direnv](https://github.com/direnv/direnv) for applying local settings.
|
|
10
|
+
|
|
11
|
+
1. `cp .envrc.sample .envrc` and add your Datadog API key.
|
|
12
|
+
2. `direnv allow` to load the env var.
|
|
13
|
+
3. `cp docker-compose.yml.sample docker-compose.yml` and configure if necessary.
|
|
14
|
+
4. `docker-compose run --rm api bin/setup`
|
|
15
|
+
|
|
16
|
+
## Running the application
|
|
17
|
+
|
|
18
|
+
### To monitor performance of Docker containers with Datadog
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
docker run --rm --name dd-agent -v /var/run/docker.sock:/var/run/docker.sock:ro -v /proc/:/host/proc/:ro -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e API_KEY=$DD_API_KEY datadog/docker-dd-agent:latest
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Starting the web server
|
|
25
|
+
|
|
26
|
+
Run `docker-compose up` to auto-start the webserver. It should bind to `localhost:80`.
|
|
27
|
+
|
|
28
|
+
Alternatively, you can run it manually with:
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
docker-compose run --rm -p 80:80 api bin/dd-demo <process>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The `<process>` argument is optional, and will default to `DD_DEMO_ENV_PROCESS` if not provided. See [Processes](#processes) for more details.
|
|
35
|
+
|
|
36
|
+
##### Processes
|
|
37
|
+
|
|
38
|
+
Within the container, run `bin/dd-demo <process>` where `<process>` is one of the following values:
|
|
39
|
+
|
|
40
|
+
- `webrick`: WEBrick web server
|
|
41
|
+
- `console`: Rails console
|
|
42
|
+
- `irb`: IRB session
|
|
43
|
+
|
|
44
|
+
Alternatively, set `DD_DEMO_ENV_PROCESS` to run a particular process by default when `bin/dd-demo` is run.
|
|
45
|
+
|
|
46
|
+
##### Features
|
|
47
|
+
|
|
48
|
+
Set `DD_DEMO_ENV_PROCESS` to a comma-delimited list of any of the following values to activate the feature:
|
|
49
|
+
|
|
50
|
+
- `tracing`: Tracing instrumentation
|
|
51
|
+
- `profiling`: Profiling (NOTE: Must also set `DD_PROFILING_ENABLED` to match.)
|
|
52
|
+
- `debug`: Enable diagnostic debug mode
|
|
53
|
+
- `analytics`: Enable trace analytics
|
|
54
|
+
- `runtime_metrics`: Enable runtime metrics
|
|
55
|
+
- `pprof_to_file`: Dump profiling pprof to file instead of agent.
|
|
56
|
+
|
|
57
|
+
e.g. `DD_DEMO_ENV_PROCESS=tracing,profiling`
|
|
58
|
+
|
|
59
|
+
##### Routes
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
# Health check
|
|
63
|
+
curl -v localhost/health
|
|
64
|
+
|
|
65
|
+
# Basic test scenarios
|
|
66
|
+
curl -v localhost/basic/fibonacci
|
|
67
|
+
curl -v -XPOST localhost/basic/everything
|
|
68
|
+
|
|
69
|
+
# Job test scenarios
|
|
70
|
+
curl -v -XPOST localhost/jobs
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Load tester
|
|
74
|
+
|
|
75
|
+
Docker configuration automatically creates and runs [Wrk](https://github.com/wg/wrk) load testing containers. By default it runs the `basic/everything` scenario described in the `wrk` image to give a baseload.
|
|
76
|
+
|
|
77
|
+
You can modify the `loadtester_a` container in `docker-compose.yml` to change the load type or scenario run. Set the container's `command` to any set of arguments `wrk` accepts.
|
|
78
|
+
|
|
79
|
+
You can also define your own custom scenario by creating a LUA file, mounting it into the container, and passing it as an argument via `command`.
|
|
80
|
+
|
|
81
|
+
### Running integration tests
|
|
82
|
+
|
|
83
|
+
You can run integration tests using the following and substituting for the Ruby major and minor version (e.g. `2.7`)
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
./bin/build-images -v <RUBY_VERSION>
|
|
87
|
+
./bin/ci -v <RUBY_VERSION>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Or inside a running container:
|
|
91
|
+
|
|
92
|
+
```sh
|
|
93
|
+
./bin/rspec
|
|
94
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require "#{Rails.root}/app/jobs/test_job"
|
|
2
|
+
|
|
3
|
+
class BasicController < ApplicationController
|
|
4
|
+
# Reads & writes from cache, reads from DB, and queues a Resque job.
|
|
5
|
+
#
|
|
6
|
+
# Example trace:
|
|
7
|
+
#
|
|
8
|
+
# ----------------------- Rack -----------------------------
|
|
9
|
+
# -------------- ActionController --------------------
|
|
10
|
+
# --- ActiveSupport -- ActiveRecord -- Resque ---
|
|
11
|
+
# ----- Redis ---- -- Redis --
|
|
12
|
+
#
|
|
13
|
+
def default
|
|
14
|
+
# Read from the database
|
|
15
|
+
records = Test.where(version: 0)
|
|
16
|
+
|
|
17
|
+
# Queue job
|
|
18
|
+
Resque.enqueue(Jobs::Test, job_id: request.request_id, records: records.map(&:to_json))
|
|
19
|
+
|
|
20
|
+
# Return response
|
|
21
|
+
render json: { job_id: request.request_id }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Runs a recursive implementation of fibonacci.
|
|
25
|
+
# Provides a basic load on CPU, stack frames, response time.
|
|
26
|
+
def fibonacci
|
|
27
|
+
fib(rand(25..35))
|
|
28
|
+
head :ok
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def fib(n)
|
|
34
|
+
n <= 1 ? n : fib(n-1) + fib(n-2)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require "#{Rails.root}/app/jobs/test_job"
|
|
2
|
+
|
|
3
|
+
class JobsController < ApplicationController
|
|
4
|
+
def create
|
|
5
|
+
# Queue job
|
|
6
|
+
job_id = SecureRandom.uuid
|
|
7
|
+
Resque.enqueue(Jobs::Test, job_id: job_id)
|
|
8
|
+
|
|
9
|
+
# Return response
|
|
10
|
+
render json: { job_id: job_id }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= yield %>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
begin
|
|
3
|
+
load File.expand_path('spring', __dir__)
|
|
4
|
+
rescue LoadError => e
|
|
5
|
+
raise unless e.message.include?('spring')
|
|
6
|
+
end
|
|
7
|
+
APP_PATH = File.expand_path('../config/application', __dir__)
|
|
8
|
+
require_relative '../config/boot'
|
|
9
|
+
require 'rails/commands'
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# Start demo process
|
|
4
|
+
puts "\n== Starting demo process =="
|
|
5
|
+
|
|
6
|
+
profiling = Datadog::DemoEnv.feature?('profiling') ? 'DD_PROFILING_ENABLED=true ddtracerb exec ' : ''
|
|
7
|
+
process = (ARGV[0] || Datadog::DemoEnv.process)
|
|
8
|
+
command = case process
|
|
9
|
+
when 'puma'
|
|
10
|
+
"bundle exec #{profiling}puma -C /app/config/puma.rb"
|
|
11
|
+
when 'unicorn'
|
|
12
|
+
"bundle exec #{profiling}unicorn -c /app/config/unicorn.rb"
|
|
13
|
+
when 'console'
|
|
14
|
+
"bundle exec #{profiling}rails c"
|
|
15
|
+
when 'irb'
|
|
16
|
+
"bundle exec #{profiling}irb"
|
|
17
|
+
when nil, ''
|
|
18
|
+
abort("\n== ERROR: Must specify a demo process! ==")
|
|
19
|
+
else
|
|
20
|
+
abort("\n== ERROR: Unknown demo process '#{process}' ==")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
puts "Run: #{command}"
|
|
24
|
+
Kernel.exec(command)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'uri'
|
|
4
|
+
include FileUtils
|
|
5
|
+
|
|
6
|
+
# path to your application root.
|
|
7
|
+
APP_ROOT = File.expand_path('..', __dir__)
|
|
8
|
+
|
|
9
|
+
def system!(*args)
|
|
10
|
+
puts "Run: #{args.join(' ')}"
|
|
11
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
chdir APP_ROOT do
|
|
15
|
+
puts "\n== Installing dependencies =="
|
|
16
|
+
system! 'gem install bundler --conservative'
|
|
17
|
+
system('bundle check') || system!('bundle install')
|
|
18
|
+
|
|
19
|
+
puts "\n== Preparing database =="
|
|
20
|
+
database_uri = URI(ENV['DATABASE_URL'])
|
|
21
|
+
system! 'until wget mysql:3306 > /dev/null 2>&1; do : sleep 1; done'
|
|
22
|
+
system! 'bin/rails db:create'
|
|
23
|
+
system! 'bin/rails db:migrate'
|
|
24
|
+
|
|
25
|
+
puts "\n== Removing old logs and tempfiles =="
|
|
26
|
+
system! 'bin/rails log:clear tmp:clear'
|
|
27
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# This file loads Spring without using Bundler, in order to be fast.
|
|
4
|
+
# It gets overwritten when you run the `spring binstub` command.
|
|
5
|
+
|
|
6
|
+
unless defined?(Spring)
|
|
7
|
+
require 'rubygems'
|
|
8
|
+
require 'bundler'
|
|
9
|
+
|
|
10
|
+
lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
|
|
11
|
+
spring = lockfile.specs.detect { |spec| spec.name == 'spring' }
|
|
12
|
+
if spring
|
|
13
|
+
Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
|
|
14
|
+
gem 'spring', spring.version
|
|
15
|
+
require 'spring/binstub'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
include FileUtils
|
|
4
|
+
|
|
5
|
+
# path to your application root.
|
|
6
|
+
APP_ROOT = File.expand_path('..', __dir__)
|
|
7
|
+
|
|
8
|
+
def system!(*args)
|
|
9
|
+
puts "Run: #{args.join(' ')}"
|
|
10
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
chdir APP_ROOT do
|
|
14
|
+
if ENV['TEST_INTEGRATION']
|
|
15
|
+
puts "\n== Wait for healthy HTTP server... =="
|
|
16
|
+
system!('bash /vendor/dd-demo/http-health-check')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
puts "\n== Run test suite =="
|
|
20
|
+
system!('rspec')
|
|
21
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
include FileUtils
|
|
4
|
+
|
|
5
|
+
# path to your application root.
|
|
6
|
+
APP_ROOT = File.expand_path('..', __dir__)
|
|
7
|
+
|
|
8
|
+
def system!(*args)
|
|
9
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
chdir APP_ROOT do
|
|
13
|
+
# This script is a way to update your development environment automatically.
|
|
14
|
+
# Add necessary update steps to this file.
|
|
15
|
+
|
|
16
|
+
puts '== Installing dependencies =='
|
|
17
|
+
system! 'gem install bundler --conservative'
|
|
18
|
+
system('bundle check') || system!('bundle install')
|
|
19
|
+
|
|
20
|
+
puts "\n== Updating database =="
|
|
21
|
+
system! 'bin/rails db:migrate'
|
|
22
|
+
|
|
23
|
+
puts "\n== Removing old logs and tempfiles =="
|
|
24
|
+
system! 'bin/rails log:clear tmp:clear'
|
|
25
|
+
|
|
26
|
+
puts "\n== Restarting application server =="
|
|
27
|
+
system! 'bin/rails restart'
|
|
28
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require_relative 'boot'
|
|
2
|
+
|
|
3
|
+
# require "rails"
|
|
4
|
+
# Pick the frameworks you want:
|
|
5
|
+
require "active_model/railtie"
|
|
6
|
+
require "active_job/railtie"
|
|
7
|
+
require "active_record/railtie"
|
|
8
|
+
require "action_controller/railtie"
|
|
9
|
+
require "action_mailer/railtie"
|
|
10
|
+
require "action_view/railtie"
|
|
11
|
+
require "action_cable/engine"
|
|
12
|
+
# require "sprockets/railtie"
|
|
13
|
+
# require "rails/test_unit/railtie"
|
|
14
|
+
|
|
15
|
+
# Require the gems listed in Gemfile, including any gems
|
|
16
|
+
# you've limited to :test, :development, or :production.
|
|
17
|
+
Bundler.require(*Rails.groups)
|
|
18
|
+
|
|
19
|
+
class TraceMiddleware
|
|
20
|
+
def initialize(app)
|
|
21
|
+
@app = app
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def call(env)
|
|
25
|
+
Datadog.tracer.trace('web.request', service: 'acme', resource: env['REQUEST_PATH']) do |span|
|
|
26
|
+
Datadog.runtime_metrics.associate_with_span(span)
|
|
27
|
+
@app.call(env)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class ShortCircuitMiddleware
|
|
33
|
+
def initialize(app)
|
|
34
|
+
@app = app
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def call(env)
|
|
38
|
+
return [200, {}, []]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class ErrorMiddleware
|
|
43
|
+
def initialize(app)
|
|
44
|
+
@app = app
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def call(env)
|
|
48
|
+
@app.call(env)
|
|
49
|
+
raise
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class CustomError < StandardError
|
|
54
|
+
def message
|
|
55
|
+
'Custom error message!'
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class CacheMiddleware
|
|
60
|
+
def initialize(app)
|
|
61
|
+
@app = app
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def call(env)
|
|
65
|
+
request_id = env['action_dispatch.request_id']
|
|
66
|
+
|
|
67
|
+
# NOTE: Disabled for now, suspected to cause memory growth.
|
|
68
|
+
# Fetch from cache
|
|
69
|
+
# Rails.cache.fetch(request_id) { request_id }
|
|
70
|
+
|
|
71
|
+
@app.call(env)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
module Acme
|
|
76
|
+
class Application < Rails::Application
|
|
77
|
+
# Initialize configuration defaults for originally generated Rails version.
|
|
78
|
+
config.load_defaults 5.2
|
|
79
|
+
|
|
80
|
+
# Settings in config/environments/* take precedence over those specified here.
|
|
81
|
+
# Application configuration can go into files in config/initializers
|
|
82
|
+
# -- all .rb files in that directory are automatically loaded after loading
|
|
83
|
+
# the framework and any gems in your application.
|
|
84
|
+
# config.middleware.use TraceMiddleware
|
|
85
|
+
# config.middleware.use ShortCircuitMiddleware
|
|
86
|
+
# config.middleware.use ErrorMiddleware
|
|
87
|
+
config.middleware.use CacheMiddleware
|
|
88
|
+
|
|
89
|
+
# Only loads a smaller set of middleware suitable for API only apps.
|
|
90
|
+
# Middleware like session, flash, cookies can be added back manually.
|
|
91
|
+
# Skip views, helpers and assets when generating a new resource.
|
|
92
|
+
config.api_only = true
|
|
93
|
+
|
|
94
|
+
config.cache_store = :redis_cache_store, { url: ENV['REDIS_URL'] }
|
|
95
|
+
config.action_controller.perform_caching = true
|
|
96
|
+
end
|
|
97
|
+
end
|