blob: 237f5a0394a495df291dbf29db9b0919a354c774 [file] [log] [blame] [raw]
/***************************************************************************
dev.cpp
-------------------
begin : Wed Aug 1 2001
copyright : (C) 2001 - 2003 by Roland Riegel
email : feedback@roland-riegel.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "dev.h"
#include "graph.h"
#include "window.h"
#include "options.h"
Dev::Dev() : Proc::Proc()
{
for( int i = 0; i < 2; i++ )
{
device_status[i] = new Status();
traffic_graph[i] = new Graph();
}
setHideGraphs(0);
setProcDev( STANDARD_NETWORK_DEVICE );
setStatusFormat( 0, 0 );
setDeviceNumber(0);
setTotalNumberOfDevices(0);
}
Dev::~Dev()
{
for( int i = 0; i < 2; i++ )
{
delete device_status[i];
delete traffic_graph[i];
}
}
//update the device's data
void Dev::update()
{
unsigned long currentio[2];
//read current traffic
readLoad( currentio[0], currentio[1] );
//calculate the traffic (Bytes/s)
currentio[0] = (unsigned long) ( currentio[0] * 1000.0 / getElapsedTime() );
currentio[1] = (unsigned long) ( currentio[1] * 1000.0 / getElapsedTime() );
//update graphs and statistics
for( int i = 0; i < 2; i++ )
{
if( procDevExists() )
{
device_status[i] -> update( currentio[i], i == 0 ? totalIn() : totalOut() );
traffic_graph[i] -> update( currentio[i] );
}
else
{
device_status[i] -> resetTrafficData();
traffic_graph[i] -> resetTrafficData();
}
}
}
//print the device's data
void Dev::print( Window& window )
{
char fText[100] = "";
//if device does not exist
if ( ! procDevExists() )
{
//... print warning message ...
sprintf( fText, "Device %s (%i/%i): does not exist\n", procDev(), m_devicenumber, m_totalnumberofdevices );
window.print( fText );
for( int i = 0; i < window.width(); i++ )
window.print( '=' );
window.print( '\n' );
//... and exit
return;
}
//print header
if( strlen( ip() ) > 0 )
sprintf( fText, "Device %s [%s] (%i/%i):\n", procDev(), ip(), m_devicenumber, m_totalnumberofdevices );
else
sprintf( fText, "Device %s (%i/%i):\n", procDev(), m_devicenumber, m_totalnumberofdevices );
window.print( fText );
for( int i = 0; i < window.width(); i++ )
window.print( '=' );
//if graphs should be hidden ...
if( hideGraphs() )
{
window.print( "Incoming:" );
window.setX( window.width() / 2 );
window.print( "Outgoing:\n" );
int status_y = window.y();
device_status[0] -> print( window, 0, status_y, trafficFormat(), dataFormat() ); //incoming traffic
device_status[1] -> print( window, window.width() / 2, status_y, trafficFormat(), dataFormat() ); //outgoing traffic
window.print( '\n' );
}
//... or not
else
{
//incoming traffic
window.print( "Incoming:\n" );
traffic_graph[0] -> setNumOfBars( window.width() * 2 / 3 );
traffic_graph[0] -> setHeightOfBars( ( window.height() - window.y() - 1 ) / 2 );
traffic_graph[0] -> print( window, 0, window.y() );
device_status[0] -> print( window, window.width() * 2 / 3 + 2, window.y() - 5, trafficFormat(), dataFormat() );
//outgoing traffic
window.print( "Outgoing:\n" );
traffic_graph[1] -> setNumOfBars( window.width() * 2 / 3 );
traffic_graph[1] -> setHeightOfBars( window.height() - window.y() );
traffic_graph[1] -> print( window, 0, window.y() );
device_status[1] -> print( window, window.width() * 2 / 3 + 2, window.y() - 4, trafficFormat(), dataFormat() );
}
}
//sets if the graphs should be shown or not
void Dev::setHideGraphs( OptionBool* new_hidegraphs )
{
m_hidegraphs = new_hidegraphs;
}
//set the in- and outcoming graphs' averagesmoothness
void Dev::setAverageSmoothness( OptionInt* new_averagesmoothness )
{
for( int i = 0; i < 2; i++ )
device_status[i] -> setAverageSmoothness( new_averagesmoothness );
}
//set the graphs' max deflection (max traffic level)
void Dev::setTrafficWithMaxDeflectionOfGraphs( OptionLong* new_trafficinwithmaxdeflectionofgraphs, OptionLong* new_trafficoutwithmaxdeflectionofgraphs )
{
for( int i = 0; i < 2; i++ )
switch(i)
{
case 0:
traffic_graph[i] -> setTrafficWithMaxDeflectionOfBars( new_trafficinwithmaxdeflectionofgraphs );
break;
case 1:
traffic_graph[i] -> setTrafficWithMaxDeflectionOfBars( new_trafficoutwithmaxdeflectionofgraphs );
break;
}
}
//set the number identifying the device (for display only)
void Dev::setDeviceNumber( int new_devicenumber )
{
m_devicenumber = new_devicenumber;
}
//set the total number of shown devices (for display only)
void Dev::setTotalNumberOfDevices( int new_totalnumberofdevices )
{
m_totalnumberofdevices = new_totalnumberofdevices;
}
//set the display format (unit) for traffic and data numbers
void Dev::setStatusFormat( OptionStatusFormat* new_trafficformat, OptionStatusFormat* new_dataformat )
{
m_trafficformat = new_trafficformat;
m_dataformat = new_dataformat;
}
bool Dev::hideGraphs()
{
return m_hidegraphs ? (bool) *m_hidegraphs : STANDARD_HIDE_GRAPHS;
}
Status::status_format Dev::trafficFormat()
{
return m_trafficformat ? (Status::status_format) *m_trafficformat : STANDARD_TRAFFIC_FORMAT;
}
Status::status_format Dev::dataFormat()
{
return m_dataformat ? (Status::status_format) *m_dataformat : STANDARD_DATA_FORMAT;
}