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

superkaramba

  • sources
  • kde-4.12
  • kdeutils
  • superkaramba
  • src
  • sensors
disk.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2003 by Hans Karlsson *
3  * karlsson.h@home.se *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  ***************************************************************************/
10 #include "disk.h"
11 
12 #include <K3ProcIO>
13 
14 DiskSensor::DiskSensor(int msec) : Sensor(msec)
15 {
16  connect(&ksp, SIGNAL(receivedStdout(K3Process*,char*,int)),
17  this, SLOT(receivedStdout(K3Process*,char*,int)));
18  connect(&ksp, SIGNAL(processExited(K3Process*)),
19  this, SLOT(processExited(K3Process*)));
20 
21  // update values on startup
22  ksp.clearArguments();
23  ksp << "df";
24  ksp.start(K3ProcIO::Block, K3ProcIO::Stdout);
25 
26  init = 1;
27 }
28 DiskSensor::~DiskSensor()
29 {}
30 
31 int DiskSensor::getFreeSpace(const QString &mntPt) const
32 {
33  QRegExp rx("^\\S*\\s*\\d+\\s+\\d+\\s+(\\d+)");
34  rx.indexIn(mntMap[mntPt]);
35  return rx.cap(1).toInt();
36 }
37 
38 int DiskSensor::getUsedSpace(const QString &mntPt) const
39 {
40  QRegExp rx("^\\S*\\s*\\d+\\s+(\\d+)\\s+\\d+");
41  rx.indexIn(mntMap[mntPt]);
42  return rx.cap(1).toInt();
43 }
44 
45 int DiskSensor::getTotalSpace(const QString &mntPt) const
46 {
47 
48  QRegExp rx("^\\S*\\s*(\\d+)\\s+\\d+\\s+\\d+");
49  rx.indexIn(mntMap[mntPt]);
50 
51  return rx.cap(1).toInt();
52 
53 }
54 
55 int DiskSensor::getPercentUsed(const QString &mntPt) const
56 {
57  QRegExp rx("\\s+(\\d+)%\\s+");
58  rx.indexIn(mntMap[mntPt]);
59  return rx.cap(1).toInt();
60 }
61 
62 int DiskSensor::getPercentFree(const QString &mntPt) const
63 {
64  return (100 - getPercentUsed(mntPt));
65 }
66 
67 void DiskSensor::receivedStdout(K3Process *, char *buffer, int len)
68 {
69 
70  buffer[len] = 0;
71  sensorResult += QString(buffer);
72 
73 }
74 
75 void DiskSensor::processExited(K3Process *)
76 {
77  QStringList stringList = sensorResult.split('\n');
78  sensorResult.clear();
79  QStringList::Iterator it = stringList.begin();
80  //QRegExp rx( "^(/dev/).*(/\\S*)$");
81  QRegExp rx(".*\\s+(/\\S*)$");
82 
83  while (it != stringList.end()) {
84  rx.indexIn(*it);
85  if (!rx.cap(0).isEmpty()) {
86  mntMap[rx.cap(1)] = *it;
87  }
88  it++;
89  }
90  stringList.clear();
91 
92  QString format;
93  QString mntPt;
94  SensorParams *sp;
95  Meter *meter;
96 
97  foreach(QObject *lit, *objList) {
98  sp = qobject_cast<SensorParams*>(lit);
99  meter = sp->getMeter();
100  format = sp->getParam("FORMAT");
101  mntPt = sp->getParam("MOUNTPOINT");
102  if (mntPt.isEmpty())
103  mntPt = '/';
104 
105  if (format.isEmpty()) {
106  format = "%u";
107  }
108  format.replace(QRegExp("%fp", Qt::CaseInsensitive), QString::number(getPercentFree(mntPt)));
109  format.replace(QRegExp("%fg", Qt::CaseInsensitive),
110  QString::number(getFreeSpace(mntPt) / (1024*1024)));
111  format.replace(QRegExp("%fkb", Qt::CaseInsensitive),
112  QString::number(getFreeSpace(mntPt)*8));
113  format.replace(QRegExp("%fk", Qt::CaseInsensitive),
114  QString::number(getFreeSpace(mntPt)));
115  format.replace(QRegExp("%f", Qt::CaseInsensitive), QString::number(getFreeSpace(mntPt) / 1024));
116 
117  format.replace(QRegExp("%up", Qt::CaseInsensitive), QString::number(getPercentUsed(mntPt)));
118  format.replace(QRegExp("%ug", Qt::CaseInsensitive),
119  QString::number(getUsedSpace(mntPt) / (1024*1024)));
120  format.replace(QRegExp("%ukb", Qt::CaseInsensitive),
121  QString::number(getUsedSpace(mntPt)*8));
122  format.replace(QRegExp("%uk", Qt::CaseInsensitive),
123  QString::number(getUsedSpace(mntPt)));
124  format.replace(QRegExp("%u", Qt::CaseInsensitive), QString::number(getUsedSpace(mntPt) / 1024));
125 
126  format.replace(QRegExp("%tg", Qt::CaseInsensitive),
127  QString::number(getTotalSpace(mntPt) / (1024*1024)));
128  format.replace(QRegExp("%tkb", Qt::CaseInsensitive),
129  QString::number(getTotalSpace(mntPt)*8));
130  format.replace(QRegExp("%tk", Qt::CaseInsensitive),
131  QString::number(getTotalSpace(mntPt)));
132  format.replace(QRegExp("%t", Qt::CaseInsensitive), QString::number(getTotalSpace(mntPt) / 1024));
133 
134  meter->setValue(format);
135  }
136 
137  if (init == 1) {
138  emit initComplete();
139  init = 0;
140  }
141 }
142 
143 void DiskSensor::update()
144 {
145  if (ksp.isRunning())
146  return;
147 
148  ksp.clearArguments();
149  ksp << "df";
150  ksp.start(K3ProcIO::NotifyOnExit, K3ProcIO::Stdout);
151 }
152 
153 void DiskSensor::setMaxValue(SensorParams *sp)
154 {
155  Meter *meter;
156  meter = sp->getMeter();
157  const QString mntPt = sp->getParam("MOUNTPOINT");
158 
159  QString f;
160  f = sp->getParam("FORMAT");
161  if (f == "%fp" || f == "%up")
162  meter->setMax(100);
163  else
164  meter->setMax(getTotalSpace(mntPt) / 1024);
165 }
166 
167 
168 
169 #include "disk.moc"
DiskSensor::update
void update()
Definition: disk.cpp:143
SensorParams::getMeter
Meter * getMeter() const
Definition: sensorparams.cpp:31
DiskSensor::setMaxValue
void setMaxValue(SensorParams *sp)
Definition: disk.cpp:153
QObject
Sensor
Definition: sensor.h:17
SensorParams
Hans Karlsson.
Definition: sensorparams.h:30
DiskSensor::~DiskSensor
~DiskSensor()
Definition: disk.cpp:28
SensorParams::getParam
QString getParam(const QString &) const
Definition: sensorparams.cpp:26
Meter::setMax
virtual void setMax(int max)
Definition: meters/meter.cpp:126
DiskSensor::DiskSensor
DiskSensor(int msec)
Definition: disk.cpp:14
Meter
Definition: meters/meter.h:23
DiskSensor::initComplete
void initComplete()
disk.h
Sensor::objList
QList< QObject * > * objList
Definition: sensor.h:39
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:07:19 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

superkaramba

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

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • kremotecontrol
  • ktimer
  • kwallet
  • superkaramba
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal