KNemo – network interfaces monitor for systray
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

192 lines
5.4 KiB

/* This file is part of KNemo
Copyright (C) 2005, 2006 Percy Leonhardt <percy@eris23.de>
KNemo is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
KNemo 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 Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef INTERFACESTATISTICS_H
#define INTERFACESTATISTICS_H
#include <tqobject.h>
#include <tqptrlist.h>
#include "global.h"
class TQTimer;
class Interface;
template<class type>
class StatisticsPtrList : public TQPtrList<type>
{
protected:
virtual int compareItems ( TQPtrCollection::Item item1, TQPtrCollection::Item item2 )
{
StatisticEntry* entry1 = static_cast<StatisticEntry*>( item1 );
StatisticEntry* entry2 = static_cast<StatisticEntry*>( item2 );
if ( entry1->year > entry2->year )
{
return 1;
}
else if ( entry2->year > entry1->year )
{
return -1;
} // ...here we know that years are the same...
else if ( entry1->month > entry2->month )
{
return 1;
}
else if ( entry2->month > entry1->month )
{
return -1;
} // ...here we know that months are the same...
else if ( entry1->day > entry2->day )
{
return 1;
}
else if ( entry2->day > entry1->day )
{
return -1;
} // ...here we know that dates are equal.
return 0;
};
};
/**
* This class is able to collect transfered data for an interface,
* store it in a file and deliver it on request.
*
* @short Statistics of transfered data for an interface
* @author Percy Leonhardt <percy@eris23.de>
*/
class InterfaceStatistics : public TQObject
{
Q_OBJECT
public:
/**
* Default Constructor
*/
InterfaceStatistics( Interface* interface );
/**
* Default Destructor
*/
virtual ~InterfaceStatistics();
/**
* Load the statistics from a xml file
*/
void loadStatistics();
/**
* Called from Interface::configChanged() when the user
* changed the settings.
*/
void configChanged();
const StatisticEntry* getCurrentDay() const;
const StatisticEntry* getCurrentMonth() const;
const StatisticEntry* getCurrentYear() const;
const StatisticsPtrList<StatisticEntry>& getDayStatistics() const;
const StatisticsPtrList<StatisticEntry>& getMonthStatistics() const;
const StatisticsPtrList<StatisticEntry>& getYearStatistics() const;
signals:
/**
* The current entry has changed. There is only one signal
* for day, month and year because if the day changes,
* month and year also change.
*/
void currentEntryChanged();
/**
* The list has changed i.e. there is a new day entry or the list was cleared
*/
void dayStatisticsChanged();
/**
* The list has changed i.e. there is a new month entry or the list was cleared
*/
void monthStatisticsChanged();
/**
* The list has changed i.e. there is a new year entry or the list was cleared
*/
void yearStatisticsChanged();
public slots:
/**
* Save the statistics to a xml file
* (slot so it can be triggered by a timer signal)
*/
void saveStatistics();
/**
* Add incoming data to the current day, month and year
*/
void addIncomingData( unsigned long data );
/**
* Add outgoing data to the current day, month and year
*/
void addOutgoingData( unsigned long data );
/**
* Clear all entries of the day statistics
*/
void clearDayStatistics();
/**
* Clear all entries of the month statistics
*/
void clearMonthStatistics();
/**
* Clear all entries of the year statistics
*/
void clearYearStatistics();
private:
/**
* Make sure the current entry corresponds with the current date
*/
void checkCurrentEntry();
/**
* Fill the statistics with a current entry
*/
void initStatistics();
/**
* Check if the current day is in the day statistics. If found set
* mCurrentDay to the found entry else create a new one.
*/
void updateCurrentDay();
/**
* Check if the current month is in the month statistics. If found set
* mCurrentMonth to the found entry else create a new one.
*/
void updateCurrentMonth();
/**
* Check if the current year is in the year statistics. If found set
* mCurrentYear to the found entry else create a new one.
*/
void updateCurrentYear();
TQTimer* mSaveTimer;
Interface* mInterface;
StatisticEntry* mCurrentDay;
StatisticEntry* mCurrentMonth;
StatisticEntry* mCurrentYear;
StatisticsPtrList<StatisticEntry> mDayStatistics;
StatisticsPtrList<StatisticEntry> mMonthStatistics;
StatisticsPtrList<StatisticEntry> mYearStatistics;
};
#endif // INTERFACESTATISTICS_H