2017年1月4日 星期三

如何做出 cacti plugin manager + Line API Alert

在 Cacti 官網上有說到 這個 manager plugin 的用途為何及如何安裝這個 Plugin.
URL 如下 http://docs.cacti.net/userplugin:manage
這裡不再說明了,本 LAB 是用 plugin manage + TCP Port Template 這二個元件做出.
關於 TCP Port Template 安裝與請參閱.
http://forums.cacti.net/viewtopic.php?f=12&t=16477

本 LAB 的重點在於說明  manager  與 Line API 的介接,並發出 Alert Message.

在 Manage 裝好後,在 Cacti WEB UI \ Configuration \ Settings \ Manage
可以看見它提供了 Netsend Options 的功能,
簡單的說它可以透過 Enable "Net send" alerts 的觸發 Windows Net Send 機制,
所以我們可以將這個機制變更為與 Line API 的介接.

因為它是使用 Perl 程式語言.所以我們可以參考 Line 官網上
Push message (Perl) 的寫法,去改寫它即可.

https://devdocs.line.me/en/?perl#push-message

Push message API example

use LINE::Bot::API;
use LINE::Bot::API::Builder::SendMessage;

my $bot = LINE::Bot::API->new(
    channel_secret       => "<channel secret>",
    channel_access_token => "<channel access token>",
);

my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_text(
    text => 'hello',
);
my $res = $bot->push_message("<to>", $messages->build);
unless ($res->is_success) {
    # error handling
    ....
}


沒錯程式就是這樣..

==========


接下來我們再看一下原來的 netsend.pl 的 Source Code .


[root@bbb manage]# pwd
/var/www/html/cacti/plugins/manage
[root@bbb manage]#

[root@bbb manage]# cat netsend.pl

use Net::NetSend qw(:all);
use Net::Nslookup;
  
my $target_netbios_name = $ARGV[0];
my $source_netbios_name = "CACTI";
my $target_ip = nslookup(host => $ARGV[0], type => "A");
my $message = $ARGV[1];
my $debug = 0;

my $success = sendMsg($target_netbios_name, $source_netbios_name, $target_ip, $message, $debug);

print ($success ? "Delivery successfull\n" : "Error in delivery! \n$@\n");


=========

可先使用 # cp netsend.pl netsend.pl.bak  將原程式備份,再去改寫該程式. 

Push Line message API example

#!/usr/local/bin/perl
use LINE::Bot::API;
use LINE::Bot::API::Builder::SendMessage;
$bot = LINE::Bot::API->new(
   channel_secret       => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
   channel_access_token => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
);

$ToLineUid = "$ARGV[0]";
$messages = LINE::Bot::API::Builder::SendMessage->new;
$messages->add_text( text => " $ARGV[1] " );
$bot->push_message($ToLineUid, $messages->build);

======

沒錯程式就是這樣..


補充說明,那個 $ARGV[0] 是第一個參數 為 Line UID 的,
(原來的用法是指 Net Send 接收者)
可在 Cacti WEB UI \ Configuration \ Settings \ Manage \
Netsend Options \ Statuis that will  receiv 'net send' alerts
的地方輸入.$ARGV[1] 是第二個參數,是原 Manage Alert Message.

所以程式的介接改寫就是這樣簡單.


WEB UI 設定畫面





















Demo





































其它參考資訊


使用 Perl 建立 Line API 運用環境
http://xrcd2.blogspot.tw/2016/12/perl-line-api.html

Line API 使用小筆記
http://www.vlab.com.tw/index.php/forum/21/15572-line-api


沒有留言:

張貼留言