|  | /*************************************************************************** | 
|  | dev.cpp  -  description | 
|  | ------------------- | 
|  | begin                : Wed Aug 1 2001 | 
|  | copyright            : (C) 2001, 2002 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" | 
|  |  | 
|  | 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() | 
|  | { | 
|  | } | 
|  |  | 
|  | //update the device's data | 
|  | void Dev::update() | 
|  | { | 
|  | //read current traffic | 
|  | float *currentio = readLoad(); | 
|  |  | 
|  | //calculate the traffic (Bytes/s) | 
|  | currentio[0] = currentio[0] / ( getElapsedTime() / 1000 ); | 
|  | currentio[1] = currentio[1] / ( getElapsedTime() / 1000 ); | 
|  |  | 
|  | //update graphs and statistics | 
|  | for( int i = 0; i < 2; i++ ) | 
|  | { | 
|  | if( procDevExists() ) | 
|  | { | 
|  | device_status[i] -> update( (int) currentio[i], (unsigned int) ( i == 0 ? totalIn() : totalOut() ) ); | 
|  | traffic_graph[i] -> update( (int) 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; | 
|  | } | 
|  |  |