#!/usr/bin/perl

 #%# family=auto
 #%# capabilities=autoconf

use bigint ;
use LWP::UserAgent ;
use HTTP::Cookies ;

# ルータ情報
my $router = "http://192.168.1.254" ;
my $auth = [
	'name' => "userAdmin" ,
	'pswd' => "xxxxxxxxxx"
	] ;

my %colour = (
	WiFi2 => 'FFB000' ,
	WiFi6 => 'FF4040' ,
	LAN1  => '00D0FF' ,
	LAN2  => '1040FF' ,
	LAN3  => '20D000' ,
	LAN4  => '00D020' ,
	) ;
my %label = (
	WiFi2 => 'WiFi2(2.4G)' ,
	WiFi6 => 'WiFi6(5G)' ,
	LAN1  => 'LAN1(RT)' ,
	LAN2  => 'LAN2' ,
	LAN3  => 'TEL(2F)' ,
	LAN4  => 'TEL(1F)' ,
	) ;

# Munin のグラフ情報の設定用処理
if ( defined($ARGV[0]) and $ARGV[0] eq "config" ) {

	# グラフの基本情報
	print "graph_title 光ファイバ GPON ネットワーク状態\n" ;
	print "graph_category network\n" ;
	print "graph_vlabel packet/秒 (-)受信 / (+)送信\n" ;
	print "graph_args --base 1024\n" ;
	print "graph_printf %4.1lf\n" ;

	# WiFi1..WiFi8 WiFi6=5GHz,SSID=6
	foreach my $sr ( "Received" , "Sent" ) {
		for( my $i = 1 ; $i <= 8 ; $i++ ) {
			my $field = "WiFi$i" ;
			if ( exists( $label{$field} ) ) {
				print "$field$sr.type COUNTER\n" ;
				print "$field$sr.min 0\n" ;
				if ( $sr eq "Received" ) {
					print "$field$sr.graph no\n" ;
				} else {
					print "$field$sr.draw AREASTACK\n" ;
					print "$field$sr.negative ${field}Received\n" ;
				}
				#print "$field$sr.max 1000000\n" ;
				#print "$field$sr.cdef $field$sr,8,*\n" ;
				print "$field$sr.label ".$label{$field}."\n" ;
				print "$field$sr.colour ".$colour{$field}."\n" ;
			}
		}
	}
	# LAN1..LAN4
	foreach my $sr ( "Received" , "Sent" ) {
		for( my $i = 1 ; $i <= 4 ; $i++ ) {
			my $field = "LAN$i" ;
			if ( exists( $label{$field} ) ) {
				#print "$field$sr.label LAN$i pkt\n" ;
				print "$field$sr.type COUNTER\n" ;
				print "$field$sr.min  0\n" ;
				if ( $sr eq "Received" ) {
					print "$field$sr.graph no\n" ;
				} else {
					print "$field$sr.draw AREASTACK\n" ;
					print "$field$sr.negative ${field}Received\n" ;
				}
				#print "$field$sr.max 1000000\n" ;
				#print "$field$sr.cdef $field$sr,8,*\n" ;
				print "$field$sr.label ".$label{$field}."\n" ;
				print "$field$sr.colour ".$colour{$field}."\n" ;
			}
		}
	}
	print "LAN1Sent.warning 1000\n" ;
	print "LAN1Received.warning -1000\n" ;
	# TEL(2F),TEL(1F)を10倍
	#print "LAN3Sent._multiplier 0.1\n" ;
	#print "LAN3Received._multiplier 0.1\n" ;
	#print "LAN4Sent._multiplier 0.1\n" ;
	#print "LAN4Received._multiplier 0.1\n" ;
	exit 0 ;
}

# ルータに login
my $ua = LWP::UserAgent->new ;
my $cookie = new HTTP::Cookies() ;
my $ans_count = 0 ;
$ua->cookie_jar( $cookie ) ;
my $res = $ua->post( "$router/login.cgi" , $auth ) ;

if ( $res->is_redirect ) {
	#print "is_redirect\n" ;
	# LAN情報を取得
	$res = $ua->get( "$router/lan_status.cgi?lan" ) ;
	my $wlan_flag = 0 ;
	my $wlan_id = 0 ;
	my $wlan_enable = 0 ;
	my $lan_flag = 0 ;
	my $lan_id = 0 ;
	foreach my $line( split( /\n/ , $res->content ) ) {
		#print $line ;
		if ( $line =~ /^\s+var\s+wlan_status\s*=\s*/ ) {
			# var wlan_status= を探す
			$wlan_flag = 1 ;
		} elsif ( $wlan_flag
				  && $line =~ /^(|,)([1-8]):{"RadioEnabled":1,$/ ) {
			# WLAN番号を取得
			$wlan_id = $2 ;
		} elsif ( $wlan_flag && $wlan_id > 0
				  && $line =~ /^"Enable":(0|1),$/ ) {
			$wlan_enable = $1 ;
		} elsif ( $wlan_flag && $wlan_id > 0
				  && $line =~ /^"TotalPackets(Sent|Received)":(\d+)\,$/ ) {
			$ans_count++ ;
			if ( exists( $label{"WiFi$wlan_id"} ) && $wlan_enable ) {
				print "WiFi$wlan_id$1.value $2\n" ;
			}
		} elsif ( $wlan_flag && $line =~ /^;$/ ) {
			$wlan_flag = 0 ;
			$wlan_id = 0 ;
			$wlan_enable = 0 ;
		} elsif ( $line =~ /^\s+var\s+lan_ether\s*=\s*/ ) {
			# 2018/12/23 "lan_ether=" が "lan_ether = "に変更されていた
			# "var lan_ether="を探す
			$lan_flag = 1 ;
		} elsif ( $lan_flag && $line =~ /^(|,)([1-4]):\{/ ) {
			# LAN番号を取得
			$lan_id = $2 ;
		} elsif ( $lan_flag && $lan_id > 0
				  && $line =~ /^Packets(Sent|Received):(\d+)\,$/ ) {
			# PacketsSent / PacketsReceived
			$ans_count++ ;
			print "LAN$lan_id$1.value $2\n" ;
			$lan_id = 0 if ( $1 eq "Received" ) ;
		} elsif ( $lan_flag && $line =~ /^;$/ ) {
			last ;
		}
	}
}

# exit ($ans_count == 8) ? 0 : 1 ;

### Local Variables: ###
### mode: perl ###
### tab-width: 4 ###
### End: ###
