1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
//
// Copyright (c) 1994, 1995, 2002, 2006 by Mike Romberg ( mike.romberg@noaa.gov )
//
// This file may be distributed under terms of the GPL
//
#include "MeterMaker.h"
#include "xosview.h"
#include "cpumeter.h"
#include "memmeter.h"
#include "swapmeter.h"
#include "pagemeter.h"
#include "netmeter.h"
#include "intmeter.h"
#include "serialmeter.h"
#include "loadmeter.h"
#include "btrymeter.h"
#include "wirelessmeter.h"
#include <fstream>
#include "diskmeter.h"
#include "raidmeter.h"
#include "lmstemp.h"
#include "nfsmeter.h"
#include <stdlib.h>
#include <sstream>
#include <iomanip>
using namespace std;
MeterMaker::MeterMaker(XOSView *xos){
_xos = xos;
}
void MeterMaker::makeMeters(void){
// check for the load meter
if (_xos->isResourceTrue("load"))
push(new LoadMeter(_xos));
// Standard meters (usually added, but users could turn them off)
if (_xos->isResourceTrue("cpu")){
bool single, both, all;
unsigned int cpuCount = CPUMeter::countCPUs();
single = (strncmp(_xos->getResource("cpuFormat"), "single", 2) == 0);
both = (strncmp(_xos->getResource("cpuFormat"), "both", 2) == 0);
all = (strncmp(_xos->getResource("cpuFormat"), "all", 2) == 0);
if (strncmp(_xos->getResource("cpuFormat"), "auto", 2) == 0) {
if (cpuCount == 1 || cpuCount > 4) {
single = true;
} else {
all = true;
}
}
if (single || both)
push(new CPUMeter(_xos, CPUMeter::cpuStr(0)));
if (all || both) {
for (unsigned int i = 1; i <= cpuCount; i++)
push(new CPUMeter(_xos, CPUMeter::cpuStr(i)));
}
}
if (_xos->isResourceTrue("mem"))
push(new MemMeter(_xos));
if (_xos->isResourceTrue("disk"))
push(new DiskMeter(_xos, atof(_xos->getResource("diskBandwidth"))));
// check for the wireless meter
static const char WLFILENAME[] = "/proc/net/wireless";
ifstream stats( WLFILENAME );
if ( stats ) {
if (_xos->isResourceTrue("wireless")){
int wirelessCount = WirelessMeter::countdevices();
int start = (wirelessCount == 0) ? 0 : 1;
if (wirelessCount != 0) {
for (int i = start ; i <= wirelessCount ; i++)
push(new WirelessMeter(_xos, i, WirelessMeter::wirelessStr(i)));
} } }
// check for the RAID meter
if (_xos->isResourceTrue("RAID")){
int RAIDCount = atoi(_xos->getResource("RAIDdevicecount"));
for (int i = 0 ; i < RAIDCount ; i++)
push(new RAIDMeter(_xos, i));
}
if (_xos->isResourceTrue("swap"))
push(new SwapMeter(_xos));
if (_xos->isResourceTrue("page"))
push(new PageMeter(_xos, atof(_xos->getResource("pageBandwidth"))));
// check for the net meter
if (_xos->isResourceTrue("net"))
push(new NetMeter(_xos, atof(_xos->getResource("netBandwidth"))));
// check for the NFS mesters
if (_xos->isResourceTrue("NFSDStats")){
push(new NFSDStats(_xos));
}
if (_xos->isResourceTrue("NFSStats")){
push(new NFSStats(_xos));
}
// check for the serial meters.
#if defined (__arm__) || defined(__mc68000__) || defined(__powerpc__) || defined(__sparc__) || defined(__s390__) || defined(__s390x__)
/* these architectures have no ioperm() */
#else
for (int i = 0 ; i < SerialMeter::numDevices() ; i++)
{
bool ok ; unsigned long val ;
const char *res = SerialMeter::getResourceName((SerialMeter::Device)i);
if ( !(ok = _xos->isResourceTrue(res)) )
{
std::istringstream is(_xos->getResource(res));
is >> std::setbase(0) >> val;
if (!is)
ok = false;
else
ok = val & 0xFFFF;
}
if ( ok )
push(new SerialMeter(_xos, (SerialMeter::Device)i));
}
#endif
// check for the interrupt meter
if (_xos->isResourceTrue("interrupts")) {
int cpuCount = IntMeter::countCPUs();
cpuCount = cpuCount == 0 ? 1 : cpuCount;
for (int i = 0 ; i < cpuCount ; i++)
push(new IntMeter(_xos, i));
}
// check for the battery meter
if (_xos->isResourceTrue("battery") && BtryMeter::has_source())
push(new BtryMeter(_xos));
// check for the LmsTemp meter
if (_xos->isResourceTrue("lmstemp")){
char caption[80];
snprintf(caption, 80, "ACT/HIGH/%s",
_xos->getResourceOrUseDefault("lmstempHighest", "100"));
for (int i = 1 ; ; i++) {
char s[20];
snprintf(s, 20, "lmstemp%d", i);
const char *res = _xos->getResourceOrUseDefault(s, NULL);
if(!res || !*res)
break;
snprintf(s, 20, "lmstempLabel%d", i);
const char *lab = _xos->getResourceOrUseDefault(s, "TMP");
push(new LmsTemp(_xos, res, lab, caption));
}
}
}
|