From 773362c5bfe60d29a05a88e673c4d02b5903be3f Mon Sep 17 00:00:00 2001 From: maniacikarus Date: Thu, 13 Mar 2008 19:29:35 +0000 Subject: [PATCH] Added memory and cpu util graphs for services Changed collectd config git-svn-id: http://svn.ipfire.org/svn/ipfire/branches/2.1/trunk@1266 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- config/cfgroot/graphs.pl | 70 +++++++++++-- config/collectd/collectd.conf | 159 +++-------------------------- config/rootfiles/core/10/files | 3 + config/rootfiles/core/10/update.sh | 1 + html/cgi-bin/graphs.cgi | 3 +- html/cgi-bin/qos.cgi | 1 + html/cgi-bin/services.cgi | 43 ++++++-- 7 files changed, 123 insertions(+), 157 deletions(-) diff --git a/config/cfgroot/graphs.pl b/config/cfgroot/graphs.pl index 9de45f9440..e4789e16b2 100644 --- a/config/cfgroot/graphs.pl +++ b/config/cfgroot/graphs.pl @@ -38,8 +38,9 @@ my $value; my @args = (); my $count = 0; my @mbmongraphs = (); -if ( -e "/var/log/rrd/collectd/localhost/mbmon" ){ - @mbmongraphs = `ls /var/log/rrd/collectd/localhost/mbmon/`; +my @processesgraph = `ls -dA $rrdlog/collectd/localhost/processes-*/`; +if ( -e "$rrdlog/collectd/localhost/mbmon" ){ + @mbmongraphs = `ls $rrdlog/collectd/localhost/mbmon/`; foreach (@mbmongraphs){ chomp($_); my @name=split(/\./,$_);my $label = $name[0]; $label=~ s/-//; @@ -47,7 +48,7 @@ if ( -e "/var/log/rrd/collectd/localhost/mbmon" ){ $mbmonsettings{'LINE-'.$name[0]}="checked"; } } - + &General::readhash("${General::swroot}/mbmon/settings", \%mbmonsettings); use Encode 'from_to'; @@ -76,8 +77,8 @@ sub updatecpugraph { "--color", "SHADEB".$color{"color19"}, "--color", "BACK".$color{"color21"}, "-t $Lang::tr{'cpu usage per'} $Lang::tr{$period}"); - - if ( -e "/var/log/rrd/collectd/localhost/cpu-1/" ){ + + if ( -e "$rrdlog/collectd/localhost/cpu-1/" ){ push(@command,"DEF:iowait0=$rrdlog/collectd/localhost/cpu-0/cpu-wait.rrd:value:AVERAGE", "DEF:nice0=$rrdlog/collectd/localhost/cpu-0/cpu-nice.rrd:value:AVERAGE", "DEF:interrupt0=$rrdlog/collectd/localhost/cpu-0/cpu-interrupt.rrd:value:AVERAGE", @@ -513,7 +514,7 @@ sub overviewgraph { if ( $classline[0] eq $qossettings{'DEV'} ) { $color=random_hex_color(6); - push(@command, "DEF:$classline[1]=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE"); + push(@command, "DEF:$classline[1]=$rrdlog/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE"); if ($count eq "1") { push(@command, "AREA:$classline[1]$color:Klasse $classline[1] -".sprintf("%15s",$classline[8])); @@ -621,6 +622,63 @@ sub updatehwfangraph { print "$ERROR"; } +sub updateprocessesgraph { + + my $period = $_[0]; + my $count="0"; + + my @command = ("$graphs/processes-$period.png", + "--start", "-1$period", "-aPNG", "-i", "-W www.ipfire.org", + "--alt-y-grid", "-w 600", "-h 125", + "--color", "SHADEA".$color{"color19"},"--color", + "SHADEB".$color{"color19"},"--color", + "BACK".$color{"color21"}, + "-t $Lang::tr{'processes'} $Lang::tr{'graph per'} $Lang::tr{$period}"); + + foreach(@processesgraph){ + chomp($_);my @name=split(/\-/,$_);chop($name[1]); + push(@command,"DEF:".$name[1]."user=".$_."ps_cputime.rrd:user:AVERAGE"); + push(@command,"DEF:".$name[1]."system=".$_."ps_cputime.rrd:syst:AVERAGE"); + push(@command,"CDEF:".$name[1]."=".$name[1]."user,".$name[1]."system,+");} + + push(@command,"COMMENT:".$Lang::tr{'caption'}."\\j"); + + foreach(@processesgraph){ + chomp($_);my @name=split(/\-/,$_);chop($name[1]); + if ($count eq "0") {push(@command,"AREA:".$name[1].random_hex_color(6)."A0:".$name[1]);} + else {push(@command,"STACK:".$name[1].random_hex_color(6)."A0:".$name[1]);} + $count++;} + + RRDs::graph (@command); + $ERROR = RRDs::error; + print "$ERROR"; + + my $count="0"; + + my @command = ("$graphs/processesmem-$period.png", + "--start", "-1$period", "-aPNG", "-i", "-W www.ipfire.org", + "--alt-y-grid", "-w 600", "-h 125", + "--color", "SHADEA".$color{"color19"},"--color", + "SHADEB".$color{"color19"},"--color", + "BACK".$color{"color21"}, + "-t $Lang::tr{'processes'} $Lang::tr{'memory'} $Lang::tr{'graph per'} $Lang::tr{$period}"); + + foreach(@processesgraph){ + chomp($_);my @name=split(/\-/,$_);chop($name[1]); + push(@command,"DEF:".$name[1]."=".$_."ps_rss.rrd:value:AVERAGE");} + push(@command,"COMMENT:".$Lang::tr{'caption'}."\\j"); + + foreach(@processesgraph){ + chomp($_);my @name=split(/\-/,$_);chop($name[1]); + if ($count eq "0") {push(@command,"AREA:".$name[1].random_hex_color(6)."A0:".$name[1]);} + else {push(@command,"STACK:".$name[1].random_hex_color(6)."A0:".$name[1]);} + $count++;} + + RRDs::graph (@command); + $ERROR = RRDs::error; + print "$ERROR"; +} + # Generate a random color, used by Qos Graph to be independent from the amount of values sub random_hex_color { diff --git a/config/collectd/collectd.conf b/config/collectd/collectd.conf index 931fc37cca..f1c7e655d3 100644 --- a/config/collectd/collectd.conf +++ b/config/collectd/collectd.conf @@ -12,83 +12,19 @@ TypesDB "/usr/lib/collectd/types.db" Interval 30 ReadThreads 3 -#LoadPlugin apache -#LoadPlugin battery LoadPlugin cpu -#LoadPlugin cpufreq -#LoadPlugin df LoadPlugin disk -#LoadPlugin dns -#LoadPlugin email -#LoadPlugin entropy -#LoadPlugin exec -#LoadPlugin hddtemp LoadPlugin interface LoadPlugin iptables -#LoadPlugin ipvs -#LoadPlugin irq LoadPlugin load #LoadPlugin logfile LoadPlugin mbmon -#LoadPlugin memcached LoadPlugin memory -#LoadPlugin multimeter -#LoadPlugin mysql -#LoadPlugin netlink -#LoadPlugin network -#LoadPlugin nfs -#LoadPlugin nginx -#LoadPlugin ntpd -#LoadPlugin nut -#LoadPlugin perl LoadPlugin ping -#LoadPlugin processes +LoadPlugin processes LoadPlugin rrdtool -#LoadPlugin sensors -#LoadPlugin serial LoadPlugin swap LoadPlugin syslog -#LoadPlugin tape -#LoadPlugin tcpconns -#LoadPlugin unixsock -#LoadPlugin users - -# -# URL "http://localhost/status?auto" -# User "www-user" -# Password "secret" -# CACert "/etc/ssl/ca.crt" -# - - -# -# Device "/dev/hda" -# Device "192.168.0.2:/mnt/nfs" -# MountPoint "/home" -# FSType "ext3" -# IgnoreSelected false -# - -# -# Interface "eth0" -# IgnoreSource "192.168.0.1" -# - -# -# SocketFile "/usr/var/run/collectd-email" -# SocketGroup "collectd" -# SocketPerms "0770" -# MaxConns 5 -# - -# -# Exec "user:group" "/path/to/exec" -# - -# -# Host "127.0.0.1" -# Port "7634" -# Interface "ppp0" @@ -109,13 +45,6 @@ LoadPlugin syslog Chain filter FORWARD DROP_Wirelessforward -# -# Irq 7 -# Irq 8 -# Irq 9 -# IgnoreSelected true -# - # # LogLevel info # File STDOUT @@ -126,64 +55,27 @@ LoadPlugin syslog Port "411" -# -# Host "127.0.0.1" -# Port "11211" -# - -# -# Host "database.serv.er" -# User "db_user" -# Password "secret" -# Database "db_name" -# - -# -# Interface "All" -# VerboseInterface "All" -# QDisc "eth0" "pfifo_fast-1:0" -# Class "ppp0" "htb-1:10" -# Filter "ppp0" "u32-1:0" -# - -# -# Server "ff18::efc0:4a42" "25826" -# Server "239.192.74.66" "25826" -# Listen "ff18::efc0:4a42" "25826" -# Listen "239.192.74.66" "25826" -# TimeToLive "128" -# Forward false -# CacheFlush 1800 -# - -# -# URL "http://localhost/status?auto" -# User "www-user" -# Password "secret" -# CACert "/etc/ssl/ca.crt" -# - -# -# Host "localhost" -# Port 123 -# - -# -# UPS "upsname@hostname:port" -# - -# -# IncludeDir "/my/include/path" -# BaseName "Collectd::Plugin" -# LoadPlugin foo -# Host "gateway" - Process "collectd" + Process "sshd" + Process "smdb" + Process "nmbd" + Process "squid" + Process "squidguard" + Process "pluto" + Process "snort" + Process "openvpn" + Process "qemu" + Process "rtorrent" + Process "mpd" + Process "asterisk" + Process "java" + Process "mysqld" + Process "spamd" @@ -192,25 +84,6 @@ LoadPlugin syslog CacheFlush 900 -# -# Sensor "it8712-isa-0290/temperature-temp1" -# Sensor "it8712-isa-0290/fanspeed-fan3" -# Sensor "it8712-isa-0290/voltage-in8" -# IgnoreSelected false -# - LogLevel info - -# -# ListeningPorts false -# LocalPort "6882" -# RemotePort "80" -# - -# -# SocketFile "/usr/var/run/collectd-unixsock" -# SocketGroup "collectd" -# SocketPerms "0660" -# diff --git a/config/rootfiles/core/10/files b/config/rootfiles/core/10/files index 7c23532ac3..851b035013 100644 --- a/config/rootfiles/core/10/files +++ b/config/rootfiles/core/10/files @@ -2,6 +2,9 @@ usr/local/bin/wirelessctrl srv/web/ipfire/cgi-bin/optionsfw.cgi srv/web/ipfire/cgi-bin/gui.cgi srv/web/ipfire/cgi-bin/qos.cgi +srv/web/ipfire/cgi-bin/services.cgi +srv/web/ipfire/cgi-bin/graphs.cgi var/ipfire/langs +var/ipfire/graphs.pl lib/modules/2.6.16.57-ipfire/kernel/drivers/parport/pt_drv.ko lib/modules/2.6.16.57-ipfire-smp/kernel/drivers/parport/pt_drv.ko diff --git a/config/rootfiles/core/10/update.sh b/config/rootfiles/core/10/update.sh index 3e4c5db788..a5b3c62f02 100644 --- a/config/rootfiles/core/10/update.sh +++ b/config/rootfiles/core/10/update.sh @@ -4,3 +4,4 @@ extract_files perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" depmod -a +/etc/init.d/collectd restart diff --git a/html/cgi-bin/graphs.cgi b/html/cgi-bin/graphs.cgi index 4c7c7e181a..3c1961e591 100644 --- a/html/cgi-bin/graphs.cgi +++ b/html/cgi-bin/graphs.cgi @@ -48,6 +48,7 @@ $cgigraphs[1] = '' unless defined $cgigraphs[1]; if ($cgigraphs[1] =~ /(load)/) {&Graphs::updateloadgraph ("hour");&Graphs::updateloadgraph ("week");&Graphs::updateloadgraph ("month");&Graphs::updateloadgraph ("year");} if ($cgigraphs[1] =~ /(cpu)/) {&Graphs::updatecpugraph ("hour");&Graphs::updatecpugraph ("week");&Graphs::updatecpugraph ("month");&Graphs::updatecpugraph ("year");} +if ($cgigraphs[1] =~ /(processes)/) {&Graphs::updateprocessesgraph ("hour");&Graphs::updateprocessesgraph ("week");&Graphs::updateprocessesgraph ("month");&Graphs::updateprocessesgraph ("year");} if ($cgigraphs[1] =~ /(memory|swap)/) {&Graphs::updatememgraph ("hour");&Graphs::updatememgraph ("week");&Graphs::updatememgraph ("month");&Graphs::updatememgraph ("year");} if ($cgigraphs[1] =~ /disk/){ my @devices = `kudzu -qps -c HD | grep device: | cut -d" " -f2 | sort | uniq`; @@ -70,7 +71,7 @@ if ($cgigraphs[1] =~ /(network|green|blue|orange|red|ipsec|lq)/) { &Header::openbigbox('100%', 'left'); -if ($cgigraphs[1] =~ /(green|blue|orange|red|ipsec|lq|cpu|memory|swap|disk|load|fwhits)/) { +if ($cgigraphs[1] =~ /(green|blue|orange|red|ipsec|lq|cpu|memory|swap|disk|load|fwhits|processes)/) { my $graph = $cgigraphs[1]; my $graphname = ucfirst(lc($cgigraphs[1])); &Header::openbox('100%', 'center', "$graphname $Lang::tr{'graph'}"); diff --git a/html/cgi-bin/qos.cgi b/html/cgi-bin/qos.cgi index bb78d2889f..70ec4286c5 100644 --- a/html/cgi-bin/qos.cgi +++ b/html/cgi-bin/qos.cgi @@ -554,6 +554,7 @@ END 200;imq0;icmp;;;;; 203;imq0;esp;;;;; 203;imq0;tcp;;;;1194; +203;imq0;udp;;;;1194; 203;imq0;udp;;4500;;4500; 203;imq0;udp;;500;;500; 204;imq0;tcp;;;;80; diff --git a/html/cgi-bin/services.cgi b/html/cgi-bin/services.cgi index c7314be926..67dd043536 100644 --- a/html/cgi-bin/services.cgi +++ b/html/cgi-bin/services.cgi @@ -28,6 +28,7 @@ use strict; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; +require "${General::swroot}/graphs.pl"; #workaround to suppress a warning when a variable is used only once my @dummy = ( ${Header::colourred} ); @@ -41,6 +42,8 @@ my %mainsettings = (); my %netsettings=(); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); +&Graphs::updateprocessesgraph ("day"); + my %cgiparams=(); # Maps a nice printable name to the changing part of the pid file, which # is also the name of the program @@ -141,7 +144,7 @@ my @pak = `find /opt/pakfire/db/installed/meta-* | cut -d"-" -f2`; foreach (@pak) { chomp($_); - + # Check which of the paks are services my @svc = `find /etc/init.d/$_ | cut -d"/" -f4`; foreach (@svc) @@ -154,7 +157,7 @@ foreach (@pak) if ($_ ne "alsa") { $lines++; - if ($lines % 2) + if ($lines % 2) { print ""; } @@ -169,7 +172,7 @@ foreach (@pak) print "$Lang::tr{ "; my $status = &isrunningaddon($_); $status =~ s/\\[[0-1]\;[0-9]+m//g; - + chomp($status); print "$status"; print ""; @@ -179,6 +182,32 @@ foreach (@pak) print "\n"; +&Header::closebox(); + +&Header::openbox('100%', 'center', "$Lang::tr{'processes'} $Lang::tr{'graph'}"); +if (-e "$Header::graphdir/processes-day.png") { + my $ftime = localtime((stat("$Header::graphdir/processes-day.png"))[9]); + print "
$Lang::tr{'the statistics were last updated at'}: $ftime

\n"; + print ""; + print ""; + print ""; +} else { + print $Lang::tr{'no information available'}; +} +print "
\n"; +&Header::closebox(); + +&Header::openbox('100%', 'center', "$Lang::tr{'processes'} $Lang::tr{'memory'} $Lang::tr{'graph'}"); +if (-e "$Header::graphdir/processesmem-day.png") { + my $ftime = localtime((stat("$Header::graphdir/processesmem-day.png"))[9]); + print "
$Lang::tr{'the statistics were last updated at'}: $ftime

\n"; + print ""; + print ""; + print ""; +} else { + print $Lang::tr{'no information available'}; +} +print "
\n"; &Header::closebox(); &Header::closebigbox(); &Header::closepage(); @@ -197,7 +226,7 @@ sub isautorun if ($init ne '') { $status = "$Lang::tr{"; } - + return $status; } @@ -240,7 +269,7 @@ sub isrunningaddon my $testcmd = ''; my $exename; my @memory; - + my $testcmd = `/usr/local/bin/addonctrl $_ status`; if ( $testcmd =~ /is\ running/ && $testcmd !~ /is\ not\ running/){ @@ -249,9 +278,9 @@ sub isrunningaddon my @pid = split(/\s/,$testcmd); $status .="$pid[0]"; - + my $memory = 0; - + foreach (@pid){ chomp($_); if (open(FILE, "/proc/$_/statm")){ -- 2.39.2