appoptics_apm 4.2.2 → 4.2.3

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -3
  3. data/Gemfile +0 -2
  4. data/README.md +119 -95
  5. data/examples/SDK/01_basic_tracing.rb +67 -0
  6. data/ext/oboe_metal/src/VERSION +1 -1
  7. data/lib/appoptics_apm/api.rb +10 -9
  8. data/lib/appoptics_apm/api/layerinit.rb +1 -1
  9. data/lib/appoptics_apm/api/logging.rb +41 -14
  10. data/lib/appoptics_apm/api/metrics.rb +34 -0
  11. data/lib/appoptics_apm/api/profiling.rb +5 -0
  12. data/lib/appoptics_apm/api/tracing.rb +33 -148
  13. data/lib/appoptics_apm/api/util.rb +3 -9
  14. data/lib/appoptics_apm/base.rb +11 -12
  15. data/lib/appoptics_apm/frameworks/padrino/templates.rb +1 -1
  16. data/lib/appoptics_apm/frameworks/rails.rb +1 -1
  17. data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/utils.rb +1 -1
  18. data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/utils5x.rb +1 -1
  19. data/lib/appoptics_apm/inst/bunny-consumer.rb +1 -2
  20. data/lib/appoptics_apm/inst/delayed_job.rb +4 -4
  21. data/lib/appoptics_apm/inst/em-http-request.rb +1 -1
  22. data/lib/appoptics_apm/inst/rack.rb +1 -0
  23. data/lib/appoptics_apm/inst/redis.rb +1 -1
  24. data/lib/appoptics_apm/inst/resque.rb +1 -1
  25. data/lib/appoptics_apm/inst/sidekiq-worker.rb +1 -3
  26. data/lib/appoptics_apm/loading.rb +3 -4
  27. data/lib/appoptics_apm/logger.rb +1 -1
  28. data/lib/appoptics_apm/sdk.rb +317 -0
  29. data/lib/appoptics_apm/support.rb +0 -17
  30. data/lib/appoptics_apm/test.rb +1 -1
  31. data/lib/appoptics_apm/util.rb +4 -3
  32. data/lib/appoptics_apm/version.rb +1 -1
  33. data/lib/appoptics_apm/xtrace.rb +3 -3
  34. data/lib/joboe_metal.rb +2 -4
  35. data/lib/oboe_metal.rb +5 -5
  36. data/lib/rails/generators/appoptics_apm/templates/appoptics_apm_initializer.rb +5 -4
  37. data/run_tests_docker.rb +6 -0
  38. metadata +5 -9
  39. data/examples/DNT.md +0 -35
  40. data/examples/instrumenting_metal_controller.rb +0 -8
  41. data/examples/puma_on_heroku_config.rb +0 -17
  42. data/examples/tracing_async_threads.rb +0 -124
  43. data/examples/tracing_background_jobs.rb +0 -53
  44. data/examples/tracing_forked_processes.rb +0 -99
  45. data/examples/unicorn_on_heroku_config.rb +0 -28
@@ -1,99 +0,0 @@
1
- #
2
- # This sample demonstrates how to instrument a main loop that
3
- # retrieves work and calls fork to do the actual work
4
- #
5
-
6
- require 'math'
7
- require 'oboe'
8
-
9
- AppOpticsAPM::Config[:tracing_mode] = :always
10
- AppOpticsAPM::Config[:verbose] = true
11
-
12
- # The parent process/loop which collects data
13
- Kernel.loop do
14
- # For each loop, we instrument the work retrieval. These traces
15
- # will show up as layer 'get_the_work'.
16
- AppOpticsAPM::API.start_trace('get_the_work') do
17
- work = get_the_work
18
-
19
- # Loop through work and pass to `do_the_work` method
20
- # that spawns a thread each time
21
- work.each do |job|
22
- fork do
23
- # Since the context is copied from the parent process, we clear it
24
- # and start a new trace via `AppOpticsAPM::API.start_trace`.
25
- AppOpticsAPM::Context.clear
26
- result = nil
27
-
28
- AppOpticsAPM::API.start_trace('do_the_work', nil, :job_id => job.id) do
29
- result = do_the_work(job)
30
- end
31
-
32
- result
33
- end
34
- end
35
- end
36
- end
37
-
38
- ##
39
- # get_the_work
40
- #
41
- # Method to retrieve work to do
42
- #
43
- def get_the_work
44
- # We'll just return random integers as a
45
- # fake work load
46
- w = []
47
- w << rand(25)
48
- w << rand(25)
49
- w << rand(25)
50
- end
51
-
52
- ##
53
- # do_the_work
54
- #
55
- # The work-horse method
56
- #
57
- def do_the_work(job_to_do)
58
- i = job_to_do
59
- i * Math::PI
60
- end
61
-
62
- #########################################################################
63
- # Notes
64
- #########################################################################
65
-
66
- # If your parent process only forks a small number of processes per loop (< 5..10),
67
- # you may want to mark the child traces as asynchronous and have them directly
68
- # linked to the parent tracing context.
69
- #
70
- # The benefit of this is that instead of having two independent traces (parent
71
- # and child), you will have a single view of the parent trace showing the
72
- # spawned child process and it's performance in the AppOptics dashboard.
73
- #
74
- # To do this:
75
- # 1. Don't clear the context in the child process
76
- # 2. Use `AppOpticsAPM::API.trace` instead
77
- # 3. Pass the `Async` flag to mark this child as asynchronous
78
- #
79
- Kernel.loop do
80
- AppOpticsAPM::API.start_trace('get_the_work') do
81
-
82
- work = get_the_work
83
-
84
- work.each do |job|
85
- fork do
86
- result = nil
87
- # 1 Don't clear context
88
- # 2 Use `AppOpticsAPM::API.trace` instead
89
- # 3 Pass the Async flag
90
- AppOpticsAPM::API.trace('do_the_work', {:job_id => job.id, :Async => 1 }) do
91
- result = do_the_work(job)
92
- end
93
-
94
- result
95
- end
96
- end
97
- end
98
- sleep 5
99
- end
@@ -1,28 +0,0 @@
1
- worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
2
- timeout 15
3
- preload_app true
4
-
5
- before_fork do |server, worker|
6
- Signal.trap 'TERM' do
7
- puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
8
- Process.kill 'QUIT', Process.pid
9
- end
10
-
11
- defined?(ActiveRecord::Base) and
12
- ActiveRecord::Base.connection.disconnect!
13
-
14
- defined?(::AppOpticsAPM) and
15
- ::AppOpticsAPM.disconnect!
16
- end
17
-
18
- after_fork do |server, worker|
19
- Signal.trap 'TERM' do
20
- puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
21
- end
22
-
23
- defined?(ActiveRecord::Base) and
24
- ActiveRecord::Base.establish_connection
25
-
26
- defined?(::AppOpticsAPM) and
27
- ::AppOpticsAPM.reconnect!
28
- end