gnuplot画图;现值班表是execl做的,想法:用perl智能排班,CGI显示



[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;

my $total;
my $web = shift || "www.sina.com.cn";  #默认dig [url]www.sina.com.cn[/url]除非在命令行中指定别的网址
open my $file,"dig $web +trace |" or die "Fail to open $!"; #将命令的输出通过管道传递到filehandler $file
while(<$file>){
        chomp;
        die "connection time out " if /^;; connection timed out;/;
        next unless /(\d+) ms$/;
        $total += $1;
}

print "$total\n";

感谢指正

谢谢。有2个地方不是很明白:
1。my $web = "www.cc98.org" || shift;                                           || shift 是什么意思?
2.  open my $file,"dig $web +trace |" or die "Fail to open $!";         "dig $web +trace |"  是重定向吗?可以用·dig $web +trace·吗?
麻烦楼上讲解,谢谢!

但是你这个代码有点问题,如果出现如下情况,你这个代码得出的结果就没有依据,或者说还不如没有得出结果(error)。你认为呢?
-bash-2.05b$ dig sina.com.cn +trace

; <<>> DiG 9.3.3 <<>> sina.com.cn +trace
;; global options:  printcmd
.                       434338  IN      NS      M.ROOT-SERVERS.NET.
.                       434338  IN      NS      A.ROOT-SERVERS.NET.
.                       434338  IN      NS      B.ROOT-SERVERS.NET.
.                       434338  IN      NS      C.ROOT-SERVERS.NET.
.                       434338  IN      NS      D.ROOT-SERVERS.NET.
.                       434338  IN      NS      E.ROOT-SERVERS.NET.
.                       434338  IN      NS      F.ROOT-SERVERS.NET.
.                       434338  IN      NS      G.ROOT-SERVERS.NET.
.                       434338  IN      NS      H.ROOT-SERVERS.NET.
.                       434338  IN      NS      I.ROOT-SERVERS.NET.
.                       434338  IN      NS      J.ROOT-SERVERS.NET.
.                       434338  IN      NS      K.ROOT-SERVERS.NET.
.                       434338  IN      NS      L.ROOT-SERVERS.NET.
;; Received 500 bytes from 211.151.88.20#53(211.151.88.20) in 2 ms

;; connection timed out; no servers could be reached
-bash-2.05b$


QUOTE:
原帖由 gaochong 于 2008-2-21 23:38 发表
谢谢。有2个地方不是很明白:
1。my $web = "www.cc98.org" || shift;                                           || shift 是什么意思?
2.  open my $file,"dig $web +trace |" or die "Fail to open $!" ...

见修改以后的代码


1.这就话我刚好写反了,在这里shift默认对@ARGV操作,提取出@ARGV第一个元素
2.``捕获输出也是可以的,不过那样捕获到的结果作为一整个字符串
     而用管道是一次读取一行
    个人习惯问题
3.确实有问题,可以匹配下"connection timeout",然后提示一下
http://bbs.chinaunix.net/thread-1053823-4-1.html###  最终代码部分,也请指出不足。

但我还是不清楚 || 这个字符的意义。

希望楼上讲解,或者如何查询这个字符的功能。
http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html

应该说很容易可以画出这个图。我先把这个图划出。
但是,日复一日,这个图会越变越大,太难看了。
我希望能够像MRTG或者rrd tool那样,或者能够根据日期段而现实不同的图,请问用gnuplot可以实现吗?
谢谢!万分感谢!
我按照example,plot命令都没有出错,但并没有看到弹出窗口和图。为什么?
难道要运行图形界面(init 5)才可以吗?我想不会吧?
你可以直接保存为文件,
至于说要想像mrtg那样保存长期数据,就得代码实现了,gnuplot 只是一个画图工具,具体要怎么画,画多少,就得用其他的来控制。
我也是在以前的项目中(类似与网络监控的项目)用过gnuplot,很久了,细节记不太清楚了


QUOTE:
原帖由 zhangjiakouzf 于 2008-2-22 10:20 发表
你可以直接保存为文件,
至于说要想像mrtg那样保存长期数据,就得代码实现了,gnuplot 只是一个画图工具,具体要怎么画,画多少,就得用其他的来控制。
我也是在以前的项目中(类似与网络监控的项目)用过gnu ...

不用,用 rrd tool 就行。


QUOTE:
原帖由 gaochong 于 2008-2-22 00:41 发表
http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html

应该说很容易可以画出这个图。我先把这个图划出。
但是,日复一日,这个图会越变越大,太难看了。
我希望能够像MRTG或者rrd tool那样, ...

生成的只是一个图片文件,你用浏览器或者图片查看器就可以看到了。
或者拷贝到 windows 下就可以双击查看。
我的文本文件格式:
22-Feb-08 182 413 413 791 790 1164
23-Feb-08 384 251 403 650 645 694
24-Feb-08 4981 436 651 533 440 470
25-Feb-08 232 178 598 496 585 384
26-Feb-08 199 502 297 689 810 972

图也得出来了,但并不是一个图有2条线,我是用GSview查看的,见附件。

plot '/home/gaochong/dns/dns2.dat' using 1:2 with linespoints,'/home/gaochong/dns/dns2.dat' using 1:3 with linespoints pointtype 10

为什么会这样呢?