close

要整合 Enfuzion 和 Opsview 最簡單的方式是讓 Opsview 直接連到 Enfuzion 的 Database 中去抓取資料,

再加以判斷 Warning 和 Critical 條件,就可以達到整合的目標。

 

但... Enfuzion no need for costly database to operate ...

它沒有使用 Database,那原本的計劃達不到了...。

 

但我不會就此放棄的,我還有 perl 寫的 plugin 可以達到一樣的目標,

只不過要寫很多程序和無數的測試罷了...。

 

接下來我花了三天的時間,終於將這隻小程式寫出來,

途中經歷過的挫折就不多說了,寫好的程式如下。

 

 

use DBI;

my $aa;
my $bb;
my $cc;
my @dd;
my @j;

foreach $aa(qx /enfcmd.exe show cluster/)    ## 取得 cluster 中有幾個 node,存在 $bb 中
{

    if ( $aa =~ /   nodes .. /)
       {
        if ( $aa =~ /(\d+)/)
            {
             $bb = $1;
             }
        }
}


for ($cc = 1; $cc < $bb; $cc+=1)     ## 將取的 node 數量一一跑出 status ,存在 @j 中
{
    $dd = qx /enfcmd.exe show node $cc/;
        $j[$cc] = $dd;
}


my @r;
my @f;
my @g;
my $ee = 0;
my $ff = 0;


foreach my $val2 (@j)    ## 將 @j 中的資料切割,分別取出 status、host、total_done、started、idel_time、busy_time,存在 @r 中
  {
    if ( $val2 =~ / status /)
       {
         
         $ee = $ee + 1;     ## $ee 計算總行數
         $ff = 0;                 ## $ff 計算每一行的欄位數
          
         @f = split( /\s+\|\s+/, $val2);
           
           foreach my $val (@f)
           {
            $ff = $ff + 1;          
            $val =~ s/^\s+//;
            
            $r[$ee][$ff] = $val;      
           }
        }    
   }


$dbh = DBI->connect('dbi:mysql:database=opsview;host=1.1.1.1','enfuzion','11111111');   ## 建立與 MySQL 的連線

$sql = "truncate table `enfuzion_node_status`";

$sth = $dbh->prepare($sql);

$sth->execute || die "Could not execute SQL statement ... maybe invalid? \n\n $sql \n";


for ($cc = 1; $cc < $ee; $cc+=1)   ## 將 @r 中的資料帶入 SQL 中,insert 到 MySQL 中
{
   
  $sql = "INSERT INTO `enfuzion_node_status` (`status`, `host`, `total_done`, `started`, `idle_time`, `busy_time`) VALUES ('$r[$cc][7]', '$r[$cc][8]', '$r[$cc][9]', '$r[$cc][10]', '$r[$cc][11]', '$r[$cc][12]') ON DUPLICATE KEY UPDATE `status` = '$r[$cc][7]', `total_done` = '$r[$cc][9]', `started` = '$r[$cc][10]', `idle_time` = '$r[$cc][11]', `busy_time` = '$r[$cc][12]'";

  $sth = $dbh->prepare($sql);
 
  $sth->execute || die "Could not execute SQL statement ... maybe invalid? \n\n $sql \n";

}

 

 

 

 

 

arrow
arrow
    全站熱搜

    johnchen6927 發表在 痞客邦 留言(0) 人氣()