| /*************************************************************************** |
| dev.cpp |
| ------------------- |
| begin : Wed Aug 1 2001 |
| copyright : (C) 2001 - 2007 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; |
| } |
| |