lib/pulse_toolbox/sensor/manager.rb in pulse-meter-rails-0.1.1 vs lib/pulse_toolbox/sensor/manager.rb in pulse-meter-rails-0.1.2
- old
+ new
@@ -26,71 +26,136 @@
class_attribute :monitoring_layout
self.monitoring_layout = PulseMeter::Visualize::DSL::Layout.new
self.default_options = {
- :ttl => 1.day,
- :interval => 1.minute,
- :raw_data_ttl => 1.hour,
- :reduce_delay => 2.minutes
+ ttl: 7.days,
+ interval: 1.minute,
+ raw_data_ttl: 1.hour,
+ reduce_delay: 2.minutes
}.freeze
self.sensors_config = {
- :max => {
- :title => "Max times",
- :sensors => {
- :db_time => {
- :sensor_type => 'timelined/max',
- :color => '#0000FF',
- :args => {
- :annotation => "DB"
+ max: {
+ title: "Max times",
+ values: "Time, ms",
+ sensors: {
+ db_time: {
+ sensor_type: 'timelined/max',
+ color: '#0000FF',
+ args: {
+ annotation: "DB"
}
},
- :view_time => {
- :sensor_type => 'timelined/max',
- :color => '#00FF00',
- :args => {
- :annotation => "View"
+ view_time: {
+ sensor_type: 'timelined/max',
+ color: '#00FF00',
+ args: {
+ annotation: "View"
}
},
- :total_time => {
- :sensor_type => 'timelined/max',
- :color => '#FF0000',
- :args => {
- :annotation => "Total"
+ total_time: {
+ sensor_type: 'timelined/max',
+ color: '#FF0000',
+ args: {
+ annotation: "Total"
}
}
}
},
- :p95 => {
- :title => "95% percentile times",
- :sensors => {
- :db_time => {
- :sensor_type => 'timelined/percentile',
- :color => '#0000FF',
- :args => {
- :annotation => "DB",
- :p => 0.95
+ p95: {
+ title: "95% percentile times",
+ values: "Time, ms",
+ sensors: {
+ db_time: {
+ sensor_type: 'timelined/percentile',
+ color: '#0000FF',
+ args: {
+ annotation: "DB",
+ p: 0.95
}
},
- :view_time => {
- :sensor_type => 'timelined/percentile',
- :color => '#00FF00',
- :args => {
- :annotation => "View",
- :p => 0.95
+ view_time: {
+ sensor_type: 'timelined/percentile',
+ color: '#00FF00',
+ args: {
+ annotation: "View",
+ p: 0.95
}
},
- :total_time => {
- :sensor_type => 'timelined/percentile',
- :color => '#FF0000',
- :args => {
- :annotation => "Total",
- :p => 0.95
+ total_time: {
+ sensor_type: 'timelined/percentile',
+ color: '#FF0000',
+ args: {
+ annotation: "Total",
+ p: 0.95
}
}
}
+ },
+ p99: {
+ title: "99% percentile times",
+ values: "Time, ms",
+ sensors: {
+ db_time: {
+ sensor_type: 'timelined/percentile',
+ color: '#0000FF',
+ args: {
+ annotation: "DB",
+ p: 0.99
+ }
+ },
+ view_time: {
+ sensor_type: 'timelined/percentile',
+ color: '#00FF00',
+ args: {
+ annotation: "View",
+ p: 0.99
+ }
+ },
+ total_time: {
+ sensor_type: 'timelined/percentile',
+ color: '#FF0000',
+ args: {
+ annotation: "Total",
+ p: 0.99
+ }
+ }
+ }
+ },
+ status: {
+ title: 'Request count',
+ values: "Count",
+ sensors: {
+ total: {
+ sensor_type: 'timelined/counter',
+ color: '#FF0000',
+ args: {
+ annotation: "Total",
+ }
+ },
+ count: {
+ sensor_type: 'timelined/hashed_counter',
+ color: '#008800',
+ args: {
+ annotation: "Status"
+ }
+ }
+ }
+ },
+ action: {
+ title: 'Request count by action',
+ values: "Count",
+ sensors: {
+ count: {
+ sensor_type: 'timelined/hashed_counter',
+ color: '#008800',
+ args: {
+ annotation: "Action"
+ }
+ }
+ }
}
}
# Creates all sensors from sensors_config
def self.create_sensors
@@ -105,25 +170,41 @@
class << self
# Logs rails request timing to various sensors
# @param total_time [Float] total request time
# @param view_time [Float] view time of request
# @param db_time [Float] db time of request
- def log_request(total_time, view_time, db_time)
- [
- [:max_db_time, db_time],
- [:p95_db_time, db_time],
- [:max_view_time, view_time],
- [:p95_view_time, view_time],
- [:max_total_time, total_time],
- [:p95_total_time, total_time]
- ].each {|name, value = e| event(name, value)}
+ def log_request(total_time, payload)
+ view_time = payload[:view_runtime]
+ db_time = payload[:db_runtime]
+
+ lazy_configurator
+ PulseToolbox.redis.multi do
+ {
+ max_db_time: db_time,
+ max_view_time: view_time,
+ max_total_time: total_time,
+
+ p95_db_time: db_time,
+ p95_view_time: view_time,
+ p95_total_time: total_time,
+
+ p99_db_time: db_time,
+ p99_view_time: view_time,
+ p99_total_time: total_time,
+
+ status_count: {payload[:status].to_s => 1},
+ status_total: 1,
+
+ action_count: {"#{payload[:controller]}##{payload[:action]}" => 1}
+ }.each_pair {|name, value| event(name, value)}
+ end
end
# Sends value to sensor by name
# @param sensor [Symbol] sensor name
# @param value [Float] event value
def event(sensor, value)
- lazy_configurator.sensor(sensor).event(value.to_i)
+ lazy_configurator.sensor(sensor).event(value)
end
# Adds group to config
# @param name [Symbol] group name
# @param title [String] group title