From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

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

SYNOPSIS

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>