NAME

Net::Connection::Sniffer::Report -- network profiling reports

SYNOPSIS

  use Net::Connection::Sniffer::Report qw(
	read_stf
	by_cidr24
	by_name
	report
	presync
	sync
	chkcache
	get_lock
	chk_wconf
	rqst_dump
	web_report
	my_time
	dyn_bind
  };

DESCRIPTION

Net::Connection::Sniffer::Report consolidates the dump file produced by Net::Connection::Sniffer.

($stats,$head) = read_stf($filepathname);
($byc24,$rate,$bw) = by_cidr24($stats);
($byname,$rate,$bw) = by_name($stats,$byc24);
 $rv = report(*HANDLE,$file,$type);
 $rv = presync($filepathname);
 $rv = sync($filepathname,$oldtime,$timeout);
 $rv = chkcache($filepathname,$age);
($lock,$file) = get_lock($filepathname,$timeout,$umask);
 $rv = chk_wconf($conf);
 $rv = rqst_dump($sin,$file,$age,$updto);
 web_report($wconf);
 $timestring = my_time($epoch_seconds);
 $port = dyn_bind($sock,$iaddr);
  • ($stats,$head) = read_stf($filepathname);

    Read the Net::Connection::Sniffer status file and return a reference to its contents.

      input:	file path
      returns:	undef or empty array on failure
    			[$@ is set with error]
        or scalar
    		reference to status hash
        or array
    		(status ref, $header)

    Where the $header content is extracted from the Net::Connection::Sniffer status file.

  • ($byc24,$rate,$bw) = by_cidr24($stats);

    Return a reference to the composite of the status hash with usage grouped by cidr/24

      input:	reference to $stats
      returns:	$composite,	# reference to composite hash
    		$rate,		# calculated queries per hour
    		$bw		# calculated bytes per hour
    		
    
      $composite = {
         number  => {		# number is for administrative use only
    	R	=> 12345,	# composite queries / hour
    	W	=> 45678,	# composite bytes / hour
    	A	=> ['ip1','ip2','...'], # ip addr's in cidr/24
    	E	=> 12345,	# last update timestamp
         },
         another number => {	and so on...
  • ($byname,$rate,$bw) = by_name($stats,$byc24);

    Further groups the composite statistics by primary sub domains.

      input:	reference to statistics hash,
    		reference to cidr24 grouping
      returns:	$byname,	# reference to composite hash
    		$rate,		# calculated queries per hour
    		$bw		# calculated bytes per hour
    
      $byname = {
         rev_subdomain => {		# text for administrative use
    	R	=> 12345,	# composite queries / hour
    	W	=> 45678,	# composite bytes / hour
    	A	=> ['ip1','ip2','...	# and so on...
    	E	=> 12345,	# last update timestamp
        },
        another rev subdomain => {	and so on...
  • $rv = report(*HANDLE,$file,$type);

    Generate a statistics usage report ordered from highest to lowest bandwidth usage.

    Two types of reports are created:

      1) grouped by cidr24 [default], $type = false
      2) grouped by sub domain, $type = true
    
      input:	*HANDLE,	# file or *STDOUT
    		$file		# path/to/statistics_file
    		$type,		# true/false
      returns:	returns false on success
    		or the error
      prints:	to the file handle
  • $rv = presync($filepathname);

    Wait up to one second for the file to be older than now.

      input:	$fpn,	# path to file
      returns:	$ctime	# file ctime
    	    or	0 if the file does not yet exist
    	    or	undef on error (ctime in future)
  • $rv = sync($filepathname,$oldtime,$timeout);

    Wait for file ctime to update, fail on timeout.

      input:	$fpn,	# path to file
    		$old,	# original ctime or
    			# 0 if the file will be created
    		$to,	# timeout in seconds
    			# [default 30 seconds]
      returns:	$ctime	# file ctime
    	    or	undef on failure
    
      Sets $@ on timeout;

    Sets $@ on timeout. If the file is not initially found, sync will wait for the timeout period if the directory is present and readable.

  • $rv = chkcache($filepathname,$age);

    Check if a file is older than 'age'

      input:	file	# path to file
    		age	# maximum age in seconds
    			# [default = 300 seconds]
      return:	ctime if not too old
    		undef if too old or missing
  • ($lock,$file)=get_lock($filepathname,$timeout,$umask);

    Return an exclusive file handle.

      input:	$file,		# path to file
    		$to,		# timeout in seconds
    				# [default 15 seconds]
    		$umask		# [default 0117]
      returns:	($lock,$file)	# handles
    	    or	() on error
    
      Sets $@ on error.
      NOTE: the file path must be prechecked!

    Remember to close both the FILE and the LOCKFILE.

  • $rv = chk_wconf($conf);

    Check the syntax and content of the web configuration hash.

    input:	hash reference
    returns:	false on success or error text
  • $rv = rqst_dump($sin,$file,$age,$updto);

    Request a stats dump from the daemon

      input:	sockaddr_in,	# address dump rqst host
    		path/to/statsfile,
    		age,		# in seconds i.e. 300
    		update timeout
    
      returns:	false on success or error text

    If $sin is false, not dump is performed

    If age if false, dump is requested unconditionally

  • web_report($wconf);

    Print a report to STDOUT. Takes the type of report from the first argument.

    usage: <!--#exec cmd="./nc.sniffer.cgi 0" -->
      or	 <!--#exec cmd="./nc.sniffer.cgi 1" -->

    where an argument of "0" produces a report ordered by /24 by usage and an argument of "1" produces a report ordered by subdomain by usage.

    input:	config pointer
    returns:	prints to STDOUT

    where $wconf = {

      # location of statistics file
      # [REQUIRED]
      #
    	stats	=> '/var/run/nc.sniffer/nc.sniffer.stats',
    
      # location of web cache file, this must exist
      # and be writable by the web daemon
      # [RECOMMENDED]
      #
    	cache	=> './tmp/sniffer.cache',
    
      # statstistics update timeout
      # [OPTIONAL] default 15 seconds
      #
    	updto	=> 15,
    
      # cache or stats (if cache not activated above)
      # refresh every nnn seconds
      # default is 300 seconds
      # [OPTIONAL]
      #
    	refresh	=> 300,
    
      # update host:port
      #
      # format:
      #	port
      #   or
      #	host:port
      #   or
      #	ipaddr:port
      #
      # host defaults to 'localhost', 127.0.0.1
      # [REQUIRED]
      #
    	update	=> '127.0.0.1:10004',
    
      };
  • $timestring = my_time($epoch_seconds);

    Convert seconds since the epoch into a formated local time string of the form:

    Month-text day hh::mm::ss
    
    input:	seconds since the epoch
    returns:	local time string
  • $port = dyn_bind($sock,$iaddr);

    Attempt to bind a socket to the IP address and the first available dynamic assigned port, in the range 49152 through 65535. Fails after 100 attempts

      input:	socket
    		IP addr as returned by inet_aton
      returns:	port number or undef

EXPORT_OK

read_stf
by_cidr24
by_name
report
presync
sync
chkcache
get_lock
chk_wconf
rqst_dump
web_report
my_time
dyn_bind

COPYRIGHT

Copyright 2006, Michael Robinton <michael@bizsystems.com>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (except as noted otherwise in individuals sub modules) published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

AUTHOR

Michael Robinton <michael@bizsystems.com>