summaryrefslogtreecommitdiff
path: root/src/perl/MMV/server.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/perl/MMV/server.pl')
-rwxr-xr-xsrc/perl/MMV/server.pl101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/perl/MMV/server.pl b/src/perl/MMV/server.pl
new file mode 100755
index 0000000..f62f440
--- /dev/null
+++ b/src/perl/MMV/server.pl
@@ -0,0 +1,101 @@
+#!/usr/bin/perl
+#
+# Example server application that demonstrates use of the
+# Perl PCP MMV module for runtime instrumentation.
+#
+
+use strict;
+use warnings;
+use PCP::MMV;
+use Time::HiRes qw ( usleep );
+
+my @db_instances = ( 0 => "tempdb", 1 => "datadb" );
+
+my $db_indom = 1;
+my @indoms = (
+ [ $db_indom, \@db_instances,
+ 'Database instances',
+ 'An instance domain for each database used by this server.',
+ ],
+);
+
+my @metrics = (
+ [ 'response_time.requests',
+ 1, MMV_TYPE_U64, MMV_INDOM_NULL,
+ mmv_units(0,0,1,0,0,MMV_COUNT_ONE), MMV_SEM_COUNTER,
+ 'Number of server requests processed', ''
+ ],
+ [ 'response_time.total',
+ 2, MMV_TYPE_U64, MMV_INDOM_NULL,
+ mmv_units(0,0,1,0,0,MMV_COUNT_ONE), MMV_SEM_COUNTER,
+ 'Maximum observed response time in milliseconds', ''
+ ],
+ [ 'response_time.maximum',
+ 3, MMV_TYPE_DOUBLE, MMV_INDOM_NULL,
+ mmv_units(0,1,0,0,MMV_TIME_MSEC,0), MMV_SEM_INSTANT,
+ 'Maximum observed response time in milliseconds', ''
+ ],
+ [ 'version',
+ 4, MMV_TYPE_STRING, MMV_INDOM_NULL,
+ mmv_units(0,0,0,0,0,0), MMV_SEM_DISCRETE,
+ 'Version number of the server process', ''
+ ],
+ [ 'database.transactions.count',
+ 5, MMV_TYPE_U64, $db_indom,
+ mmv_units(0,0,1,0,0,MMV_COUNT_ONE), MMV_SEM_COUNTER,
+ 'Number of requests issued to each database', ''
+ ],
+ [ 'database.transactions.time',
+ 6, MMV_TYPE_U64, $db_indom,
+ mmv_units(0,1,0,0,MMV_TIME_MSEC,0), MMV_SEM_COUNTER,
+ 'Total time spent waiting for results from each database', ''
+ ],
+ [ 'idletime',
+ 7, MMV_TYPE_U64, MMV_INDOM_NULL,
+ mmv_units(0,1,0,0,MMV_TIME_USEC,0), MMV_SEM_COUNTER,
+ 'Total time spent asleep, in-between requests', ''
+ ],
+);
+
+my $handle = mmv_stats_init('server', 0, MMV_FLAG_PROCESS, \@metrics, \@indoms);
+die("mmv_stats_init failed\n") unless (defined($handle));
+
+mmv_stats_set_string($handle, 'version', '', '7.4.2-5');
+
+my $maxtime = 0.0; # milliseconds
+
+for (;;) {
+
+ my $idletime = 0.0; # microseconds
+ my $dbtime = 0.0; # milliseconds
+ my $response = 0.0;
+
+
+ # start a request ...
+
+ $dbtime = rand 1000; # milliseconds
+ $response += $dbtime;
+ mmv_stats_inc($handle, 'database.transactions.count', 'tempdb');
+ mmv_stats_add($handle, 'database.transactions.time', 'tempdb', $dbtime);
+
+ # ... more work, involving a second DB request ...
+ $dbtime = rand 1000; # milliseconds
+ $response += $dbtime;
+ mmv_stats_inc($handle, 'database.transactions.count', 'datadb');
+ mmv_stats_add($handle, 'database.transactions.time', 'datadb', $dbtime);
+
+ # ... request completed
+
+
+ $response += rand 42; # milliseconds
+ mmv_stats_inc($handle, 'response_time.requests', '');
+ mmv_stats_add($handle, 'response_time.total', '', $response);
+ if ($response > $maxtime) {
+ $maxtime = $response;
+ mmv_stats_set($handle, 'response_time.maximum', '', $maxtime);
+ }
+
+ $idletime = rand 50000; # microseconds
+ usleep($idletime);
+ mmv_stats_add($handle, 'idletime', '', $idletime);
+}