[Slim-Checkins] r10917 - in /trunk/server: Plugins/Health/Plugin.pm Plugins/Health/strings.txt Slim/Utils/PerfMon.pm slimserver.pl

adrian at svn.slimdevices.com adrian at svn.slimdevices.com
Sat Dec 9 09:32:44 PST 2006


Author: adrian
Date: Sat Dec  9 09:32:43 2006
New Revision: 10917

URL: http://svn.slimdevices.com?rev=10917&view=rev
Log:
Bug: N/A
Description: move parsing of --perfwarn cmdline option to Health
plugin to support specification of warning levels per monitor as per
web page.
e.g. of use: --perfwarn response=0.1,timer=0.1,template=0

Modified:
    trunk/server/Plugins/Health/Plugin.pm
    trunk/server/Plugins/Health/strings.txt
    trunk/server/Slim/Utils/PerfMon.pm
    trunk/server/slimserver.pl

Modified: trunk/server/Plugins/Health/Plugin.pm
URL: http://svn.slimdevices.com/trunk/server/Plugins/Health/Plugin.pm?rev=10917&r1=10916&r2=10917&view=diff
==============================================================================
--- trunk/server/Plugins/Health/Plugin.pm (original)
+++ trunk/server/Plugins/Health/Plugin.pm Sat Dec  9 09:32:43 2006
@@ -18,9 +18,14 @@
 
 use Plugins::Health::NetTest;
 
-
 sub enabled {
 	return ($::VERSION ge '6.5');
+}
+
+sub initPlugin {
+	if (defined $::perfwarn) {
+		parseCmdLine($::perfwarn);
+	}
 }
 
 # Main web interface
@@ -54,20 +59,53 @@
 
 # Perfmon logs managed by this plugin
 my @perfmonLogs = (
-	{ 'type' => 'server', 'name' => 'response',     'monitor' => \$Slim::Networking::Select::responseTime,  },
-	{ 'type' => 'server', 'name' => 'timerlate',    'monitor' => \$Slim::Utils::Timers::timerLate,          },
-	{ 'type' => 'server', 'name' => 'selecttask',   'monitor' => \$Slim::Networking::Select::selectTask,    },
-	{ 'type' => 'server', 'name' => 'timertask',    'monitor' => \$Slim::Utils::Timers::timerTask,          },
-	{ 'type' => 'server', 'name' => 'request',      'monitor' => \$Slim::Control::Request::requestTask,     },
-	{ 'type' => 'server', 'name' => 'schedulertask','monitor' => \$Slim::Utils::Scheduler::schedulerTask,   },
-	{ 'type' => 'server', 'name' => 'dbaccess',     'monitor' => \$Slim::Schema::Storage::dbAccess,         },
-	{ 'type' => 'server', 'name' => 'pagebuild',    'monitor' => \$Slim::Web::HTTP::pageBuild,              },
-	{ 'type' => 'server', 'name' => 'proctemplate', 'monitor' => \$Slim::Web::Template::Context::procTemplate },
-	{ 'type' => 'server', 'name' => 'irqueue',      'monitor' => \$Slim::Hardware::IR::irPerf,              },
-	{ 'type' => 'player', 'name' => 'signal',       'monitor' => \&Slim::Player::Client::signalStrengthLog, },
-	{ 'type' => 'player', 'name' => 'buffer',       'monitor' => \&Slim::Player::Client::bufferFullnessLog, },
-	{ 'type' => 'player', 'name' => 'control',      'monitor' => \&Slim::Player::Client::slimprotoQLenLog,  },
+	{ 'type' => 'server', 'name' => 'response',  'monitor' => \$Slim::Networking::Select::responseTime, 'warn' => 1 },
+	{ 'type' => 'server', 'name' => 'select',    'monitor' => \$Slim::Networking::Select::selectTask,   'warn' => 1 },
+	{ 'type' => 'server', 'name' => 'timer',     'monitor' => \$Slim::Utils::Timers::timerTask,         'warn' => 1 },
+	{ 'type' => 'server', 'name' => 'request',   'monitor' => \$Slim::Control::Request::requestTask,    'warn' => 1 },
+	{ 'type' => 'server', 'name' => 'scheduler', 'monitor' => \$Slim::Utils::Scheduler::schedulerTask,  'warn' => 1 },
+	{ 'type' => 'server', 'name' => 'timerlate', 'monitor' => \$Slim::Utils::Timers::timerLate,                     },
+	{ 'type' => 'server', 'name' => 'dbaccess',  'monitor' => \$Slim::Schema::Storage::dbAccess,                    },
+	{ 'type' => 'server', 'name' => 'pagebuild', 'monitor' => \$Slim::Web::HTTP::pageBuild,                         },
+	{ 'type' => 'server', 'name' => 'template',  'monitor' => \$Slim::Web::Template::Context::procTemplate,         },
+	{ 'type' => 'server', 'name' => 'irqueue',   'monitor' => \$Slim::Hardware::IR::irPerf,                         },
+	{ 'type' => 'player', 'name' => 'signal',    'monitor' => \&Slim::Player::Client::signalStrengthLog, },
+	{ 'type' => 'player', 'name' => 'buffer',    'monitor' => \&Slim::Player::Client::bufferFullnessLog, },
+	{ 'type' => 'player', 'name' => 'control',   'monitor' => \&Slim::Player::Client::slimprotoQLenLog,  },
 );
+
+sub parseCmdLine {
+	my $cmdline = shift;
+
+	$::perfmon = 1;
+
+	if ( $cmdline =~ /^\d+$|^\d+\.\d+$/ ) {
+		foreach my $mon (@perfmonLogs) {
+			if ($mon->{'type'} eq 'server' && $mon->{'warn'}) {
+				${$mon->{'monitor'}}->setWarnHigh($cmdline);
+			}
+		}
+	} elsif ($cmdline =~ /=/) {
+		for my $statement (split /\s*,\s*/, $cmdline) {
+			my ($name, $thresh) = split /=/, $statement;
+			next if ($thresh !~ /^\d+$|^\d+\.\d+$/);
+			foreach my $mon (@perfmonLogs) {
+				if ($mon->{'type'} eq 'server' && $mon->{'name'} eq $name) {
+					${$mon->{'monitor'}}->setWarnHigh($thresh);
+				}
+			}
+		}
+	} else {
+		print "Valid perfwarn options: [--perfwarn=<threshold secs>] | [--perfwarn <monitor1>=<threshold1>,<monitor2>=<threshold2>,...]\n";
+		print "monitors: ";
+		foreach my $mon (@perfmonLogs) {
+			if ($mon->{'type'} eq 'server') {
+				print $mon->{'name'}. " ";
+			}
+		}
+		print "\n";
+	}
+}
 
 sub clearAllCounters {
 
@@ -177,7 +215,7 @@
 sub handleIndex {
 	my ($client, $params) = @_;
 	
-	my $refresh = 60; # default refresh of 60s 
+	my $refresh;
 	my ($newtest, $stoptest);
 
 	# process input parameters
@@ -186,13 +224,11 @@
 		if ($params->{'perf'} eq 'on') {
 			$::perfmon = 1;
 			clearAllCounters();
-			$refresh = 1;
 		} elsif ($params->{'perf'} eq 'off') {
 			$::perfmon = 0;
 		}
 		if ($params->{'perf'} eq 'clear') {
 			clearAllCounters();
-			$refresh = 1;
 		}
 	}
 
@@ -211,7 +247,6 @@
 		$params->{'perfon'} = 1;
 	} else {
 		$params->{'perfoff'} = 1;
-		$refresh = undef;
 	}
 
 	# summary section
@@ -241,9 +276,10 @@
 				$refresh = 2;
 			} 
 			if (!$stoptest && defined($modeParam) && ref($modeParam) eq 'HASH' && defined $modeParam->{'log'}) { 
-				# display current results
+				# display current results & refresh in a minute
 				$params->{'nettest_rate'} = $modeParam->{'rate'};
 				$params->{'nettest_graph'} = $modeParam->{'log'}->sprint();
+				$refresh = 60;
 			}
 
 		} elsif (defined($newtest)) {
@@ -280,9 +316,15 @@
 
 		if (defined $params->{'monitor'} && ($params->{'monitor'} eq $mon->{'name'} || $params->{'monitor'} eq 'all') ) {
 			if (exists($params->{'setwarn'})) {
-				$monitor->setWarnHigh(Slim::Utils::Validate::number($params->{'warnhi'}));
-				$monitor->setWarnLow(Slim::Utils::Validate::number($params->{'warnlo'}));
-				$monitor->setWarnBt($params->{'warnbt'});
+				if (defined $monitor->warnHigh() || $params->{'warnhi'} ne '') {
+					$monitor->setWarnHigh(Slim::Utils::Validate::number($params->{'warnhi'}));
+				}
+				if (defined $monitor->warnLow() || $params->{'warnlo'} ne '') {
+					$monitor->setWarnLow(Slim::Utils::Validate::number($params->{'warnlo'}));
+				}
+				if (defined $monitor->warnBt() || $params->{'warnbt'} ne '') {
+					$monitor->setWarnBt($params->{'warnbt'});
+				}
 			}
 			if (exists($params->{'clear'})) {
 				$monitor->clear();

Modified: trunk/server/Plugins/Health/strings.txt
URL: http://svn.slimdevices.com/trunk/server/Plugins/Health/strings.txt?rev=10917&r1=10916&r2=10917&view=diff
==============================================================================
--- trunk/server/Plugins/Health/strings.txt (original)
+++ trunk/server/Plugins/Health/strings.txt Sat Dec  9 09:32:43 2006
@@ -386,32 +386,32 @@
 	FR	Ce graphique montre le laps de temps en secondes nécessaire au serveur pour répondre aux instructions de la ou des platine(s) connectée(s). Plus la valeur est basse, plus le serveur est réactif. Des valeurs supérieures à 1 seconde sont susceptibles d'altérer les performances audio.    Les temps de réponse trop élevés peuvent être le résultat d'autres tâches ou de tâches complexes en cours d'éxécution sur le serveur.
 	NL	De responstijd van de server. De tijdsduur tussen achtereenvolgende aanroepen.
 
-PLUGIN_HEALTH_SELECTTASK
+PLUGIN_HEALTH_SELECT
 	EN	Select Task Duration
 	FR	Durée tâche sélectionnée
 	NL	Selecteer taakduur
 
-PLUGIN_HEALTH_SELECTTASK_DESC
+PLUGIN_HEALTH_SELECT_DESC
 	EN	The length of time taken by each task run by select.
 	FR	La durée écoulée pour chaque tâche sélectionnée.
 	NL	De tijdsduur die elke geselecteerde taak neemt.
 
-PLUGIN_HEALTH_SCHEDULERTASK
+PLUGIN_HEALTH_SCHEDULER
 	EN	Scheduler Task Duration
 	FR	Durée tâche planifiée
 	NL	Taakplanner taakduur
 
-PLUGIN_HEALTH_SCHEDULERTASK_DESC
+PLUGIN_HEALTH_SCHEDULER_DESC
 	EN	The length of time taken by each scheduled task.
 	FR	La durée écoulée pour chaque tâche planifiée.
 	NL	De tijdsduur die elke geplande taak neemt.
 
-PLUGIN_HEALTH_TIMERTASK
+PLUGIN_HEALTH_TIMER
 	EN	Timer Task Duration
 	FR	Durée tâche automatique
 	NL	Timertaakduur
 
-PLUGIN_HEALTH_TIMERTASK_DESC
+PLUGIN_HEALTH_TIMER_DESC
 	EN	The length of time taken by each timer task.
 	FR	La durée de chaque tâche automatique.
 	NL	De tijdsduur ingenomen door elke timertaak.
@@ -466,12 +466,12 @@
 	FR	Le temps écoulé pour accéder à une information depuis la base de données.
 	NL	De tijdsduur om informatie op te halen uit de database.
 
-PLUGIN_HEALTH_PROCTEMPLATE
+PLUGIN_HEALTH_TEMPLATE
 	EN	Process Template
 	FR	Exécution Template
 	NL	Proces sjabloon
 
-PLUGIN_HEALTH_PROCTEMPLATE_DESC
+PLUGIN_HEALTH_TEMPLATE_DESC
 	EN	The time to process each Template Toolkit template when building web pages.
 	FR	La durée d'exécution de chaque Template Toolkit lors de la génération d'une page web.
 	NL	De tijd om elk gereedschapsjabloon uit te voeren bij het opbouwen van webpagina's.

Modified: trunk/server/Slim/Utils/PerfMon.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Utils/PerfMon.pm?rev=10917&r1=10916&r2=10917&view=diff
==============================================================================
--- trunk/server/Slim/Utils/PerfMon.pm (original)
+++ trunk/server/Slim/Utils/PerfMon.pm Sat Dec  9 09:32:43 2006
@@ -71,12 +71,16 @@
 	my $ref = shift || return;
 	my $val = shift;
 
+	$log->warn( sprintf "%-16s : Low threshold %s", $ref->{name}, defined $val ? "set to $val" : 'cleared' );
+
 	$ref->{warnlo} = $val;
 }
 
 sub setWarnHigh {
 	my $ref = shift || return;
 	my $val = shift;
+
+	$log->warn( sprintf "%-16s : High threshold %s", $ref->{name}, defined $val ? "set to $val" : 'cleared' );
 
 	$ref->{warnhi} = $val;
 }

Modified: trunk/server/slimserver.pl
URL: http://svn.slimdevices.com/trunk/server/slimserver.pl?rev=10917&r1=10916&r2=10917&view=diff
==============================================================================
--- trunk/server/slimserver.pl (original)
+++ trunk/server/slimserver.pl Sat Dec  9 09:32:43 2006
@@ -488,7 +488,7 @@
           [--cliport <portnumber> [--cliaddr <listenip>]]
           [--priority <priority>]
           [--prefsfile <prefsfilepath> [--pidfile <pidfilepath>]]
-          [--perfmon] [--perfwarn=<threshold>]
+          [--perfmon] [--perfwarn=<threshold> | --perfwarn <warn options>]
           [--checkstrings]
 
     --help           => Show this usage information.
@@ -567,22 +567,12 @@
 		'noserver'      => \$noserver,
 		'noupnp'        => \$noupnp,
 		'perfmon'       => \$perfmon,
-		'perfwarn=f'    => \$perfwarn,
+		'perfwarn=s'    => \$perfwarn,  # content parsed by Health plugin if loaded
 		'checkstrings'  => \$checkstrings,
 		'd_startup'     => \$d_startup, # Needed for Slim::bootstrap
 	)) {
 		showUsage();
 		exit(1);
-	}
-
-	if (defined $perfwarn) {
-		# enable performance monitoring and set warning thresholds on performance monitors
-		$perfmon = 1;
-		$Slim::Networking::Select::responseTime->setWarnHigh($perfwarn);
-		$Slim::Networking::Select::selectTask->setWarnHigh($perfwarn);
-		$Slim::Utils::Timers::timerTask->setWarnHigh($perfwarn);
-		$Slim::Utils::Scheduler::schedulerTask->setWarnHigh($perfwarn);
-		$Slim::Control::Request::requestTask->setWarnHigh($perfwarn);
 	}
 }
 



More information about the checkins mailing list