上次的脚本只是将监控的数据展示在终端上,这次增加了一个功能:数据展示在终端的同时,存入到数据库中
code:
- #!/usr/bin/perl -w
- use strict;
- use utf8;
- use LWP::Simple;
- use DBI;
- my $dsn = 'DBI:mysql:database=monitor;host=localhost;port=3306';
- my $dbh = DBI->connect($dsn,'root','test',{PrintError=>0,RaiseError=>1})
- or die "Can't connect to mysql" . DBI->errstr;
- my $table = qq/CREATE TABLE IF NOT EXISTS monitor (
- room char(20) not null,
- in_bytes varchar(100) not null,
- out_bytes varchar(100) not null,
- date timestamp not null
- )
- /;
- my $sth = $dbh->prepare($table);
- $sth->execute();
- $sth->finish();
- while (1) {
- my $url = shift || "http://xxx.xxx.xxx.xxx";
- my $content = get $url;
- my @url = split /\n/,$content;
- my ( $i,$str ) = ( 0,\@url );
- print scalar localtime,"\n";
- while ( $i < scalar @$str ) {
- if ( @$str[$i++] =~ /杭州机房1|杭州机房2|上海机房1|上海机房2/ ) {
- binmode STDOUT,'encoding(utf8)';
- my $room = $&;
- print STDOUT "$&\n";
- $i += 16;
- my ($in) = @$str[$i++] =~ /(?:.*)\>(\S*\s*\S*).*\<\/td\>/;
- printf '%s',"\tCurrent In: $1\t";
- $i += 5;
- my ($out) = @$str[$i++] =~ /(?:.*)\>(\S*\s*\S*).*\<\/td\>/;
- printf '%s',"Current Out: $1\n\n";
- my ($sec,$min,$hour,$day,$month,$year) = (localtime(time))[0..5];
- $month++;$year+=1900;
- my $date = sprintf "%04d-%02d-%02d %d:%d:%d",$year,$month,$day,$hour,$min,$sec;
- my $data = qq/INSERT INTO monitor VALUES
- ("$room","$in","$out","$date")/;
- $sth = $dbh->do($data);
- }
- }
- print '-' x 70,"\n";
- sleep 900;
- }
- $dbh->disconnect();
代码有些改动,主要是之前的一些写法不太好。
数据库中的图
- +--------------------+-------------+------------+---------------------+
- | room | in_bytes | out_bytes | date |
- +--------------------+-------------+------------+---------------------+
- | xxxx | 85.9 Mb/s | 99.5 Mb/s | 2011-11-04 10:29:49 |
- | xxxx | 14.1 Mb/s | 80.7 Mb/s | 2011-11-04 10:29:49 |
- | xxxx | 190.3 Mb/s | 332.6 Mb/s | 2011-11-04 10:29:49 |
- | xxxx | 8968.4 kb/s | 119.9 Mb/s | 2011-11-04 10:29:49 |
- | xxxx | 384.0 b/s | 576.0 b/s | 2011-11-04 10:29:49 |
- +--------------------+-------------+------------+---------------------+