NAME
perfSONAR_PS::DB::PingER -A module that provides base Rose::DB implementation of data access for PingER databases
DESCRIPTION
This module provides access to the relevant Rose::DB methods given the relevant contact points for the database. It also provides some transparency to the numerous data tables that is used by PingER in order to provide performance.
SYNOPSIS
# create a new database object but calling the Rose::DB register db function
# note that this allows more than one database to be defined, however
# we will only use the default/default one.
perfSONAR_PS::DB::PingER->register_db(
domain => 'default',
type => 'default',
driver => $db_driver,
database => $db_name,
host => $host,
port => $port,
username => $username,
password => $password,
);
# try to open the db
my $db = perfSONAR_PS::DB::PingER->new_or_cached();
# open the database
if ( $db->openDB() == 0 ) {
# There are two ways of getting at the data, either use the wrapper classes
# or use the Rose::DB::Objects directly.
# get the appropiate rose::db::object that represents a host; this will
# automatically insert the entries into the host table if it does not exist
my $src = $db->get_host( 'localhost', '127.0.0.1' );
my $dst = $db->get_host( 'iepm-resp.slac.stanford.edu', '134.79.240.36' );
# setup some values for the metadata entry
my $transport = 'ICMP';
my $packetSize = '1008';
my $count = 10;
my $packetInterval = 1;
my $ttl = '64';
# get the rose::db::object for the metadata, again, this will automatically
# insert the entry into the database if it does not exist
my $metadata = $db->get_metadata( $src, $dst, $transport, $packetSize, $count, $packetInterval, $ttl );
# say we have the data we want to insert as a hash
$hash = {
'timestamp' => '1000000000', # REQUIRED
'minRtt' => '0.023',
'maxRtt' => '0.030',
'meanRtt' => '0.026',
'minIpd' => '0.0',
'maxIpd' => '0.002',
'meanIpd' => '0.006',
'iqrIpd' => '0.0001',
'lossPercent' => '0.0',
'outOfOrder' => 'true',
'duplicates' => 'false',
}'
# now, given that we have the metadata, insert some data into database
my $data = $db->insert_data( $metadata, $hash );
} else
print "Something went wrong with the database init.";
}
error( $ )
accessor/mutator for the last error message
openDB
opens a connection to the database, creating the rose db object loaders necessary to instantiate the in-memory objects for further query of the tables directly
Returns 0 = if everything is okay -1 = somethign went wrong
closeDB
closes the connection to the database
soi_host( $ip_name, $ip_number )
'select or insert host': wrapper method to look for the table host for the row with ip_name $ip_name and ip_number $ip_number' and return the appropiate Rose::DB::Object for the host table entry.
get_metadata( $src, $dst, $transport, $packetSize, $count, $packetInterval, $ttl )
wrapper method to retrieve the relevant rose::db:object of the metadata entry given rose::db::objects of the source $src to destination $dst using a hash of key/value pairs: $hash ={ 'transport' = # ICMP, TCP, UDP 'packetSize' = # packet size of pings in bytes 'count' = # number of packets sent 'packetInterval' = # inter packet time in seconds 'ttl' = # time to live of packets
}
insert_data( $metadata, $hash );
inserts into the database the information presented with the rose::db::metadata object $metadata (also the output of get_metadata()) with the information presented in the hash $hash. $hash should contain $hash = {
# REQUIRED values
'timestamp' => # epoch seconds timestamp of test
# RTT values
'minRtt' => # minimum rtt of ping measurement
'meanRtt' => # mean rtt of ping measurement
'maxRtt' => # maximum rtt of ping measurement
# IPD
'minIpd' => # minimum ipd of ping measurement
'meanIpd' => # mean ipd of ping measurement
'maxIpd' => # maximum ipd of ping measurement
# LOSS
'lossPercent' => # percentage of packets lost
'clp' => # conditional loss probability of measurement
# JITTER
'iqrIpd' => # interquartile range of ipd value of measurement
'medianRtt' => # median value of rtts
# OTHER
'outOfOrder' => # boolean value of whether any packets arrived out of order
'duplicates' => # boolean value of whether any duplicate packets were recvd.
# LOG
'rtts' => [] # array of rtt values of the measurement
'seqNums' => [] # array of the order in which sequence numbers are recvd
}
Returns 0 = everything okay -1 = somethign went wrong
}
get_table_for_timestamp( $ )
from the provided timestamp (in epoch seconds), determines the names of the rose::db object and manager classes required for the data tables used in PingER. Will automatically include (use) the relevant modules.
the final argument 'createNewTables' defines a boolean for whether tables within the timetange should be created or not if it does not exist in the database.
If a second argument is provided, will assume that a time range is given and will load all necessary tables;
Returns ( rose data table array of strings, rose data manager array of string )