• Skip to content
  • Skip to link menu
KDE 4.0 API Reference
  • KDE API Reference
  • kdeutils
  • Sitemap
  • Contact Us
 

superkaramba

disk.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2003 by Hans Karlsson                                   *
00003  *   karlsson.h@home.se                                                      *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  ***************************************************************************/
00010 #include "disk.h"
00011 
00012 #include <K3ProcIO>
00013 
00014 DiskSensor::DiskSensor(int msec) : Sensor(msec)
00015 {
00016     connect(&ksp, SIGNAL(receivedStdout(K3Process *, char *, int)),
00017             this, SLOT(receivedStdout(K3Process *, char *, int)));
00018     connect(&ksp, SIGNAL(processExited(K3Process *)),
00019             this, SLOT(processExited(K3Process *)));
00020 
00021     // update values on startup
00022     ksp.clearArguments();
00023     ksp << "df";
00024     ksp.start(K3ProcIO::Block, K3ProcIO::Stdout);
00025 
00026     init = 1;
00027 }
00028 DiskSensor::~DiskSensor()
00029 {}
00030 
00031 int DiskSensor::getFreeSpace(const QString &mntPt) const
00032 {
00033     QRegExp rx("^\\S*\\s*\\d+\\s+\\d+\\s+(\\d+)");
00034     rx.indexIn(mntMap[mntPt]);
00035     return rx.cap(1).toInt();
00036 }
00037 
00038 int DiskSensor::getUsedSpace(const QString &mntPt) const
00039 {
00040     QRegExp rx("^\\S*\\s*\\d+\\s+(\\d+)\\s+\\d+");
00041     rx.indexIn(mntMap[mntPt]);
00042     return rx.cap(1).toInt();
00043 }
00044 
00045 int DiskSensor::getTotalSpace(const QString &mntPt) const
00046 {
00047 
00048     QRegExp rx("^\\S*\\s*(\\d+)\\s+\\d+\\s+\\d+");
00049     rx.indexIn(mntMap[mntPt]);
00050 
00051     return rx.cap(1).toInt();
00052 
00053 }
00054 
00055 int DiskSensor::getPercentUsed(const QString &mntPt) const
00056 {
00057     QRegExp rx("\\s+(\\d+)%\\s+");
00058     rx.indexIn(mntMap[mntPt]);
00059     return rx.cap(1).toInt();
00060 }
00061 
00062 int DiskSensor::getPercentFree(const QString &mntPt) const
00063 {
00064     return (100 - getPercentUsed(mntPt));
00065 }
00066 
00067 void DiskSensor::receivedStdout(K3Process *, char *buffer, int len)
00068 {
00069 
00070     buffer[len] = 0;
00071     sensorResult += QString(buffer);
00072 
00073 }
00074 
00075 void DiskSensor::processExited(K3Process *)
00076 {
00077     QStringList stringList = sensorResult.split('\n');
00078     sensorResult = "";
00079     QStringList::Iterator it = stringList.begin();
00080     //QRegExp rx( "^(/dev/).*(/\\S*)$");
00081     QRegExp rx(".*\\s+(/\\S*)$");
00082 
00083     while (it != stringList.end()) {
00084         rx.indexIn(*it);
00085         if (!rx.cap(0).isEmpty()) {
00086             mntMap[rx.cap(1)] = *it;
00087         }
00088         it++;
00089     }
00090     stringList.clear();
00091 
00092     QString format;
00093     QString mntPt;
00094     SensorParams *sp;
00095     Meter *meter;
00096 
00097     QObject *lit;
00098     foreach(lit, *objList) {
00099         sp = qobject_cast<SensorParams*>(lit);
00100         meter = sp->getMeter();
00101         format = sp->getParam("FORMAT");
00102         mntPt = sp->getParam("MOUNTPOINT");
00103         if (mntPt.length() == 0)
00104             mntPt = "/";
00105 
00106         if (format.length() == 0) {
00107             format = "%u";
00108         }
00109         format.replace(QRegExp("%fp", Qt::CaseInsensitive), QString::number(getPercentFree(mntPt)));
00110         format.replace(QRegExp("%fg", Qt::CaseInsensitive),
00111                        QString::number(getFreeSpace(mntPt) / (1024*1024)));
00112         format.replace(QRegExp("%fkb", Qt::CaseInsensitive),
00113                        QString::number(getFreeSpace(mntPt)*8));
00114         format.replace(QRegExp("%fk", Qt::CaseInsensitive),
00115                        QString::number(getFreeSpace(mntPt)));
00116         format.replace(QRegExp("%f", Qt::CaseInsensitive), QString::number(getFreeSpace(mntPt) / 1024));
00117 
00118         format.replace(QRegExp("%up", Qt::CaseInsensitive), QString::number(getPercentUsed(mntPt)));
00119         format.replace(QRegExp("%ug", Qt::CaseInsensitive),
00120                        QString::number(getUsedSpace(mntPt) / (1024*1024)));
00121         format.replace(QRegExp("%ukb", Qt::CaseInsensitive),
00122                        QString::number(getUsedSpace(mntPt)*8));
00123         format.replace(QRegExp("%uk", Qt::CaseInsensitive),
00124                        QString::number(getUsedSpace(mntPt)));
00125         format.replace(QRegExp("%u", Qt::CaseInsensitive), QString::number(getUsedSpace(mntPt) / 1024));
00126 
00127         format.replace(QRegExp("%tg", Qt::CaseInsensitive),
00128                        QString::number(getTotalSpace(mntPt) / (1024*1024)));
00129         format.replace(QRegExp("%tkb", Qt::CaseInsensitive),
00130                        QString::number(getTotalSpace(mntPt)*8));
00131         format.replace(QRegExp("%tk", Qt::CaseInsensitive),
00132                        QString::number(getTotalSpace(mntPt)));
00133         format.replace(QRegExp("%t", Qt::CaseInsensitive), QString::number(getTotalSpace(mntPt) / 1024));
00134 
00135         meter->setValue(format);
00136     }
00137 
00138     if (init == 1) {
00139         emit initComplete();
00140         init = 0;
00141     }
00142 }
00143 
00144 void DiskSensor::update()
00145 {
00146     if (ksp.isRunning())
00147         return;
00148 
00149     ksp.clearArguments();
00150     ksp << "df";
00151     ksp.start(K3ProcIO::NotifyOnExit, K3ProcIO::Stdout);
00152 }
00153 
00154 void DiskSensor::setMaxValue(SensorParams *sp)
00155 {
00156     Meter *meter;
00157     meter = sp->getMeter();
00158     const QString mntPt = sp->getParam("MOUNTPOINT");
00159 
00160     QString f;
00161     f = sp->getParam("FORMAT");
00162     if (f == "%fp" || f == "%up")
00163         meter->setMax(100);
00164     else
00165         meter->setMax(getTotalSpace(mntPt) / 1024);
00166 }
00167 
00168 
00169 
00170 #include "disk.moc"

superkaramba

Skip menu "superkaramba"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

kdeutils

Skip menu "kdeutils"
  • ark
  • kcalc
  • kcharselect
  • kdelirc
  • kdessh
  • kdf
  • kfloppy
  • kgpg
  • kjots
  • klaptopdaemon
  • kmilo
  • ksim
  • ktimer
  • kwallet
  • superkaramba
Generated for kdeutils by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal