summaryrefslogtreecommitdiffstats
path: root/src/knetstatsview.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/knetstatsview.h')
-rw-r--r--src/knetstatsview.h260
1 files changed, 260 insertions, 0 deletions
diff --git a/src/knetstatsview.h b/src/knetstatsview.h
new file mode 100644
index 0000000..e8cc0b8
--- /dev/null
+++ b/src/knetstatsview.h
@@ -0,0 +1,260 @@
+/***************************************************************************
+* (c) 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net> *
+* Copyright (C) 2004-2005 by Hugo Parente Lima *
+* hugo_pl@users.sourceforge.net *
+* *
+* 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. *
+* *
+* This program 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 General Public License for more details. *
+* *
+* You should have received a copy of the GNU General Public License *
+* along with this program; if not, write to the *
+* Free Software Foundation, Inc., *
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+***************************************************************************/
+
+#ifndef KNETSTATSVIEW_H
+#define KNETSTATSVIEW_H
+
+#include <ksystemtray.h>
+#include <tqpixmap.h>
+#include <tqstringlist.h>
+#include <tqcolor.h>
+
+#include <arpa/inet.h>
+#include <linux/netdevice.h>
+
+class TQTimer;
+class TQMouseEvent;
+class TQPainter;
+class TQPaintEvent;
+class Statistics;
+class KNetStats;
+
+/**
+* Main class
+*/
+class KNetStatsView : public KSystemTray
+{
+ Q_OBJECT
+
+
+ enum {
+ HISTORY_SIZE = 50, // Speed history buffer size
+ SPEED_BUFFER_SIZE = 10 // Speed normalization buffer size
+ };
+
+public:
+ /**
+ * KNetstats view mode on system tray.
+ */
+ enum Mode {
+ Icon, Text, Graphic
+ };
+
+ /**
+ * Visualization options.
+ */
+ struct Options {
+ // general
+ int mUpdateInterval;
+ Mode mViewMode;
+ bool mMonitoring;
+ // txt view
+ TQFont mTxtFont;
+ TQColor mTxtUplColor;
+ TQColor mTxtDldColor;
+ // icon view
+ int mTheme;
+ // chart view
+ TQColor mChartUplColor;
+ TQColor mChartDldColor;
+ TQColor mChartBgColor;
+ bool mChartTransparentBackground;
+ };
+
+ KNetStatsView(KNetStats* parent, const TQString& interface);
+ ~KNetStatsView();
+
+ void say(const TQString& message);
+ void updateViewOptions();
+ // read a value from /sys/class/net/interface/name
+ unsigned long readInterfaceNumValue(const char* name);
+ // read a value from /sys/class/net/interface/name
+ TQString readInterfaceStringValue(const char* name, int maxlength);
+ TQString getIp();
+ TQString getNetmask();
+
+ const double* speedHistoryRx() const { return mSpeedHistoryRx; }
+ const double* speedHistoryTx() const { return mSpeedHistoryTx; }
+ const int historyBufferSize() const { return HISTORY_SIZE; }
+ const int* historyPointer() const { return &mSpeedHistoryPtr; }
+ const double* maxSpeed() const { return &mMaxSpeed; }
+
+ /// Return a copy of the current view options.
+ Options options() const { return mOptions; }
+ /// read the interface view options
+ static void readOptions( const TQString& name, Options* opts, bool defaultVisibility = false );
+
+ /// The current monitored network interface
+ inline const TQString& interface() const;
+ /// The current Update Interval in miliseconds
+ inline int updateInterval() const;
+ /// We are in textmode?
+ inline Mode viewMode() const;
+
+ /// Total of bytes receiveds
+ inline unsigned long totalBytesRx() const;
+ /// Total of bytes transmitted
+ inline unsigned long totalBytesTx() const;
+ /// Total of packets receiveds
+ inline unsigned long totalPktRx() const;
+ /// Total of packets transmitted
+ inline unsigned long totalPktTx() const;
+ /// RX Speed in bytes per second
+ inline double byteSpeedRx() const;
+ /// TX Speed in bytes per second
+ inline double byteSpeedTx() const;
+ /// RX Speed in packets per second
+ inline double pktSpeedRx() const;
+ /// TX Speed in packets per second
+ inline double pktSpeedTx() const;
+
+protected:
+ void mousePressEvent( TQMouseEvent* ev );
+ void paintEvent( TQPaintEvent* ev );
+
+private:
+
+ int mFdSock; // Kernel-knetstats socket
+ struct ifreq mDevInfo; // info struct about our interface
+
+
+ TQString mSysDevPath; // Path to the device.
+ bool mCarrier; // Interface carrier is on?
+ bool mConnected; // Interface exists?
+
+ TDEPopupMenu* mContextMenu; // Global ContextMenu
+ Statistics* mStatistics; // Statistics window
+ TQString mInterface; // Current interface
+ Options mOptions; // View options
+
+ // Icons
+ TQPixmap mIconError, mIconNone, mIconTx, mIconRx, mIconBoth;
+ TQPixmap* mCurrentIcon; // Current state
+ TQTimer* mTimer; // Timer
+
+ // Rx e Tx to bytes and packets
+ unsigned long mBRx, mBTx, mPRx, mPTx;
+ // Statistics
+ unsigned long mTotalBytesRx, mTotalBytesTx, mTotalPktRx, mTotalPktTx;
+ // Speed buffers
+ double mSpeedBufferRx[SPEED_BUFFER_SIZE], mSpeedBufferTx[SPEED_BUFFER_SIZE];
+ double mSpeedBufferPRx[SPEED_BUFFER_SIZE], mSpeedBufferPTx[SPEED_BUFFER_SIZE];
+ // pointer to current speed buffer position
+ int mSpeedBufferPtr;
+
+ bool mFirstUpdate;
+
+ // History buffer TODO: Make it configurable!
+ double mSpeedHistoryRx[HISTORY_SIZE];
+ double mSpeedHistoryTx[HISTORY_SIZE];
+ int mSpeedHistoryPtr;
+ double mMaxSpeed;
+ int mMaxSpeedAge;
+
+
+ // setup the view.
+ void setup();
+ void drawText(TQPainter& paint);
+ void drawGraphic(TQPainter& paint);
+ // Reset speed and history buffers
+ void resetBuffers();
+ // calc tha max. speed stored in the history buffer
+ inline void calcMaxSpeed();
+ // calc the speed using a speed buffer
+ inline double calcSpeed(const double* buffer) const;
+
+ bool openFdSocket();
+
+private slots:
+ // Called by the timer to update statistics
+ void updateStats();
+
+};
+
+void KNetStatsView::calcMaxSpeed() {
+ double max = 0.0;
+ int ptr = mSpeedHistoryPtr;
+ for (int i = 0; i < HISTORY_SIZE; ++i) {
+ if (mSpeedHistoryRx[i] > max) {
+ max = mSpeedHistoryRx[i];
+ ptr = i;
+ }
+ if (mSpeedHistoryTx[i] > max) {
+ max = mSpeedHistoryTx[i];
+ ptr = i;
+ }
+ }
+ mMaxSpeed = max;
+ mMaxSpeedAge = (mSpeedHistoryPtr > ptr) ? (mSpeedHistoryPtr - ptr) : (mSpeedHistoryPtr + HISTORY_SIZE - ptr);
+}
+
+double KNetStatsView::calcSpeed(const double* buffer) const {
+ double total = 0.0;
+ for (int i = 0; i < SPEED_BUFFER_SIZE; ++i)
+ total += buffer[i];
+ return total/SPEED_BUFFER_SIZE;
+}
+
+const TQString& KNetStatsView::interface() const {
+ return mInterface;
+}
+
+int KNetStatsView::updateInterval() const {
+ return mOptions.mUpdateInterval;
+}
+
+KNetStatsView::Mode KNetStatsView::viewMode() const {
+ return mOptions.mViewMode;
+}
+
+unsigned long KNetStatsView::totalBytesRx() const {
+ return mTotalBytesRx;
+}
+
+unsigned long KNetStatsView::totalBytesTx() const {
+ return mTotalBytesTx;
+}
+
+unsigned long KNetStatsView::totalPktRx() const {
+ return mTotalPktRx;
+}
+
+unsigned long KNetStatsView::totalPktTx() const {
+ return mTotalPktTx;
+}
+
+double KNetStatsView::byteSpeedRx() const {
+ return mSpeedHistoryRx[mSpeedHistoryPtr];
+}
+
+double KNetStatsView::byteSpeedTx() const {
+ return mSpeedHistoryTx[mSpeedHistoryPtr];
+}
+
+double KNetStatsView::pktSpeedRx() const {
+ return calcSpeed(mSpeedBufferPRx);
+}
+
+double KNetStatsView::pktSpeedTx() const {
+ return calcSpeed(mSpeedBufferPTx);
+}
+
+#endif