• 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
25UptimeSensor::UptimeSensor( int interval ) : Sensor( interval )
26{}
27UptimeSensor::~UptimeSensor()
28{}
29
30void 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:32

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.9.4
This website is maintained by Timothy Pearson.