• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • superkaramba
 

superkaramba

  • superkaramba
  • src
disksensor.cpp
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 "disksensor.h"
11 
12 #include <tqfile.h>
13 #include <tqtextstream.h>
14 #include <tqstring.h>
15 #include <tqregexp.h>
16 #include <tdeprocess.h>
17 #include <tdeprocio.h>
18 
19 DiskSensor::DiskSensor( int msec ) : Sensor( msec )
20 {
21  connect(&ksp, TQ_SIGNAL(receivedStdout(TDEProcess *, char *, int )),
22  this,TQ_SLOT(receivedStdout(TDEProcess *, char *, int )));
23  connect(&ksp, TQ_SIGNAL(processExited(TDEProcess *)),
24  this,TQ_SLOT(processExited( TDEProcess * )));
25 
26  // update values on startup
27  ksp.clearArguments();
28  ksp << "df";
29  ksp.start( TDEProcIO::Block,TDEProcIO::Stdout);
30  init = 1;
31 }
32 DiskSensor::~DiskSensor()
33 {}
34 
35 long DiskSensor::getFreeSpace(TQString mntPt) const
36 {
37  TQRegExp rx( "^\\S*\\s*\\d+\\s+\\d+\\s+(\\d+)");
38  rx.search(mntMap[mntPt]);
39  return rx.cap(1).toLong();
40 }
41 
42 long DiskSensor::getUsedSpace(TQString mntPt) const
43 {
44  TQRegExp rx( "^\\S*\\s*\\d+\\s+(\\d+)\\s+\\d+");
45  rx.search(mntMap[mntPt]);
46  return rx.cap(1).toLong();
47 }
48 
49 long DiskSensor::getTotalSpace(TQString mntPt) const
50 {
51 
52  TQRegExp rx( "^\\S*\\s*(\\d+)\\s+\\d+\\s+\\d+");
53  rx.search(mntMap[mntPt]);
54 
55  return rx.cap(1).toLong();
56 
57 }
58 
59 int DiskSensor::getPercentUsed(TQString mntPt) const
60 {
61  TQRegExp rx( "\\s+(\\d+)%\\s+");
62  rx.search(mntMap[mntPt]);
63  return rx.cap(1).toInt();
64 }
65 
66 int DiskSensor::getPercentFree(TQString mntPt) const
67 {
68  return ( 100 - getPercentUsed( mntPt ) );
69 }
70 
71 void DiskSensor::receivedStdout(TDEProcess *, char *buffer, int len )
72 {
73 
74  buffer[len] = 0;
75  sensorResult += TQString( TQCString(buffer) );
76 
77 }
78 
79 void DiskSensor::processExited(TDEProcess *)
80 {
81  TQStringList stringList = TQStringList::split('\n',sensorResult);
82  sensorResult = "";
83  TQStringList::Iterator it = stringList.begin();
84  //TQRegExp rx( "^(/dev/).*(/\\S*)$");
85  TQRegExp rx( ".*\\s+(/\\S*)$");
86 
87  while( it != stringList.end())
88  {
89  rx.search( *it );
90  if ( !rx.cap(0).isEmpty())
91  {
92  mntMap[rx.cap(1)] = *it;
93  }
94  it++;
95  }
96  stringList.clear();
97 
98  TQString format;
99  TQString mntPt;
100  SensorParams *sp;
101  Meter *meter;
102 
103  TQObjectListIt lit( *objList );
104  while (lit != 0)
105  {
106  sp = (SensorParams*)(*lit);
107  meter = sp->getMeter();
108  format = sp->getParam("FORMAT");
109  mntPt = sp->getParam("MOUNTPOINT");
110  if (mntPt.length() == 0)
111  mntPt="/";
112 
113  if (format.length() == 0 )
114  {
115  format = "%u";
116  }
117  format.replace( TQRegExp("%fp", false),TQString::number(getPercentFree(mntPt)));
118  format.replace( TQRegExp("%fg",false),
119  TQString::number(getFreeSpace(mntPt)/(1024*1024)));
120  format.replace( TQRegExp("%fkb",false),
121  TQString::number(getFreeSpace(mntPt)*8) );
122  format.replace( TQRegExp("%fk",false),
123  TQString::number(getFreeSpace(mntPt)) );
124  format.replace( TQRegExp("%f", false),TQString::number(getFreeSpace(mntPt)/1024));
125 
126  format.replace( TQRegExp("%up", false),TQString::number(getPercentUsed(mntPt)));
127  format.replace( TQRegExp("%ug",false),
128  TQString::number(getUsedSpace(mntPt)/(1024*1024)));
129  format.replace( TQRegExp("%ukb",false),
130  TQString::number(getUsedSpace(mntPt)*8) );
131  format.replace( TQRegExp("%uk",false),
132  TQString::number(getUsedSpace(mntPt)) );
133  format.replace( TQRegExp("%u", false),TQString::number(getUsedSpace(mntPt)/1024));
134 
135  format.replace( TQRegExp("%tg",false),
136  TQString::number(getTotalSpace(mntPt)/(1024*1024)));
137  format.replace( TQRegExp("%tkb",false),
138  TQString::number(getTotalSpace(mntPt)*8));
139  format.replace( TQRegExp("%tk",false),
140  TQString::number(getTotalSpace(mntPt)));
141  format.replace( TQRegExp("%t", false),TQString::number(getTotalSpace(mntPt)/1024));
142  meter->setValue(format);
143  ++lit;
144  }
145  if ( init == 1 )
146  {
147  emit initComplete();
148  init = 0;
149  }
150 }
151 
152 void DiskSensor::update()
153 {
154  ksp.clearArguments();
155  ksp << "df";
156  ksp.start( TDEProcIO::NotifyOnExit,TDEProcIO::Stdout);
157 }
158 
159 void DiskSensor::setMaxValue( SensorParams *sp )
160 {
161  Meter *meter;
162  meter = sp->getMeter();
163  const TQString mntPt = sp->getParam( "MOUNTPOINT" );
164 
165  TQString f;
166  f = sp->getParam("FORMAT");
167  if( f == "%fp" || f == "%up" )
168  meter->setMax( 100 );
169  else
170  meter->setMax( getTotalSpace( mntPt ) / 1024 );
171 }
172 
173 
174 
175 #include "disksensor.moc"
SensorParams
Hans Karlsson.
Definition: sensorparams.h:31

superkaramba

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

superkaramba

Skip menu "superkaramba"
  • kcalc
  •   knumber
  • superkaramba
Generated for superkaramba by doxygen 1.8.13
This website is maintained by Timothy Pearson.