[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