📄 h323detail2db.pl
字号:
return; } elsif ($AcctStatusType eq "Alive"){ if ($verbose > 1) { print "DEBUG: Skipping \"Alive\" record\n"; } return; }; if (s/h323-call-type = \"h323-call-type=//) { $h323_call_type = substr($_, 0, -1); } elsif (s/h323-call-type = //) { $h323_call_type = $_; }; $UserName = $_ if s/User-Name = //; $NasIPAddress = $_ if s/NAS-IP-Address = //; $AcctSessionTime = $_ if s/Acct-Session-Time = //; $AcctInputOctets = $_ if s/Acct-Input-Octets = //; $AcctOutputOctets = $_ if s/Acct-Output-Octets = //; $AcctDelayTime = $_ if s/Acct-Delay-Time = //; $Called_Station_Id = $_ if s/Called-Station-Id = //; $Calling_Station_Id = $_ if s/Calling-Station-Id = //; $Cisco_NAS_Port = $_ if s/Cisco-NAS-Port = //; if (s/h323-remote-address = \"h323-remote-address=//) { $h323_remote_address = $_; } elsif (s/h323-remote-address = //) { $h323_remote_address = $_; }; if (s/h323-disconnect-cause = \"h323-disconnect-cause=//) { $h323_disconnect_cause = $_; } elsif (s/h323-disconnect-cause = //) { $h323_disconnect_cause = $_; }; if (s/h323-conf-id = \"h323-conf-id=//) { $h323_conf_id = substr($_, 0, -1); } elsif (s/h323-conf-id = //) { $h323_conf_id = $_; }; if (s/h323-connect-time = \"h323-connect-time=//) { $h323_connect_time = substr($_, 0, -1); } elsif (s/h323-connect-time = //) { $h323_connect_time = $_; }; if (s/h323-disconnect-time = \"h323-disconnect-time=//) { $h323_disconnect_time = substr($_, 0, -1); } elsif (s/h323-disconnect-time = //) { $h323_disconnect_time = $_; }; if (s/h323-setup-time = \"h323-setup-time=//) { $h323_setup_time = substr($_, 0, -1); } elsif (s/h323-setup-time = //) { $h323_setup_time = $_; }; if (s/h323-call-origin = \"h323-call-origin=//) { $h323_call_origin = substr($_, 0, -1); } elsif (s/h323-call-origin = //) { $h323_call_origin = $_; }; if (s/h323-voice-quality = \"h323-voice-quality=//) { $h323_voice_quality = substr($_, 0, -1); } elsif (s/h323-voice-quality = //) { $h323_voice_quality = $_; }; # FIXME: ugh, definitely look into using backreference. # something like s/(\S+)\s*=\s*\1/\1 = / or so } # Remove quotation marks from a bunch of different fields (Stupid Cisco) $UserName =~ s/\"//g; $h323_remote_address =~ s/\"//g; $Called_Station_Id =~ s/\"//g; $h323_disconnect_cause =~ s/\"//g; $h323_setup_time =~ s/\"//g; $h323_connect_time =~ s/\"//g; $h323_disconnect_time =~ s/\"//g; $h323_conf_id =~ s/\"//g; $h323_call_type =~ s/\"//g; $h323_call_origin =~ s/\"//g; $h323_voice_quality =~ s/\"//g; $Cisco_NAS_Port =~ s/\"//g; # Remove Remove . from the start of time fields (routers that have lost ntp timesync temporarily) $h323_setup_time =~ s/^\.*//; $h323_connect_time =~ s/^\.*//; $h323_disconnect_time =~ s/^\.*//; # If its a valid record continue onto the database functions # FIXME: More checks needed here. if ($h323_call_type) { if (&procedure_get()) { &procedure_insert; } else { &db_read; } } else { if ($verbose > 1) { print "DEBUG: Skipping non-h323 record\n"; } }}sub read_detailfile { my $filename = shift; my @record = (); if ($verbose > 1) { print "DEBUG: Reading detail file: $filename\n" } # test if the file exists and is readable if ((-r $filename) != 1) { if ($verbose >= 0) { print "INFO: Skipping file \"$filename\" as it is not readable or does not exist.\n" } return; } if ( $filename =~ /.gz$/ ) { open (DETAIL, "$GZCAT $filename |") || warn "read_detailfile(\"$filename\"): $!\n"; } elsif ( $filename =~ /.Z$/ ) { open (DETAIL, "$ZCAT $filename |") || warn "read_detailfile(\"$filename\"): $!\n"; } elsif ( $filename =~ /.bz2$/ ) { open (DETAIL, "$BZCAT $filename |") || warn "read_detailfile(\"$filename\"): $!\n"; } else { open (DETAIL, "<$filename") || warn "read_detailfile(\"$filename\"): $!\n"; } $valid_input = (eof(DETAIL) ? 0 : 1); if ($verbose > 1) { print "DEBUG: Starting to read records from $filename\n"; } while($valid_input) { $valid_input = 0 if (eof(DETAIL)); if ($verbose > 1) { print "DEBUG: Reading Record\n"; } &read_record; &process_record; } my $runtime = (time() - $starttime); if ($runtime > 0) { } else { $runtime = 1; } my $speed = ($passno / $runtime); if ($verbose >= 0) { print "\n $passno records from $filename were processed in $runtime seconds ($speed records/sec) \n"; }}sub print_usage_info { print "\n"; $leader = "$progname $version Usage Information"; $underbar = $leader; $underbar =~ s/./-/g; print "$leader\n$underbar\n"; print "\n"; print " Syntax: h323detail2db.pl [ options ] file\n"; print "\n"; print " -h --help Show this usage information\n"; print " -v --verbose Turn on verbose\n"; print " -x --debug Turn on debugging\n"; print " -p --procedure Use Postgresql stored procedure (faster!)\n"; print " -V --version Show version and copyright\n"; print " -H --host Database host to connect to (Default: localhost)\n"; print "\n";}sub procedure_get() { return $stored_procedure;}sub procedure_set($) { $stored_procedure = $_[0];}sub main { # Parse the command line for options if (!scalar(@ARGV)) { &print_usage_info(); exit(SUCCESS); }; # See the Getopt::Long man page for details on the syntax of this line @valid_opts = ("h|help", "V|version", "f|file=s", "x|debug", "v|verbose+" => \$verbose, "q|quiet+" => \$quiet, "D|date=s", "H|host=s", "p|procedure"); Getopt::Long::Configure("no_getopt_compat", "bundling", "no_ignore_case"); Getopt::Long::GetOptions(@valid_opts); # Post-parse the options stuff select STDOUT; $| = 1; if ($opt_V) { # Do not edit this variable. It is updated automatically by CVS when you commit my $rcs_info = 'CVS Revision $Revision: 1.8 $ created on $Date: 2003/06/16 12:23:27 $ by $Author: pnixon $ '; $rcs_info =~ s/\$\s*Revision: (\S+) \$/$1/; $rcs_info =~ s/\$\s*Date: (\S+) (\S+) \$/$1 at $2/; $rcs_info =~ s/\$\s*Author: (\S+) \$ /$1/; print "\n"; print "$progname Version $version by Peter Nixon <codemonkey\@peternixon.net>\n"; print "Copyright (c) 2002-2003, 2003 Peter Nixon\n"; print " ($rcs_info)\n"; print "\n"; return SUCCESS; } elsif ($opt_h) { &print_usage_info(); exit(SUCCESS); } if ($opt_x) { print "DEBUG: Debug mode is enabled.\n"; $verbose = 2; } elsif ($quiet) { $verbose -= $quiet; } &procedure_set($opt_p); if (@ARGV) { if ($opt_H) { &db_connect($opt_H); } else { &db_connect(localhost); } # Loop through the defined files foreach $file (@ARGV) { &read_detailfile($file); } &db_disconnect; } else { print "ERROR: Please specify one or more detail file(s) to import.\n"; exit(FAILURE); }}exit &main();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -