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

superkaramba

  • superkaramba
  • src
uptimesensor.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 <tqglobal.h>
11 
12 #if defined __FreeBSD__
13 #include <sys/time.h>
14 #include <sys/sysctl.h>
15 #endif
16 
17 #if defined(Q_OS_NETBSD)
18 #include <sys/param.h>
19 #include <sys/time.h>
20 #include <sys/sysctl.h>
21 #endif
22 
23 #include "uptimesensor.h"
24 
25 UptimeSensor::UptimeSensor( int interval ) : Sensor( interval )
26 {}
27 UptimeSensor::~UptimeSensor()
28 {}
29 
30 void UptimeSensor::update()
31 {
32 #if defined __FreeBSD__ || defined(Q_OS_NETBSD)
33  struct timeval boottime;
34  time_t now; /* the current time of day */
35 
36  double avenrun[3];
37  time_t uptime;
38  int days, hours, i, mins, secs;
39  int mib[2];
40  size_t size;
41  char buf[256];
42 
43  /*
44  * Get time of day.
45  */
46  (void)time(&now);
47 
48  /*
49  * Determine how long system has been up.
50  * (Found by looking getting "boottime" from the kernel)
51  */
52  mib[0] = CTL_KERN;
53  mib[1] = KERN_BOOTTIME;
54  size = sizeof(boottime);
55  if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 &&
56  boottime.tv_sec != 0) {
57  uptime = now - boottime.tv_sec;
58  if (uptime > 60)
59  uptime += 30;
60  days = uptime / 86400;
61  uptime %= 86400;
62  hours = uptime / 3600;
63  uptime %= 3600;
64  mins = uptime / 60;
65  secs = uptime % 60;
66  }
67 #else
68  TQFile file("/proc/uptime");
69  TQString line;
70  if ( file.open(IO_ReadOnly | IO_Translate) )
71  {
72  // file opened successfully
73  TQTextStream t( &file ); // use a text stream
74  line = t.readLine(); // line of text excluding '\n'
75  file.close();
76 
77  TQRegExp rx( "^\\d+" );
78  rx.search(line);
79  int uptime = rx.cap(0).toInt();
80  int days = uptime / 86400;
81  uptime -= days * 86400;
82  int hours = uptime / 3600;
83  uptime -= hours * 3600;
84  int mins = uptime / 60;
85  uptime -= mins * 60;
86  int secs = uptime;
87 #endif
88 
89  TQString format;
90  SensorParams *sp;
91  Meter *meter;
92 
93  TQObjectListIt it( *objList );
94  while (it != 0)
95  {
96  sp = (SensorParams*)(*it);
97  meter = sp->getMeter();
98  format = sp->getParam("FORMAT");
99 
100  if (format.length() == 0 )
101  {
102  format = "%dd %h:%M";
103  }
104  format.replace( TQRegExp("%d"), TQString::number(days));
105  format.replace( TQRegExp("%H"), TQString::number(hours).rightJustify(2,'0'));
106  format.replace( TQRegExp("%M"), TQString::number(mins).rightJustify(2,'0'));
107  format.replace( TQRegExp("%S"), TQString::number(secs).rightJustify(2,'0'));
108  format.replace( TQRegExp("%h"), TQString::number(hours));
109  format.replace( TQRegExp("%m"), TQString::number(mins));
110  format.replace( TQRegExp("%s"), TQString::number(secs));
111 
112  meter->setValue(format);
113  ++it;
114  }
115 
116 #if !defined __FreeBSD__ && !defined(Q_OS_NETBSD)
117  }
118 #endif
119 }
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.