influxdb-rails 1.0.1.beta2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rubocop.yml +18 -0
  3. data/.github/workflows/spec.yml +32 -0
  4. data/.rubocop.yml +36 -7
  5. data/CHANGELOG.md +22 -1
  6. data/README.md +43 -34
  7. data/gemfiles/Gemfile.rails-6.0.x +1 -2
  8. data/gemfiles/Gemfile.rails-6.1.x +9 -0
  9. data/influxdb-rails.gemspec +2 -2
  10. data/lib/influxdb/rails/middleware/active_job_subscriber.rb +11 -11
  11. data/lib/influxdb/rails/middleware/request_subscriber.rb +9 -1
  12. data/lib/influxdb/rails/railtie.rb +0 -1
  13. data/lib/influxdb/rails/sql/normalizer.rb +3 -3
  14. data/lib/influxdb/rails/tags.rb +2 -2
  15. data/lib/influxdb/rails/values.rb +1 -1
  16. data/lib/influxdb/rails/version.rb +1 -1
  17. data/lib/influxdb-rails.rb +1 -2
  18. data/lib/rails/generators/influxdb/templates/initializer.rb +4 -0
  19. data/sample-dashboard/Dockerfile +2 -2
  20. data/sample-dashboard/README.md +21 -28
  21. data/sample-dashboard/Rakefile +10 -5
  22. data/sample-dashboard/Ruby On Rails ActiveJob.json +600 -0
  23. data/sample-dashboard/{Ruby On Rails Performance (per Action).json → Ruby On Rails Performance per Action.json } +343 -589
  24. data/sample-dashboard/{Ruby On Rails Performance (per Request).json → Ruby On Rails Performance per Request.json } +361 -211
  25. data/sample-dashboard/Ruby On Rails Performance.json +1347 -1139
  26. data/sample-dashboard/Ruby On Rails Requests.json +834 -0
  27. data/sample-dashboard/Ruby On Rails Slowlog by Action.json +278 -0
  28. data/sample-dashboard/Ruby On Rails Slowlog by Request.json +277 -0
  29. data/sample-dashboard/Ruby On Rails Slowlog by SQL.json +328 -0
  30. data/sample-dashboard/docker-compose.yml +6 -1
  31. data/sample-dashboard/provisioning/activejob.json +600 -0
  32. data/sample-dashboard/provisioning/performance-action.json +334 -580
  33. data/sample-dashboard/provisioning/performance-request.json +355 -205
  34. data/sample-dashboard/provisioning/performance.json +1336 -1128
  35. data/sample-dashboard/provisioning/requests.json +834 -0
  36. data/sample-dashboard/provisioning/slowlog-action.json +278 -0
  37. data/sample-dashboard/provisioning/slowlog-requests.json +277 -0
  38. data/sample-dashboard/provisioning/slowlog-sql.json +328 -0
  39. data/spec/requests/action_controller_metrics_spec.rb +24 -10
  40. data/spec/requests/action_mailer_deliver_metrics_spec.rb +4 -11
  41. data/spec/requests/action_view_collection_metrics_spec.rb +7 -16
  42. data/spec/requests/action_view_partial_metrics_spec.rb +6 -15
  43. data/spec/requests/action_view_template_metrics_spec.rb +6 -15
  44. data/spec/requests/active_job_enqueue_metrics_spec.rb +6 -15
  45. data/spec/requests/active_job_perform_metrics_spec.rb +5 -11
  46. data/spec/requests/active_record_instantiation_metrics_spec.rb +7 -16
  47. data/spec/requests/active_record_sql_metrics_spec.rb +13 -29
  48. data/spec/requests/block_inistrumentation_spec.rb +8 -17
  49. data/spec/requests/context_spec.rb +1 -1
  50. data/spec/requests/logger_spec.rb +1 -1
  51. data/spec/spec_helper.rb +2 -1
  52. data/spec/support/rails5/app.rb +3 -4
  53. data/spec/support/rails6/app.rb +3 -4
  54. data/spec/unit/tags.rb +47 -0
  55. metadata +25 -14
  56. data/.travis.yml +0 -28
  57. data/spec/requests/active_job_perform_start_metrics_spec.rb +0 -68
@@ -16,7 +16,7 @@ module InfluxDB
16
16
  {
17
17
  method: "#{payload[:controller]}##{payload[:action]}",
18
18
  hook: "process_action",
19
- status: payload[:status],
19
+ status: status,
20
20
  format: payload[:format],
21
21
  http_method: payload[:method],
22
22
  exception: payload[:exception]&.first,
@@ -38,6 +38,14 @@ module InfluxDB
38
38
  configuration.client.time_precision
39
39
  )
40
40
  end
41
+
42
+ def status
43
+ if payload[:exception] && ::Rails::VERSION::MAJOR < 7
44
+ ActionDispatch::ExceptionWrapper.status_code_for_exception(payload[:exception].first)
45
+ else
46
+ payload[:status]
47
+ end
48
+ end
41
49
  end
42
50
  end
43
51
  end
@@ -32,7 +32,6 @@ module InfluxDB
32
32
  "sql.active_record" => Middleware::SqlSubscriber,
33
33
  "instantiation.active_record" => Middleware::ActiveRecordSubscriber,
34
34
  "enqueue.active_job" => Middleware::ActiveJobSubscriber,
35
- "perform_start.active_job" => Middleware::ActiveJobSubscriber,
36
35
  "perform.active_job" => Middleware::ActiveJobSubscriber,
37
36
  "deliver.action_mailer" => Middleware::ActionMailerSubscriber,
38
37
  "block_instrumentation.influxdb_rails" => Middleware::BlockInstrumentationSubscriber,
@@ -8,9 +8,9 @@ module InfluxDB
8
8
 
9
9
  def perform
10
10
  query.squish!
11
- query.gsub!(/(\s(=|>|<|>=|<=|<>|!=)\s)('[^']+'|[\$\+\-\w\.]+)/, '\1xxx')
12
- query.gsub!(/(\sIN\s)\([^\(\)]+\)/i, '\1(xxx)')
13
- regex = /(\sBETWEEN\s)('[^']+'|[\+\-\w\.]+)(\sAND\s)('[^']+'|[\+\-\w\.]+)/i
11
+ query.gsub!(/(\s(=|>|<|>=|<=|<>|!=)\s)('[^']+'|[$+\-\w.]+)/, '\1xxx')
12
+ query.gsub!(/(\sIN\s)\([^()]+\)/i, '\1(xxx)')
13
+ regex = /(\sBETWEEN\s)('[^']+'|[+\-\w.]+)(\sAND\s)('[^']+'|[+\-\w.]+)/i
14
14
  query.gsub!(regex, '\1xxx\3xxx')
15
15
  query.gsub!(/(\sVALUES\s)\(.+\)/i, '\1(xxx)')
16
16
  query.gsub!(/(\s(LIKE|ILIKE|SIMILAR TO|NOT SIMILAR TO)\s)('[^']+')/i, '\1xxx')
@@ -1,7 +1,7 @@
1
1
  module InfluxDB
2
2
  module Rails
3
3
  class Tags
4
- def initialize(tags: {}, config:, additional_tags: InfluxDB::Rails.current.tags)
4
+ def initialize(config:, tags: {}, additional_tags: InfluxDB::Rails.current.tags)
5
5
  @tags = tags
6
6
  @config = config
7
7
  @additional_tags = additional_tags
@@ -9,7 +9,7 @@ module InfluxDB
9
9
 
10
10
  def to_h
11
11
  expanded_tags.reject do |_, value|
12
- value.nil? || value == ""
12
+ value.to_s.blank?
13
13
  end
14
14
  end
15
15
 
@@ -8,7 +8,7 @@ module InfluxDB
8
8
 
9
9
  def to_h
10
10
  expanded_values.reject do |_, value|
11
- value.nil? || value == ""
11
+ value.to_s.blank?
12
12
  end
13
13
  end
14
14
 
@@ -1,5 +1,5 @@
1
1
  module InfluxDB
2
2
  module Rails
3
- VERSION = "1.0.1.beta2".freeze
3
+ VERSION = "1.0.3".freeze
4
4
  end
5
5
  end
@@ -21,8 +21,7 @@ module InfluxDB
21
21
  # InfluxDB and Rails. This is a singleton class.
22
22
  module Rails
23
23
  class << self
24
- attr_writer :configuration
25
- attr_writer :client
24
+ attr_writer :configuration, :client
26
25
 
27
26
  def configure
28
27
  return configuration unless block_given?
@@ -11,6 +11,10 @@ InfluxDB::Rails.configure do |config|
11
11
  # config.client.username = "root"
12
12
  # config.client.password = "root"
13
13
 
14
+ ## If your InfluxDB service requires an HTTPS connection then you can
15
+ ## enable it here.
16
+ # config.client.use_ssl = true
17
+
14
18
  ## Various other client and connection options. These are used to create
15
19
  ## an `InfluxDB::Client` instance (i.e. `InfluxDB::Rails.client`).
16
20
  ##
@@ -1,11 +1,11 @@
1
- FROM opensuse/leap:15.1
1
+ FROM opensuse/leap:15.2
2
2
 
3
3
  ENV NOKOGIRI_USE_SYSTEM_LIBRARIES 1
4
4
  RUN useradd -g users -p rails -d /home/rails -m rails
5
5
  RUN echo 'rails ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
6
6
 
7
7
  RUN zypper -n addrepo -f https://dl.yarnpkg.com/rpm/yarn.repo; zypper --gpg-auto-import-keys refresh
8
- RUN zypper -n install --no-recommends ruby2.5-devel nodejs10 make gcc timezone sudo pkg-config sqlite3-devel libxml2-devel libxslt-devel yarn git-core curl
8
+ RUN zypper -n install --no-recommends ruby2.5-devel nodejs10 make gcc-c++ timezone sudo pkg-config sqlite3-devel libxml2-devel libxslt-devel yarn git-core curl
9
9
  RUN zypper -n clean -a
10
10
  RUN gem install --no-format-executable --no-document rails -v '~> 6'
11
11
 
@@ -4,36 +4,42 @@ A dashboard providing Ruby on Rails performance insights based on
4
4
  [Free Software](https://www.fsf.org/about/what-is-free-software), ready to
5
5
  run inside your data-center.
6
6
 
7
- ![Screenshot of the dashboard](https://grafana.com/api/dashboards/10428/images/6557/image)
7
+ ![Screenshot of the dashboard](https://grafana.com/api/dashboards/10428/images/10103/image)
8
8
 
9
- By default it measures (in various forms):
9
+ By default it measures (in various forms) performance of:
10
10
 
11
- - Controller Action Runtime
12
- - View/Partial Render Runtime
13
- - Database Query Runtime
11
+ - Controller Actions
12
+ - View/Partial Rendering
13
+ - Database Queries
14
+ - ActiveJobs
15
+ - ActionMailers
14
16
 
15
- It provides an overview and you can also drill down into numbers on a per request basis. Of course you can use all the awesome features that Influx (Downsampling/Data Retention), Grafana (Alerts, Annotations) and influxdb-rails (custom tags) provide and extend this to your needs. Use your freedom and run, copy, distribute, study, change and improve this software!
17
+ The dashboards provide an overview and various ways to drill down into numbers on a per request or per action basis. Of course you can use all the awesome features that Influx (Downsampling/Data Retention), Grafana (Alerts, Annotations) and influxdb-rails (custom tags) provide and extend this to your needs. Use your freedom and run, copy, distribute, study, change and improve this software!
16
18
 
17
19
  ## Requirements
18
20
 
19
- To be able to measure performance you need the following things available:
21
+ To be able to measure performance of your Ruby on Rails application you need to have the following things available:
20
22
 
21
- - [InfluxDB 1.x](https://docs.influxdata.com/influxdb/v1.8/introduction/install/)
22
- - [Grafana](https://grafana.com/docs/)
23
+ - [InfluxDB 1.x](https://www.influxdata.com/products/influxdb/)
24
+ - [Grafana](https://grafana.com/)
23
25
  - A [Ruby On Rails](https://rubyonrails.org/) application with [influxdb-rails](https://github.com/influxdata/influxdb-rails) enabled
24
26
 
25
27
  ## Installation
26
28
 
27
- Once you have influx/grafana instances running in your infrastructure just [import both
28
- dashboards from grafana](https://grafana.com/docs/reference/export_import/#importing-a-dashboard).
29
+ Once you have influx/grafana instances running in your infrastructure just [import the
30
+ dashboards from grafana.com](https://grafana.com/docs/reference/export_import/#importing-a-dashboard).
29
31
 
30
- - [Overview Dashboard](https://grafana.com/dashboards/10428)
31
- - [Request Dashboard](https://grafana.com/dashboards/10429)
32
+ - [Ruby On Rails Performance Overview](https://grafana.com/dashboards/10428/)
33
+ - Performance insights into individual requests, see [Ruby On Rails Performance per Request](https://grafana.com/dashboards/10429/)
34
+ - Performance of individual actions, see [Ruby On Rails Performance per Action](https://grafana.com/grafana/dashboards/11031)
35
+ - [Ruby On Rails Health Overview](https://grafana.com/grafana/dashboards/14115)
36
+ - [Ruby on Rails ActiveJob Overview](https://grafana.com/grafana/dashboards/14116)
37
+ - [Ruby on Rails Slowlog by Request](https://grafana.com/grafana/dashboards/14118)
38
+ - [Ruby on Rails Slowlog by Action](https://grafana.com/grafana/dashboards/14117)
39
+ - [Ruby on Rails Slowlog by SQL](https://grafana.com/grafana/dashboards/14119)
32
40
 
33
41
  You can also paste the `.json` files from this repository.
34
42
 
35
- In the unlikely case that you need to change the dashboard *UID*s during import you can configure the *UID* the `Overview` dashboard uses to link to the `Request` dashboard in the [variables](https://grafana.com/docs/reference/templating/#adding-a-variable). Just paste whatever *UID* you've set up for the `Request` dashboard.
36
-
37
43
  ## Demo
38
44
 
39
45
  This repository includes a [docker-compose](https://docs.docker.com/compose/) demo setup that brings a simple rails app, influxdb and grafana.
@@ -54,19 +60,6 @@ Go to http://0.0.0.0:4000 and do some things. Every request to the rails app wil
54
60
 
55
61
  You can also use the dashboard with any other rails app you already have. Follow our [install instructions](https://github.com/influxdata/influxdb-rails/#installation), the default configuration works with the demo InfluxDB running on localhost:8086.
56
62
 
57
- To be able to view individual requests you have to enable request ID tags in your application. Something like:
58
-
59
- ```ruby
60
- class ApplicationController < ActionController::Base
61
-
62
- before_action :set_influx_data
63
-
64
- def set_influx_data
65
- InfluxDB::Rails.current.values = { request: request.request_id }
66
- end
67
- end
68
- ```
69
-
70
63
  ### ...then see the dashboards in action
71
64
 
72
65
  Just go to http://0.0.0.0:3000 and log in with admin/admin.
@@ -1,9 +1,14 @@
1
1
  task default: %w[prepare]
2
2
 
3
- # rubocop:disable Metrics/LineLength
3
+ # rubocop:disable Layout/LineLength
4
4
  task :prepare do
5
- sh "cat 'Ruby On Rails Performance.json' | sed 's/${DS_INFLUXDB}/InfluxDB/g' > provisioning/performance.json"
6
- sh "cat 'Ruby On Rails Performance (per Request).json' | sed 's/${DS_INFLUXDB}/InfluxDB/g' > provisioning/performance-request.json"
7
- sh "cat 'Ruby On Rails Performance (per Action).json' | sed 's/${DS_INFLUXDB}/InfluxDB/g' > provisioning/performance-action.json"
5
+ sh "cat 'Ruby On Rails Performance.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/performance.json"
6
+ sh "cat 'Ruby On Rails Performance per Request.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/performance-request.json"
7
+ sh "cat 'Ruby On Rails Performance per Action.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/performance-action.json"
8
+ sh "cat 'Ruby On Rails ActiveJob.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/activejob.json"
9
+ sh "cat 'Ruby On Rails Requests.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/requests.json"
10
+ sh "cat 'Ruby On Rails Slowlog by Action.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/slowlog-action.json"
11
+ sh "cat 'Ruby On Rails Slowlog by Request.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/slowlog-requests.json"
12
+ sh "cat 'Ruby On Rails Slowlog by SQL.json' | sed 's/${DS_INFLUXDB-RAILS}/InfluxDB/g' > provisioning/slowlog-sql.json"
8
13
  end
9
- # rubocop:enable Metrics/LineLength
14
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,600 @@
1
+ {
2
+ "__inputs": [
3
+ {
4
+ "name": "DS_INFLUXDB-RAILS",
5
+ "label": "InfluxDB-Rails",
6
+ "description": "",
7
+ "type": "datasource",
8
+ "pluginId": "influxdb",
9
+ "pluginName": "InfluxDB"
10
+ }
11
+ ],
12
+ "__requires": [
13
+ {
14
+ "type": "grafana",
15
+ "id": "grafana",
16
+ "name": "Grafana",
17
+ "version": "7.1.1"
18
+ },
19
+ {
20
+ "type": "panel",
21
+ "id": "graph",
22
+ "name": "Graph",
23
+ "version": ""
24
+ },
25
+ {
26
+ "type": "datasource",
27
+ "id": "influxdb",
28
+ "name": "InfluxDB",
29
+ "version": "1.0.0"
30
+ }
31
+ ],
32
+ "annotations": {
33
+ "list": [
34
+ {
35
+ "builtIn": 1,
36
+ "datasource": "-- Grafana --",
37
+ "enable": true,
38
+ "hide": true,
39
+ "iconColor": "rgba(0, 211, 255, 1)",
40
+ "name": "Annotations & Alerts",
41
+ "type": "dashboard"
42
+ }
43
+ ]
44
+ },
45
+ "editable": true,
46
+ "gnetId": null,
47
+ "graphTooltip": 0,
48
+ "id": null,
49
+ "iteration": 1616428804223,
50
+ "links": [
51
+ {
52
+ "icon": "external link",
53
+ "includeVars": true,
54
+ "keepTime": true,
55
+ "tags": [
56
+ "influxdb-rails"
57
+ ],
58
+ "type": "dashboards"
59
+ }
60
+ ],
61
+ "panels": [
62
+ {
63
+ "aliasColors": {},
64
+ "bars": false,
65
+ "cacheTimeout": null,
66
+ "dashLength": 10,
67
+ "dashes": false,
68
+ "datasource": "${DS_INFLUXDB-RAILS}",
69
+ "decimals": 1,
70
+ "description": "Number of jobs per queue",
71
+ "fieldConfig": {
72
+ "defaults": {
73
+ "custom": {},
74
+ "links": []
75
+ },
76
+ "overrides": []
77
+ },
78
+ "fill": 3,
79
+ "fillGradient": 0,
80
+ "gridPos": {
81
+ "h": 7,
82
+ "w": 24,
83
+ "x": 0,
84
+ "y": 0
85
+ },
86
+ "hiddenSeries": false,
87
+ "hideTimeOverride": false,
88
+ "id": 2,
89
+ "legend": {
90
+ "alignAsTable": true,
91
+ "avg": false,
92
+ "current": false,
93
+ "hideEmpty": false,
94
+ "hideZero": false,
95
+ "max": false,
96
+ "min": false,
97
+ "rightSide": true,
98
+ "show": true,
99
+ "sideWidth": 250,
100
+ "total": false,
101
+ "values": false
102
+ },
103
+ "lines": true,
104
+ "linewidth": 1,
105
+ "links": [],
106
+ "nullPointMode": "null as zero",
107
+ "paceLength": 10,
108
+ "percentage": false,
109
+ "pluginVersion": "7.1.1",
110
+ "pointradius": 0.5,
111
+ "points": false,
112
+ "renderer": "flot",
113
+ "seriesOverrides": [],
114
+ "spaceLength": 10,
115
+ "stack": true,
116
+ "steppedLine": false,
117
+ "targets": [
118
+ {
119
+ "alias": "$tag_queue",
120
+ "groupBy": [
121
+ {
122
+ "params": [
123
+ "$per"
124
+ ],
125
+ "type": "time"
126
+ },
127
+ {
128
+ "params": [
129
+ "queue"
130
+ ],
131
+ "type": "tag"
132
+ },
133
+ {
134
+ "params": [
135
+ "null"
136
+ ],
137
+ "type": "fill"
138
+ }
139
+ ],
140
+ "measurement": "rails",
141
+ "orderByTime": "ASC",
142
+ "policy": "default",
143
+ "refId": "A",
144
+ "resultFormat": "time_series",
145
+ "select": [
146
+ [
147
+ {
148
+ "params": [
149
+ "value"
150
+ ],
151
+ "type": "field"
152
+ },
153
+ {
154
+ "params": [],
155
+ "type": "count"
156
+ }
157
+ ]
158
+ ],
159
+ "tags": [
160
+ {
161
+ "key": "hook",
162
+ "operator": "=",
163
+ "value": "enqueue"
164
+ }
165
+ ]
166
+ }
167
+ ],
168
+ "thresholds": [],
169
+ "timeFrom": null,
170
+ "timeRegions": [],
171
+ "timeShift": null,
172
+ "title": "by Queues",
173
+ "tooltip": {
174
+ "shared": true,
175
+ "sort": 0,
176
+ "value_type": "individual"
177
+ },
178
+ "type": "graph",
179
+ "xaxis": {
180
+ "buckets": null,
181
+ "mode": "time",
182
+ "name": null,
183
+ "show": true,
184
+ "values": []
185
+ },
186
+ "yaxes": [
187
+ {
188
+ "format": "short",
189
+ "label": "jobs",
190
+ "logBase": 1,
191
+ "max": null,
192
+ "min": null,
193
+ "show": true
194
+ },
195
+ {
196
+ "format": "short",
197
+ "label": null,
198
+ "logBase": 1,
199
+ "max": null,
200
+ "min": null,
201
+ "show": false
202
+ }
203
+ ],
204
+ "yaxis": {
205
+ "align": false,
206
+ "alignLevel": null
207
+ }
208
+ },
209
+ {
210
+ "aliasColors": {},
211
+ "bars": false,
212
+ "dashLength": 10,
213
+ "dashes": false,
214
+ "datasource": "${DS_INFLUXDB-RAILS}",
215
+ "description": "Number of jobs per class",
216
+ "fieldConfig": {
217
+ "defaults": {
218
+ "custom": {},
219
+ "links": []
220
+ },
221
+ "overrides": []
222
+ },
223
+ "fill": 1,
224
+ "fillGradient": 0,
225
+ "gridPos": {
226
+ "h": 8,
227
+ "w": 24,
228
+ "x": 0,
229
+ "y": 7
230
+ },
231
+ "hiddenSeries": false,
232
+ "id": 4,
233
+ "legend": {
234
+ "alignAsTable": true,
235
+ "avg": false,
236
+ "current": false,
237
+ "max": false,
238
+ "min": false,
239
+ "rightSide": true,
240
+ "show": true,
241
+ "sideWidth": 250,
242
+ "total": false,
243
+ "values": false
244
+ },
245
+ "lines": true,
246
+ "linewidth": 1,
247
+ "links": [],
248
+ "nullPointMode": "null as zero",
249
+ "paceLength": 10,
250
+ "percentage": false,
251
+ "pluginVersion": "7.1.1",
252
+ "pointradius": 2,
253
+ "points": false,
254
+ "renderer": "flot",
255
+ "seriesOverrides": [],
256
+ "spaceLength": 10,
257
+ "stack": false,
258
+ "steppedLine": false,
259
+ "targets": [
260
+ {
261
+ "alias": "$tag_job",
262
+ "groupBy": [
263
+ {
264
+ "params": [
265
+ "$per"
266
+ ],
267
+ "type": "time"
268
+ },
269
+ {
270
+ "params": [
271
+ "job"
272
+ ],
273
+ "type": "tag"
274
+ },
275
+ {
276
+ "params": [
277
+ "null"
278
+ ],
279
+ "type": "fill"
280
+ }
281
+ ],
282
+ "measurement": "rails",
283
+ "orderByTime": "ASC",
284
+ "policy": "default",
285
+ "refId": "A",
286
+ "resultFormat": "time_series",
287
+ "select": [
288
+ [
289
+ {
290
+ "params": [
291
+ "value"
292
+ ],
293
+ "type": "field"
294
+ },
295
+ {
296
+ "params": [],
297
+ "type": "count"
298
+ }
299
+ ]
300
+ ],
301
+ "tags": [
302
+ {
303
+ "key": "hook",
304
+ "operator": "=",
305
+ "value": "perform_start"
306
+ }
307
+ ]
308
+ }
309
+ ],
310
+ "thresholds": [],
311
+ "timeFrom": null,
312
+ "timeRegions": [],
313
+ "timeShift": null,
314
+ "title": "by Classes",
315
+ "tooltip": {
316
+ "shared": true,
317
+ "sort": 0,
318
+ "value_type": "individual"
319
+ },
320
+ "type": "graph",
321
+ "xaxis": {
322
+ "buckets": null,
323
+ "mode": "time",
324
+ "name": null,
325
+ "show": true,
326
+ "values": []
327
+ },
328
+ "yaxes": [
329
+ {
330
+ "format": "short",
331
+ "label": null,
332
+ "logBase": 1,
333
+ "max": null,
334
+ "min": null,
335
+ "show": true
336
+ },
337
+ {
338
+ "format": "short",
339
+ "label": null,
340
+ "logBase": 1,
341
+ "max": null,
342
+ "min": null,
343
+ "show": false
344
+ }
345
+ ],
346
+ "yaxis": {
347
+ "align": false,
348
+ "alignLevel": null
349
+ }
350
+ },
351
+ {
352
+ "aliasColors": {},
353
+ "bars": true,
354
+ "dashLength": 10,
355
+ "dashes": false,
356
+ "datasource": "${DS_INFLUXDB-RAILS}",
357
+ "description": "Performance of jobs by class",
358
+ "fieldConfig": {
359
+ "defaults": {
360
+ "custom": {},
361
+ "links": [],
362
+ "unit": "ms"
363
+ },
364
+ "overrides": []
365
+ },
366
+ "fill": 0,
367
+ "fillGradient": 0,
368
+ "gridPos": {
369
+ "h": 7,
370
+ "w": 24,
371
+ "x": 0,
372
+ "y": 15
373
+ },
374
+ "hiddenSeries": false,
375
+ "id": 5,
376
+ "legend": {
377
+ "alignAsTable": true,
378
+ "avg": false,
379
+ "current": false,
380
+ "max": false,
381
+ "min": false,
382
+ "rightSide": true,
383
+ "show": true,
384
+ "sideWidth": 250,
385
+ "total": false,
386
+ "values": false
387
+ },
388
+ "lines": false,
389
+ "linewidth": 1,
390
+ "links": [],
391
+ "nullPointMode": "null",
392
+ "paceLength": 10,
393
+ "percentage": false,
394
+ "pluginVersion": "7.1.1",
395
+ "pointradius": 2,
396
+ "points": true,
397
+ "renderer": "flot",
398
+ "seriesOverrides": [],
399
+ "spaceLength": 10,
400
+ "stack": false,
401
+ "steppedLine": false,
402
+ "targets": [
403
+ {
404
+ "alias": "$tag_job",
405
+ "groupBy": [
406
+ {
407
+ "params": [
408
+ "$__interval"
409
+ ],
410
+ "type": "time"
411
+ },
412
+ {
413
+ "params": [
414
+ "job"
415
+ ],
416
+ "type": "tag"
417
+ }
418
+ ],
419
+ "measurement": "rails",
420
+ "orderByTime": "ASC",
421
+ "policy": "default",
422
+ "refId": "A",
423
+ "resultFormat": "time_series",
424
+ "select": [
425
+ [
426
+ {
427
+ "params": [
428
+ "value"
429
+ ],
430
+ "type": "field"
431
+ },
432
+ {
433
+ "params": [
434
+ "99"
435
+ ],
436
+ "type": "percentile"
437
+ }
438
+ ]
439
+ ],
440
+ "tags": [
441
+ {
442
+ "key": "hook",
443
+ "operator": "=",
444
+ "value": "perform"
445
+ }
446
+ ]
447
+ }
448
+ ],
449
+ "thresholds": [],
450
+ "timeFrom": null,
451
+ "timeRegions": [],
452
+ "timeShift": null,
453
+ "title": "Performance",
454
+ "tooltip": {
455
+ "shared": true,
456
+ "sort": 0,
457
+ "value_type": "individual"
458
+ },
459
+ "type": "graph",
460
+ "xaxis": {
461
+ "buckets": null,
462
+ "mode": "time",
463
+ "name": null,
464
+ "show": true,
465
+ "values": []
466
+ },
467
+ "yaxes": [
468
+ {
469
+ "format": "ms",
470
+ "label": null,
471
+ "logBase": 2,
472
+ "max": null,
473
+ "min": null,
474
+ "show": true
475
+ },
476
+ {
477
+ "format": "short",
478
+ "label": null,
479
+ "logBase": 1,
480
+ "max": null,
481
+ "min": null,
482
+ "show": false
483
+ }
484
+ ],
485
+ "yaxis": {
486
+ "align": false,
487
+ "alignLevel": null
488
+ }
489
+ }
490
+ ],
491
+ "refresh": "5m",
492
+ "schemaVersion": 26,
493
+ "style": "dark",
494
+ "tags": [
495
+ "influxdb-rails",
496
+ "Health",
497
+ "Performance",
498
+ "Ruby on Rails"
499
+ ],
500
+ "templating": {
501
+ "list": [
502
+ {
503
+ "auto": true,
504
+ "auto_count": "50",
505
+ "auto_min": "",
506
+ "current": {
507
+ "selected": false,
508
+ "text": "auto",
509
+ "value": "$__auto_interval_per"
510
+ },
511
+ "hide": 0,
512
+ "label": null,
513
+ "name": "per",
514
+ "options": [
515
+ {
516
+ "selected": true,
517
+ "text": "auto",
518
+ "value": "$__auto_interval_per"
519
+ },
520
+ {
521
+ "selected": false,
522
+ "text": "1m",
523
+ "value": "1m"
524
+ },
525
+ {
526
+ "selected": false,
527
+ "text": "10m",
528
+ "value": "10m"
529
+ },
530
+ {
531
+ "selected": false,
532
+ "text": "30m",
533
+ "value": "30m"
534
+ },
535
+ {
536
+ "selected": false,
537
+ "text": "1h",
538
+ "value": "1h"
539
+ },
540
+ {
541
+ "selected": false,
542
+ "text": "6h",
543
+ "value": "6h"
544
+ },
545
+ {
546
+ "selected": false,
547
+ "text": "12h",
548
+ "value": "12h"
549
+ },
550
+ {
551
+ "selected": false,
552
+ "text": "1d",
553
+ "value": "1d"
554
+ },
555
+ {
556
+ "selected": false,
557
+ "text": "7d",
558
+ "value": "7d"
559
+ },
560
+ {
561
+ "selected": false,
562
+ "text": "14d",
563
+ "value": "14d"
564
+ },
565
+ {
566
+ "selected": false,
567
+ "text": "30d",
568
+ "value": "30d"
569
+ }
570
+ ],
571
+ "query": "1m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
572
+ "queryValue": "",
573
+ "refresh": 2,
574
+ "skipUrlSync": false,
575
+ "type": "interval"
576
+ }
577
+ ]
578
+ },
579
+ "time": {
580
+ "from": "now-1h",
581
+ "to": "now"
582
+ },
583
+ "timepicker": {
584
+ "refresh_intervals": [
585
+ "10s",
586
+ "30s",
587
+ "1m",
588
+ "5m",
589
+ "15m",
590
+ "30m",
591
+ "1h",
592
+ "2h",
593
+ "1d"
594
+ ]
595
+ },
596
+ "timezone": "",
597
+ "title": "ActiveJob",
598
+ "uid": "influxdb-rails-activejob",
599
+ "version": 12
600
+ }