标签为 Perl 的文章

实现Zabbix通过邮件发送Screen图形报表

在使用Zabbix的过程中,我们通常会建立一些需要的Screen图形报表来汇总需要监控的Graph。
而下面的两个脚本,则是通过从Zabbix数据库中获取所有的Screen图形参数,提供Zabbix的WEB接口将所有图形保存到本地,然后通过脚本以Email形式发送过来,作为每天的自动报表。

$ sudo mkdir -p /data/script
$ sudo mkdir -p /data/graph

$ sudo vim /data/scripts/save-graph.pl

#!/usr/bin/perl
use File::Path;
use DBI;

my $path = '/data/graph';
if(-e $path) { rmtree($path); }
mkdir($path);

my $stime = `date +%Y%m%d`; chop($stime); $stime .= '1000';
if( length($stime) != 12 ) { print "Error get date"; exit; }

my $period = 86400;    # 24 hours

my $login = 'admin';   # Zabbix Web User
my $pass = 'password'; # Zabbix Web User Password, must be URL Encoded

my $cook = "/tmp/cookie";
my $dsn = 'DBI:mysql:zabbix:localhost'; # Connect MySQL DB "zabbix" on localhost
my $db_user_name = 'zabbix'; # MySQL DB user
my $db_password = 'dbpassword'; # MySQL DB user password

my $dbh = DBI->connect($dsn, $db_user_name, $db_password);
my $sth = $dbh->prepare(qq{select a.name,a.hsize,a.vsize, b.resourceid, b.width, b.height,b.x,b.y from screens a,screens_items as b where a.screenid=b.screenid and a.templateid<=>NULL order by a.name});
$sth->execute();
my %screens;

# Get all graphs by using curl
while (my ($name,$hsize,$vsize, $id,$width,$height,$x,$y) = $sth->fetchrow_array())
{
    if(length($id) > 2){
        #print "$id => $ids\n";
        my $p = "$path/$name.$hsize.$vsize.$y.$x.$id.png";
        my $strcomm  = `curl  -c $cook -b $cook -d "request=&name=$login&password=$pass&autologin=1&enter=Sign+in"  localhost/zabbix/index.php`;
        $strcomm  = `curl  -b $cook -F  "graphid=$id" -F "period=$period" -F "stime=$stime" -F "width=$width" -F "height=$height" localhost/zabbix/chart2.php > $p`;
    }
}

exit ;

阅读全文 »

, ,

15 Comments

分享一份在Linux上查看底层硬件信息的Perl脚本

首先,非常感谢一阵风大哥的无私奉献,通过他提供的脚本,可以非常清晰明白的看到系统的硬件参数信息。
如下图所示:

整个 Perl 脚本有 10870 行,因此就不直接贴在网页中了,大家有需要的可以直接点击此处下载:
http://heylinux.com/download/hwconfig.tar

下载之后,将脚本赋予执行权限直接运行即可:
# chmod +x hwconfig
# ./hwconfig

9 Comments

通过Perl脚本实现邮件客户端进行邮件交互测试

由于公司目前采用的自建邮件系统部署在内部机房,在网络链路上与国外,以及联通等网络存在着通讯的稳定性问题。

因此,随着企业邮箱使用的越来越频繁,这类问题反应越来越大,主要是国外出差的员工访问不了公司邮件系统,以及与其他公司通信时出现的邮件延迟甚至丢失情况。

因此,为了排除企业邮箱软件本身存在的Bug等造成的影响,特考虑进行一次大量的邮件交互测试,来确定软件本身是否存在问题。

在Linux下有很多办法可以实现,比如用Shell调用邮件本身的命令行指令等,但最好还是通过客户端的方式来实现,因为这种大量的测试行为会被其他邮箱认为是垃圾邮件行为的,把邮件服务器IP给纳入黑名单可不是好玩的。

后来,Cluster群里的好兄弟,UCWEB的罗学,给我共享了一个Perl的脚本,很简单,但是也很好用。利用这个脚本我完成了这样的一个测试工作,顺便提一下,结果很理想,呵呵,网易和搜狐成功接收1000封邮件,一封没落下(把发送邮件的地址加到白名单);而通过网易往回来发的时候到215封时测试机IP就被纳入黑名单了,不过这215封我们也全部成功接收了。

废话不多说了,进入正题:
首先,

通过root用户登录,执行
cpan

进入以后,再执行
install MIME::Lite
install Authen::SASL

这两个包,每个包大概要等个10来分钟的样子才会完全下载并安装好。

脚本内容:

#!/usr/bin/perl -w
use strict;
use MIME::Lite;
use MIME::Base64;
use Authen::SASL;

foreach my $a ( 1 .. 1000 ) {
  sleep 10;
  my $from = 'username@domain.com';
  my $passwd = 'password';
  my $to = 'username@163.com';
  my $messages = $a . ":" . "Hello Rainbow!";
  my $msg = MIME::Lite->new(
      From     =>  $from,
      To       =>  $to,
      Cc       =>  'username@sohu.com',
      Subject  =>  $a . ":" . 'Hello Rainbow!',
      Type     =>  'TEXT',
      Data     =>  $messages,
  );
  MIME::Lite->send('smtp','smtp.domain.com',
      Debug   =>'1',
      AuthUser=>$from,
      AuthPass=>$passwd,
  );
  $msg->send;
}

1 Comment