NAME
Class::ReluctantORM::Monitor::Measuring - Monitor with Metric support
SYNOPSIS
#####
# Using a Measuring Monitor
#####
# Interrogate the monitor
print "Last query had " . $mon->last_measured_value() . " foo units\n";
# Worst offenders overall
foreach my $info ($mon->highwater_marks()) {
print "Rank: " . $info->{rank} . "\n";
print "Foo Count: " . $info->{measured_value} . "\n";
print "Query Object: " . $info->{sql}->pretty_print() . "\n";
# next three depend on Origin Tracking being enabled
print "Origin File: " . $info->{origin}->{file} . "\n";
print "Origin Line: " . $info->{origin}->{line} . "\n";
print "Origin Package: " . $info->{origin}->{package} . "\n";
}
# Can also log, etc - does everything a regular Monitor can do
#####
# Creating a new Measuring Monitor
#####
package FooCount;
use base 'Class::ReluctantORM::Monitor::Measuring';
sub measurement_label { return 'Foo Count (Instantaneous)'; }
sub default_events { return @list_of_when; }
sub permitted_events { return @list_of_when; }
# Gets called whenever a measurement needs to be taken
sub take_measurement {
my %event_info = @_; # sql_obj, binds, etc
return $foo_count;
}
DESCRIPTION
The Monitor facility allows you to peek inside the Class::ReluctantORM SQL render, execute, and fetch process, and see what is going on. Several monitors are included with Class::ReluctantORM, and it is easy to write your own.
The Measuring Monitors have special support to obtain, track, and act on a measured value.
See Class::ReluctantORM::Monitor for info about using MOnitors in general. This file only documents the measuring extensions.
CONSTRUCTORS
$mon = SomeMonitor->new(...);
See Class::ReluctantORM::Monitor::new().
MEASURING API
These methods should be overridden to implement your monitor's behavior.
$str = $mon->measurement_label();
Returns a string to be included in the log to label the measured value. Default is "$monitor_class Observation".
@whens = $mon->permitted_events();
Returns a list of events for which it is permitted to take a measurement for this monitor. If you instantiate a monitor, and request an event not on this list, an exception will be thrown.
Default is all events permitted.
@whens = $mon->default_events();
Returns a list of events at which measurmeents will automatically be taken, if you do not override this with the 'when' option to new().
Default is all events.
$number = $mon->take_measurement(%event_info);
Pure virtual - your Monitor subclass must implement this method.
Called when the monitor needs to take a measurement. The arguments will be a hash of the event arguments (See Class::ReluctantORM::Monitor - Monitor Interface Methods section), with an additional 'event' key whose value is the name of the event.
HIGHWATER TRACKING
Measuring-style Monitors may also support Highwater Tracking. As the Monitor makes observations, it maintains a list of the N worst unique observations. N is determined by the value of the highwater_count option passed to the monitor constructor. Observations are considered the same if they have the same count and same origin.
@observations = $mon->highwater_marks()
Returns an array of hashes describing the N unique observations whose measured_value was the largest.
Each hashref has the following keys:
- rank
-
Current rank in the highwater scoreboard, with 1 the worst.
- measured_value
-
The observed value.
- sql
-
The SQL object being executed at the time.
- origin
-
Present only if Origin Tracking is enabled (see Class::ReluctantORM->enable_origin_tracking()). If present, is a hash containing keys file, line, and package, indicating the location of the last stack frame outside of Class::ReluctantORM (usually "your" code).
$bool = $mon->supports_measuring();
Returns true if the Monitor supports counting something (a metric). This implementation returns true.
MONITOR INFORMATION INTERFACE METHODS
These methods provide information about the monitor.
$number = $mon->last_measured_value();
Returns the value of the last observation.
$mon->reset();
For measuring monitors, resets the last measured value to zero.
AUTHOR
Clinton Wolfe January 2011