Gå til innhold

[Perl] Muninscript for å måle gjennomsnitt på nedlasting


Anbefalte innlegg

Hei,

 

Jeg har laget følgende script som finner gj.snittshastighet på en nedlastet fil.

Scriptet skal bare vise KB/s, og derfor må jeg konvertere wget speed som oppgis i MB til KB..

MB*1024 skulle løse den biffen, men det virker som at det gir issues.

 

Problemet er at jeg har fått et par "spikes" på 30-40k i grafene mine som er himmelhøyt over båndbredden jeg egentlig har.

Noen som kan se hva problemet er???

 

Easy way out hadde jo vært om wget kunne konfigureres til å bare vise nedhastigheten i KB/s og ikke konvertere til MB straks det går over 1024KB/s (= 1.0MB/s)

 

Eventuelt har et annet script?

 

Dette er muninscript, men selve koden under config delen kan jo kjøres uten munin.

Noen tanker? :dontgetit:

 

#!/bin/sh

if [ "$1" = "autoconf" ]; then
echo yes 
exit 0
fi

if [ "$1" = "config" ]; then

echo 'graph_title Hastighet'
echo 'graph_args --base 1000 -l 0 '
echo 'graph_vlabel nedlastingshastighet'
echo 'graph_category download'
echo 'graph_info Denne grafen viser nedhastighet til en fil paa 5MB.'
echo 'down.label Hastighet i KB/s'
echo 'down.draw LINE2'
echo 'down.info Nåværende nedlastingshastighet.'
exit 0
fi

wget -o /root/temp/down.log -O /root/5MB.zip http://download.thinkbroadband.com/5MB.zip
VERDI=$(cat /root/temp/down.log | grep '/s' | cut -d " " -f 3 | sed 's/(//')

if [[ "$VERDI" =~ [0-9][.][0-9] ]]; then
 nyverdi=$(echo "scale=2; $VERDI * 1024" | bc)
  echo -n "down.value "
  echo $nyverdi
else
  echo -n "down.value "
  echo "$VERDI"
fi
rm /root/temp/5MB.zip
rm /root/temp/down.log

Endret av Haavard82
Lenke til kommentar
Videoannonse
Annonse

Hvis det ikke er krise å matche log fila to ganger:

 

VERDI=$(sed -n s'X.* (\([0-9]*\) KB/s).*X\1Xp' /root/temp/down.log)

if [ -n "$VERDI" ]; then
  echo $VERDI KB/s
fi

VERDI=$(sed -n s'X.* (\([0-9]*\) MB/s).*X\1Xp' /root/temp/down.log)
if [ -n "$VERDI" ]; then
  VERDI=$(expr $VERDI \* 1024)
  echo $VERDI KB/s
fi

Lenke til kommentar

Hva gjør sed funksjonen X.* og .*X\1Xp ???

 

Jeg bruker s for subsitute. Den er slik at den første karakteren blir delimiter. Det vanligste er å bruke '/' (faktisk så vanlig at mange tror at man bare kan bruke '/'). Men jeg valgte å bruke X siden jeg skulle matche en '/' og ville slippe quoting av '/'.

 

\1 er det som matcher den første gruppen avgrenset av \(\). \2 vil matche den neste osv.

 

$ echo hello |sed 's/\(..\)ll\(.*\)/\1-\2/'
he-o
$ echo fellow |sed 'sB\(..\)ll\(.*\)B\1-\2B'
fe-ow

Lenke til kommentar

Da har jeg gjort det om til Perlscript fordi det ble for mange brudd på det første scriptet.

Jeg vet ikke hvorfor det forrige scriptet feilet, men nå har jeg snekret på nytt, og kommet opp med et script som ikke gir meg noen brudd.

 

Nedenfor ser dere også hvordan output fra wget ser ut:

 

Til info så har jeg laget dette scriptet for å logge hvor crappy Get Internet er, og har planer om å vise dem grafen etter at den har gått en stund.

Vi har XL abonnement og burde derfor få langt høyere hastighet enn det som vises nedenfor.

Er dritlei :p

 

Noen kommentarer til scriptet?????

 

Output fra wget:


2010-11-07 01:35:11 (534 KB/s) - `/root/temp/5MB.zip' saved [5242880/5242880]                                                                             
2010-11-07 01:40:09 (698 KB/s) - `/root/temp/5MB.zip' saved [5242880/5242880]                                                                             
2010-11-07 01:45:10 (661 KB/s) - `/root/temp/5MB.zip' saved [5242880/5242880]                                                                             
2010-11-07 01:46:45 (834 KB/s) - `/root/temp/5MB.zip' saved [5242880/5242880]                                                                             
2010-11-07 01:50:15 (625 KB/s) - `/root/temp/5MB.zip' saved [5242880/5242880]                                                                             
2010-11-07 01:55:16 (367 KB/s) - `/root/temp/5MB.zip' saved [5242880/5242880] 

 

#!/usr/bin/perl                                                                                                                                           

if ( $ARGV[0] eq "autoconfig"  ){                                                                                                                         
print "yes";                                                                                                                                             
exit 0;                                                                                                                                                  
}                                                                                                                                                         

if ( $ARGV[0] eq "config" ){                                                                                                                              
   print "graph_title Hastighet                                                                                                                          
graph_args --base 1000 -l 0                                                                                                                               
graph_vlabel nedlastingshastighet                                                                                                                         
graph_category nedlasting                                                                                                                                 
graph_info Denne grafen viser nedhastighet til en fil paa 5MB.                                                                                            
nedlasting.label Hastighet i KB/s                                                                                                                         
nedlasting.draw LINE2                                                                                                                                     
nedlasting.info Nåværende nedlastingshastighet.                                                                                                           
";                                                                                                                                                        
exit 0;                                                                                                                                                  
}                                                                                                                                                         


`wget -o /root/temp/down.log -O /root/temp/5MB.zip http://download.thinkbroadband.com/5MB.zip`;                                                           
my $verdiMB = `cat /root/temp/down.log | grep 'MB/s)' | cut -d " " -f 3 | sed 's/\(//'`; # Nedlasting i MB/s                                              
my $verdiKB = `cat /root/temp/down.log | grep 'KB/s)' | cut -d " " -f 3 | sed 's/\(//'`; # Nedlasting i KB/s                                              

chomp $verdiMB;                                                                                                                                           
chomp $verdiKB;                                                                                                                                           

my $regexMB = '[0-9]*\.[0-9]*';                                                                                                                           
my $regexKB = '[0-9]*';                                                                                                                                   

if ( $verdiMB =~ m/$regexMB/ ) {                                                                                                                          
my $nyverdi = $verdiMB * 1024;                                                                                                                           
chomp $nyverdi;                                                                                                                                          
print "nedlasting.value ", $nyverdi, "\n";                                                                                                               
}elsif ( $verdiKB =~ m/$regexKB/ ){                                                                                                                      
 chomp $verdiKB;                                                                                                                                         
 print "nedlasting.value ", $verdiKB, "\n";                                                                                                              
}                                                                                                                                                        

my $loggfil = "/root/temp/logs/log.txt";                                                                                                                  

unless ( -e $loggfil ){                                                                                                                                   
   `touch $loggfil`;                                                                                                                                     
   }                                                                                                                                                     

if ( -e $loggfil ){                                                                                                                                       
`cat /root/temp/down.log | grep '/s)' >> /root/temp/logs/log.txt`;                                                                                        
`rm /root/temp/5MB.zip /root/temp/down.log`;                                                                                                              
}                        

 

Skjermdump:

753343.jpeg

Endret av Haavard82
Lenke til kommentar

Bra du fikk det til å virke. Jeg har kabel-TV i fra Get og er ikke spesielt imponert. Jeg ser ikke så mye på TV, men det er utrolig irriterende å se og høre på digitale drop-outs. Det kan virke som om dekoder-boksen har et problem med minnelekasje e.l. da bilde og lyd kan stoppe nesten helt opp etter en tids bruk, men det kommer seg igjen etter en re-boot.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...