rails_performance 1.4.0.alpha3 → 1.4.0.alpha5

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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -1
  3. data/app/controllers/rails_performance/rails_performance_controller.rb +1 -1
  4. data/app/helpers/rails_performance/rails_performance_helper.rb +0 -4
  5. data/app/views/rails_performance/javascripts/app.js +6 -0
  6. data/app/views/rails_performance/layouts/rails_performance.html.erb +3 -0
  7. data/lib/generators/rails_performance/install/templates/initializer.rb +4 -0
  8. data/lib/rails_performance/data_source.rb +5 -4
  9. data/lib/rails_performance/extensions/resources_monitor.rb +1 -3
  10. data/lib/rails_performance/gems/custom_ext.rb +2 -2
  11. data/lib/rails_performance/gems/delayed_job_ext.rb +2 -2
  12. data/lib/rails_performance/gems/grape_ext.rb +1 -1
  13. data/lib/rails_performance/gems/rake_ext.rb +2 -2
  14. data/lib/rails_performance/gems/sidekiq_ext.rb +2 -2
  15. data/lib/rails_performance/instrument/metrics_collector.rb +2 -0
  16. data/lib/rails_performance/models/base_record.rb +1 -15
  17. data/lib/rails_performance/models/custom_record.rb +1 -1
  18. data/lib/rails_performance/models/delayed_job_record.rb +1 -1
  19. data/lib/rails_performance/models/grape_record.rb +1 -1
  20. data/lib/rails_performance/models/rake_record.rb +1 -1
  21. data/lib/rails_performance/models/request_record.rb +1 -1
  22. data/lib/rails_performance/models/resource_record.rb +3 -2
  23. data/lib/rails_performance/models/sidekiq_record.rb +1 -1
  24. data/lib/rails_performance/rails/middleware.rb +2 -2
  25. data/lib/rails_performance/reports/base_report.rb +12 -11
  26. data/lib/rails_performance/reports/resources_report.rb +10 -11
  27. data/lib/rails_performance/thread/current_request.rb +1 -1
  28. data/lib/rails_performance/utils.rb +11 -3
  29. data/lib/rails_performance/version.rb +2 -2
  30. data/lib/rails_performance.rb +8 -0
  31. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05d2e2b2c1b69d3c41d7208b746af12d1ae6e8ae2c305c35e066636f9fc6946f
4
- data.tar.gz: 3b6611e09e42154d80151466badef9b98060e6215d959ffccc6f271023193c45
3
+ metadata.gz: f9541b647e5e0ae0e49c8ffe55befda74884e9a8c53c9557cffd4b8c42ca23fc
4
+ data.tar.gz: 8b1ada0884c84dbbab0306cffab9bbb4f4b04b0fc4107a55747eae5416ed26ea
5
5
  SHA512:
6
- metadata.gz: 054226e9584b58d19ab43773da49cbf7d1d4ee7c2358808ed7f749d786efb8f95a10aa6cfa4976b2b6fadfa143828dcd98f5408b209d89dd3855fa4bd5e4352e
7
- data.tar.gz: fc7e826a68e0ed7d17ab48bd391a97daa2e06a8b12aac47000dfc29c4217acd59118e0b5fe0ce65111dff5ce6b6b31838f98736855994b2a3b69cae9e6f2cef7
6
+ metadata.gz: e2db12562f40ce01aa3bffa6a545e4567469972ec5ab79a0e7318dbe526b09c62e6c2f6f2fecadecb44485e5ea6f3bb4a7a4d632d7938e9a347af86144ea19b9
7
+ data.tar.gz: 7e7bed31f33b4f0af24362ec621f7d066b33d3225103e08b2819bc33b9b69a1fbc1d5c4ba65221d1c47186b6ab9d954d403eddf6317c7b9a94dfd445ca8f9004
data/README.md CHANGED
@@ -117,9 +117,21 @@ RailsPerformance.setup do |config|
117
117
 
118
118
  # To monitor custom events with `RailsPerformance.measure` block
119
119
  # config.include_custom_events = true
120
+
121
+ # To monitor system resources (CPU, memory, disk)
122
+ # to enabled add required gems (see README)
123
+ # config.system_monitor_duration = 24.hours
120
124
  end if defined?(RailsPerformance)
121
125
  ```
122
126
 
127
+ Additionally you might need to configure app time zone. You can do it in `config/application.rb`:
128
+
129
+ ```ruby
130
+ config.time_zone = 'Eastern Time (US & Canada)'
131
+ ```
132
+
133
+ Gem will present charts/tables in the app timezone. If it's not set, it will use UTC.
134
+
123
135
  ## Installation
124
136
 
125
137
  Add this line to your application's Gemfile:
@@ -175,7 +187,9 @@ You need to configure `config.custom_data_proc`. And you can capture current_use
175
187
  ![Custom Data](docs/custom_data.png)
176
188
 
177
189
 
178
- ### System Monitoring
190
+ ### Server Monitoring
191
+
192
+ ![Server Monitoring](docs/rails_performance_cpu_memory_storage.png)
179
193
 
180
194
  You can monitor system resources (CPU, memory, disk) by adding a gem to your Gemfile:
181
195
 
@@ -197,6 +211,14 @@ Basically using this code:
197
211
  end
198
212
  ```
199
213
 
214
+ For Kamal for example:
215
+
216
+ ```yaml
217
+ env:
218
+ clear:
219
+ RAILS_PERFORMANCE_SERVER_ID: "server"
220
+ ```
221
+
200
222
  You can also specifify custom "context" and "role" for monitoring, by changing the env variables:
201
223
 
202
224
  ```ruby
@@ -260,6 +282,8 @@ After this:
260
282
  - rails s
261
283
  - rake test
262
284
 
285
+ If you need quickly clear Redis data, you can use `rails runner 'RailsPerformance.redis.flushdb'`.
286
+
263
287
  Like a regular web development.
264
288
 
265
289
  Please note that to simplify integration with other apps all CSS/JS are bundled inside, and delivered in body of the request. This is to avoid integration with assets pipeline or webpacker.
@@ -15,7 +15,7 @@ module RailsPerformance
15
15
  end
16
16
 
17
17
  def resources
18
- @datasource = RailsPerformance::DataSource.new(**prepare_query(params), type: :resources)
18
+ @datasource = RailsPerformance::DataSource.new(**prepare_query(params), type: :resources, days: RailsPerformance::Utils.days(RailsPerformance.system_monitor_duration))
19
19
  db = @datasource.db
20
20
 
21
21
  @resources_report = RailsPerformance::Reports::ResourcesReport.new(db)
@@ -30,10 +30,6 @@ module RailsPerformance
30
30
  end
31
31
  end
32
32
 
33
- def mss(value, limit = 1)
34
- ms(value.to_f * 1000, limit)
35
- end
36
-
37
33
  def ms(value, limit = 1)
38
34
  result = round_it(value, limit)
39
35
  return "-" if result.nil?
@@ -1,3 +1,9 @@
1
+ Highcharts.setOptions({
2
+ time: {
3
+ timezone: window.APP_TIME_ZONE
4
+ }
5
+ });
6
+
1
7
  function showTIRChart(div, data, addon, name) {
2
8
  Highcharts.chart(div, {
3
9
  chart: {
@@ -6,6 +6,9 @@
6
6
  <title>Rails Performance</title>
7
7
  <%= csrf_meta_tags %>
8
8
  <%= csp_meta_tag if ::Rails::VERSION::STRING.to_f >= 5.2 %>
9
+ <script>
10
+ window.APP_TIME_ZONE = '<%= Rails.application.config.time_zone.presence || 'UTC' %>';
11
+ </script>
9
12
  <%= render '/rails_performance/stylesheets/stylesheets' %>
10
13
  <link rel="shortcut icon" href="/favicon.ico">
11
14
  </head>
@@ -52,5 +52,9 @@ if defined?(RailsPerformance)
52
52
  config.skipable_rake_tasks = ["webpacker:compile"]
53
53
  config.include_rake_tasks = false
54
54
  config.include_custom_events = true
55
+
56
+ # If enabled, the system monitor will be displayed on the dashboard
57
+ # to enabled add required gems (see README)
58
+ # config.system_monitor_duration = 24.hours
55
59
  end
56
60
  end
@@ -10,19 +10,20 @@ module RailsPerformance
10
10
  resources: RailsPerformance::Models::ResourceRecord
11
11
  }
12
12
 
13
- attr_reader :q, :klass, :type
13
+ attr_reader :q, :klass, :type, :days
14
14
 
15
- def initialize(type:, q: {})
15
+ def initialize(type:, q: {}, days: RailsPerformance::Utils.days(RailsPerformance.duration))
16
16
  @type = type
17
17
  @klass = KLASSES[type]
18
18
  q[:on] ||= Date.today
19
19
  @q = q
20
+ @days = days
20
21
  end
21
22
 
22
23
  def db
23
24
  result = RailsPerformance::Models::Collection.new
24
- now = Time.current
25
- (0..(RailsPerformance::Utils.days)).to_a.reverse_each do |e|
25
+ now = RailsPerformance::Utils.time
26
+ (0..days).to_a.reverse_each do |e|
26
27
  RailsPerformance::DataSource.new(q: q.merge({on: (now - e.days).to_date}), type: type).add_to(result)
27
28
  end
28
29
  result
@@ -18,7 +18,6 @@ module RailsPerformance
18
18
  @mutex.synchronize do
19
19
  return if @thread
20
20
 
21
- # puts "Starting monitoring for #{context} - #{role}"
22
21
  @thread = Thread.new do
23
22
  loop do
24
23
  run
@@ -35,7 +34,6 @@ module RailsPerformance
35
34
  @mutex.synchronize do
36
35
  return unless @thread
37
36
 
38
- # puts "Stopping monitoring"
39
37
  @thread.kill
40
38
  @thread = nil
41
39
  end
@@ -83,7 +81,7 @@ module RailsPerformance
83
81
  def store_data(data)
84
82
  ::Rails.logger.info("Server: #{server_id}, Context: #{context}, Role: #{role}, data: #{data}")
85
83
 
86
- now = Time.current
84
+ now = RailsPerformance::Utils.time
87
85
  now = now.change(sec: 0, usec: 0)
88
86
  RailsPerformance::Models::ResourceRecord.new(
89
87
  server: server_id,
@@ -8,7 +8,7 @@ module RailsPerformance
8
8
  return yield unless RailsPerformance.include_custom_events
9
9
 
10
10
  begin
11
- now = Time.current
11
+ now = RailsPerformance::Utils.time
12
12
  status = "success"
13
13
  result = yield
14
14
  result
@@ -20,7 +20,7 @@ module RailsPerformance
20
20
  tag_name: tag_name,
21
21
  namespace_name: namespace_name,
22
22
  status: status,
23
- duration: (Time.current - now) * 1000,
23
+ duration: (RailsPerformance::Utils.time - now) * 1000,
24
24
  datetime: now.strftime(RailsPerformance::FORMAT),
25
25
  datetimei: now.to_i
26
26
  ).save
@@ -4,7 +4,7 @@ module RailsPerformance
4
4
  class Plugin < ::Delayed::Plugin
5
5
  callbacks do |lifecycle|
6
6
  lifecycle.around(:invoke_job) do |job, *args, &block|
7
- now = Time.current
7
+ now = RailsPerformance::Utils.time
8
8
  block.call(job, *args)
9
9
  status = "success"
10
10
  rescue Exception => error # rubocop:disable Lint/RescueException
@@ -14,7 +14,7 @@ module RailsPerformance
14
14
  meta_data = RailsPerformance::Gems::DelayedJobExt::Plugin.meta(job.payload_object)
15
15
  record = RailsPerformance::Models::DelayedJobRecord.new(
16
16
  jid: job.id,
17
- duration: (Time.current - now) * 1000,
17
+ duration: (RailsPerformance::Utils.time - now) * 1000,
18
18
  datetime: now.strftime(RailsPerformance::FORMAT),
19
19
  datetimei: now.to_i,
20
20
  source_type: meta_data[0],
@@ -6,7 +6,7 @@ module RailsPerformance
6
6
  # TODO change to set
7
7
  CurrentRequest.current.ignore.add(:performance)
8
8
 
9
- now = Time.current
9
+ now = RailsPerformance::Utils.time
10
10
  CurrentRequest.current.data ||= {}
11
11
  CurrentRequest.current.record ||= RailsPerformance::Models::GrapeRecord.new(request_id: CurrentRequest.current.request_id)
12
12
  CurrentRequest.current.record.datetimei ||= now.to_i
@@ -4,7 +4,7 @@ module RailsPerformance
4
4
  def self.init
5
5
  ::Rake::Task.class_eval do
6
6
  def invoke_with_rails_performance(*args)
7
- now = Time.current
7
+ now = RailsPerformance::Utils.time
8
8
  status = "success"
9
9
  invoke_without_new_rails_performance(*args)
10
10
  rescue Exception => ex # rubocop:disable Lint/RescueException
@@ -18,7 +18,7 @@ module RailsPerformance
18
18
  task: task_info,
19
19
  datetime: now.strftime(RailsPerformance::FORMAT),
20
20
  datetimei: now.to_i,
21
- duration: (Time.current - now) * 1000,
21
+ duration: (RailsPerformance::Utils.time - now) * 1000,
22
22
  status: status
23
23
  ).save
24
24
  end
@@ -5,7 +5,7 @@ module RailsPerformance
5
5
  end
6
6
 
7
7
  def call(worker, msg, queue)
8
- now = Time.current
8
+ now = RailsPerformance::Utils.time
9
9
  record = RailsPerformance::Models::SidekiqRecord.new(
10
10
  enqueued_ati: msg["enqueued_at"].to_i,
11
11
  datetimei: msg["created_at"].to_i,
@@ -25,7 +25,7 @@ module RailsPerformance
25
25
  raise ex
26
26
  ensure
27
27
  # store in ms instead of seconds
28
- record.duration = (Time.current - now) * 1000
28
+ record.duration = (RailsPerformance::Utils.time - now) * 1000
29
29
  record.save
30
30
  end
31
31
  end
@@ -25,6 +25,8 @@ module RailsPerformance
25
25
  return if RailsPerformance.ignored_endpoints.include? "#{event.payload[:controller]}##{event.payload[:action]}"
26
26
  return if RailsPerformance.ignored_paths.any? { |p| event.payload[:path].start_with?(p) }
27
27
 
28
+ finished = finished.utc
29
+
28
30
  record = {
29
31
  controller: event.payload[:controller],
30
32
  action: event.payload[:action],
@@ -1,18 +1,6 @@
1
1
  module RailsPerformance
2
2
  module Models
3
3
  class BaseRecord
4
- def self.from_db(key, value)
5
- raise "implement me"
6
- end
7
-
8
- def save
9
- raise "implement me"
10
- end
11
-
12
- def record_hash
13
- raise "implement me"
14
- end
15
-
16
4
  def value
17
5
  @value ||= JSON.parse(@json || "{}")
18
6
  end
@@ -24,9 +12,7 @@ module RailsPerformance
24
12
  private
25
13
 
26
14
  def ms(e)
27
- if e
28
- e.to_f.round(1).to_s + " ms"
29
- end
15
+ e.to_f.round(1).to_s + " ms" if e
30
16
  end
31
17
  end
32
18
  end
@@ -32,7 +32,7 @@ module RailsPerformance
32
32
  namespace_name: namespace_name,
33
33
  status: status,
34
34
  datetimei: datetimei,
35
- datetime: Time.at(datetimei.to_i),
35
+ datetime: RailsPerformance::Utils.from_datetimei(datetimei.to_i),
36
36
  duration: value["duration"]
37
37
  }
38
38
  end
@@ -41,7 +41,7 @@ module RailsPerformance
41
41
  def record_hash
42
42
  {
43
43
  jid: jid,
44
- datetime: Time.at(datetimei),
44
+ datetime: RailsPerformance::Utils.from_datetimei(datetimei),
45
45
  datetimei: datetimei,
46
46
  duration: value["duration"],
47
47
  status: status,
@@ -43,7 +43,7 @@ module RailsPerformance
43
43
  status: status,
44
44
  method: method,
45
45
  path: path,
46
- datetime: Time.at(datetimei.to_i),
46
+ datetime: RailsPerformance::Utils.from_datetimei(datetimei.to_i),
47
47
  datetimei: datetimei.to_i,
48
48
  request_id: request_id
49
49
  }.merge(value)
@@ -31,7 +31,7 @@ module RailsPerformance
31
31
  def record_hash
32
32
  {
33
33
  task: task,
34
- datetime: Time.at(datetimei),
34
+ datetime: RailsPerformance::Utils.from_datetimei(datetimei),
35
35
  datetimei: datetimei,
36
36
  duration: duration,
37
37
  status: status
@@ -94,7 +94,7 @@ module RailsPerformance
94
94
  method: method,
95
95
  path: path,
96
96
  request_id: request_id,
97
- datetime: Time.at(datetimei.to_i),
97
+ datetime: RailsPerformance::Utils.from_datetimei(datetimei.to_i),
98
98
  datetimei: datetimei,
99
99
  duration: value["duration"],
100
100
  db_runtime: value["db_runtime"],
@@ -31,7 +31,7 @@ module RailsPerformance
31
31
  role: role,
32
32
  context: context,
33
33
  datetime: datetime,
34
- datetimei: Time.at(datetimei.to_i),
34
+ datetimei: RailsPerformance::Utils.from_datetimei(datetimei.to_i),
35
35
  cpu: value["cpu"],
36
36
  memory: value["memory"],
37
37
  disk: value["disk"]
@@ -40,7 +40,8 @@ module RailsPerformance
40
40
 
41
41
  def save
42
42
  key = "resource|server|#{server}|context|#{context}|role|#{role}|datetime|#{datetime}|datetimei|#{datetimei}|END|#{RailsPerformance::SCHEMA}"
43
- Utils.save_to_redis(key, json)
43
+ # with longer expiration time
44
+ Utils.save_to_redis(key, json, RailsPerformance.system_monitor_duration.to_i)
44
45
  end
45
46
  end
46
47
  end
@@ -49,7 +49,7 @@ module RailsPerformance
49
49
  jid: jid,
50
50
  status: status,
51
51
  datetimei: datetimei,
52
- datetime: Time.at(start_timei.to_i),
52
+ datetime: RailsPerformance::Utils.from_datetimei(start_timei.to_i),
53
53
  duration: value["duration"],
54
54
  message: value["message"]
55
55
  }
@@ -41,7 +41,7 @@ module RailsPerformance
41
41
  def call!(env)
42
42
  @status, @headers, @response = @app.call(env)
43
43
 
44
- # t = Time.current
44
+ # t = RailsPerformance::Utils.time
45
45
  if !RailsPerformance.skip
46
46
  if !CurrentRequest.current.ignore.include?(:performance) # grape is executed first, and than ignore regular future storage of "controller"-like request
47
47
  if (data = CurrentRequest.current.data)
@@ -66,7 +66,7 @@ module RailsPerformance
66
66
  end
67
67
  end
68
68
  end
69
- # puts "==> store performance data: #{(Time.current - t).round(3)}ms"
69
+ # puts "==> store performance data: #{(RailsPerformance::Utils.time - t).round(3)}ms"
70
70
 
71
71
  [@status, @headers, @response]
72
72
  end
@@ -30,11 +30,12 @@ module RailsPerformance
30
30
  end
31
31
  end
32
32
 
33
+ # TODO: simplify this method, and combine with nullify_data
33
34
  def calculate_data
34
- now = Time.current
35
+ now = RailsPerformance::Utils.time
35
36
  now = now.change(sec: 0, usec: 0)
36
- stop = Time.at(60 * (now.to_i / 60))
37
- offset = RailsPerformance::Reports::BaseReport.time_in_app_time_zone(now).utc_offset
37
+ stop = now # Time.at(60 * (now.to_i / 60), in:)
38
+ offset = 0 # RailsPerformance::Reports::BaseReport.time_in_app_time_zone(now).utc_offset
38
39
  current = stop - RailsPerformance.duration
39
40
 
40
41
  @data = []
@@ -48,7 +49,7 @@ module RailsPerformance
48
49
  while current <= stop
49
50
  key = current.strftime(RailsPerformance::FORMAT)
50
51
  views = all[key].presence || 0
51
- @data << [(current.to_i + offset) * 1000, views.is_a?(Numeric) ? views.round(2) : views]
52
+ @data << [(current.to_i + offset) * 1000, views.round(2)]
52
53
  current += 1.minute
53
54
  end
54
55
 
@@ -62,14 +63,14 @@ module RailsPerformance
62
63
  # 1732125550000 => 0,
63
64
  # ....
64
65
  # }
65
- def nil_data
66
+ def nil_data(duration = RailsPerformance.duration)
66
67
  @nil_data ||= begin
67
68
  result = {}
68
- now = Time.current
69
+ now = RailsPerformance::Utils.time
69
70
  now = now.change(sec: 0, usec: 0)
70
- stop = Time.at(60 * (now.to_i / 60))
71
- offset = RailsPerformance::Reports::BaseReport.time_in_app_time_zone(now).utc_offset
72
- current = stop - RailsPerformance.duration
71
+ stop = now # Time.at(60 * (now.to_i / 60))
72
+ offset = 0 # RailsPerformance::Reports::BaseReport.time_in_app_time_zone(now).utc_offset
73
+ current = stop - duration
73
74
 
74
75
  while current <= stop
75
76
  current.strftime(RailsPerformance::FORMAT)
@@ -85,8 +86,8 @@ module RailsPerformance
85
86
  # 1732125540000 => 1,
86
87
  # 1732125550000 => 0,
87
88
  # }
88
- def nullify_data(input)
89
- nil_data.merge(input).sort
89
+ def nullify_data(input, duration = RailsPerformance.duration)
90
+ nil_data(duration).merge(input).sort
90
91
  end
91
92
  end
92
93
  end
@@ -1,24 +1,17 @@
1
1
  module RailsPerformance
2
2
  module Reports
3
3
  class ResourcesReport < BaseReport
4
- def self.x
5
- @datasource = RailsPerformance::DataSource.new(type: :resources)
6
- db = @datasource.db
7
- @data = RailsPerformance::Reports::ResourcesReport.new(db)
8
- # RailsPerformance::Reports::ResourcesReport.x
9
- end
10
-
11
4
  def data
12
5
  @data ||= db.data
13
6
  .collect { |e| e.record_hash }
14
7
  .group_by { |e| e[:server] + "///" + e[:context] + "///" + e[:role] }
15
- .transform_values { |v| v.sort { |a, b| b[sort] <=> a[sort] } }
8
+ # .transform_values { |v| v.sort { |a, b| b[sort] <=> a[sort] } }
16
9
  .transform_values { |v| v.map { |e| e.merge({datetimei: e[:datetimei].to_i}) } }
17
10
  end
18
11
 
19
12
  def cpu
20
13
  @cpu ||= data.transform_values do |v|
21
- nullify_data(v.each_with_object({}) do |e, res|
14
+ prepare_report(v.each_with_object({}) do |e, res|
22
15
  res[e[:datetimei] * 1000] = e[:cpu]["one_min"].to_f.round(2)
23
16
  end)
24
17
  end
@@ -26,7 +19,7 @@ module RailsPerformance
26
19
 
27
20
  def memory
28
21
  @memory ||= data.transform_values do |v|
29
- nullify_data(v.each_with_object({}) do |e, res|
22
+ prepare_report(v.each_with_object({}) do |e, res|
30
23
  res[e[:datetimei] * 1000] = e[:memory].to_f.round(2)
31
24
  end)
32
25
  end
@@ -34,11 +27,17 @@ module RailsPerformance
34
27
 
35
28
  def disk
36
29
  @disk ||= data.transform_values do |v|
37
- nullify_data(v.each_with_object({}) do |e, res|
30
+ prepare_report(v.each_with_object({}) do |e, res|
38
31
  res[e[:datetimei] * 1000] = e[:disk]["available"].to_f.round(2)
39
32
  end)
40
33
  end
41
34
  end
35
+
36
+ private
37
+
38
+ def prepare_report(input)
39
+ nullify_data(input, RailsPerformance.system_monitor_duration)
40
+ end
42
41
  end
43
42
  end
44
43
  end
@@ -27,7 +27,7 @@ module RailsPerformance
27
27
  end
28
28
 
29
29
  def trace(options = {})
30
- @tracings << options.merge(time: Time.current.to_i)
30
+ @tracings << options.merge(time: RailsPerformance::Utils.time.to_i)
31
31
  end
32
32
  end
33
33
  end
@@ -1,5 +1,13 @@
1
1
  module RailsPerformance
2
2
  class Utils
3
+ def self.time
4
+ Time.now.utc
5
+ end
6
+
7
+ def self.from_datetimei(datetimei)
8
+ Time.at(datetimei, in: "+00:00")
9
+ end
10
+
3
11
  # date key in redis store
4
12
  def self.cache_key(now = Date.today)
5
13
  "date-#{now}"
@@ -7,7 +15,7 @@ module RailsPerformance
7
15
 
8
16
  # write to current slot
9
17
  # time - date -minute
10
- def self.field_key(now = Time.current)
18
+ def self.field_key(now = RailsPerformance::Utils.time)
11
19
  now.strftime("%H:%M")
12
20
  end
13
21
 
@@ -32,8 +40,8 @@ module RailsPerformance
32
40
  RailsPerformance.redis.set(key, value.to_json, ex: expire.to_i)
33
41
  end
34
42
 
35
- def self.days
36
- (RailsPerformance.duration / 1.day) + 1
43
+ def self.days(duration = RailsPerformance.duration)
44
+ (duration / 1.day) + 1
37
45
  end
38
46
 
39
47
  def self.median(array)
@@ -1,4 +1,4 @@
1
1
  module RailsPerformance
2
- VERSION = "1.4.0.alpha3"
3
- SCHEMA = "1.0.1"
2
+ VERSION = "1.4.0.alpha5"
3
+ SCHEMA = "1.0.2"
4
4
  end
@@ -119,6 +119,14 @@ module RailsPerformance
119
119
  mattr_accessor :ignore_trace_headers
120
120
  @@ignore_trace_headers = ["datetimei"]
121
121
 
122
+ # System monitor duration (expiration time)
123
+ mattr_accessor :system_monitor_duration
124
+ @@system_monitor_duration = 24.hours
125
+
126
+ # -- internal usage --
127
+ #
128
+ #
129
+ # to store the resource monitor instance
122
130
  mattr_accessor :_resource_monitor
123
131
  @@_resource_monitor = nil
124
132
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_performance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0.alpha3
4
+ version: 1.4.0.alpha5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-21 00:00:00.000000000 Z
11
+ date: 2024-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties