xosview  1.23
About: xosview is an X Windows based system monitor (cpu, memory, swap and network usage; interrupt and serial activities; load average).
  Fossies Dox: xosview-1.23.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

MeterMaker.cc
Go to the documentation of this file.
1 //
2 // Copyright (c) 1994, 1995 by Mike Romberg ( romberg@fsl.noaa.gov )
3 // Copyright (c) 1995, 1996, 1997-2002 by Brian Grayson (bgrayson@netbsd.org)
4 //
5 // This file was written by Brian Grayson for the NetBSD and xosview
6 // projects.
7 // This file may be distributed under terms of the GPL or of the BSD
8 // license, whichever you choose. The full license notices are
9 // contained in the files COPYING.GPL and COPYING.BSD, which you
10 // should have received. If not, contact one of the xosview
11 // authors for a copy.
12 //
13 
14 #include "MeterMaker.h"
15 #include "defines.h"
16 #include "kernel.h"
17 #include "loadmeter.h"
18 #include "cpumeter.h"
19 #include "memmeter.h"
20 #include "swapmeter.h"
21 #include "pagemeter.h"
22 #include "netmeter.h"
23 #include "diskmeter.h"
24 #include "intmeter.h"
25 #include "intratemeter.h"
26 #include "btrymeter.h"
27 #if defined(__i386__) || defined(__x86_64__)
28 #include "coretemp.h"
29 #endif
30 #include "sensor.h"
31 
32 #include <stdlib.h>
33 #include <stdio.h>
34 #include <string.h>
35 #include <iostream>
36 
37 
39  _xos = xos;
40 }
41 
43  // Standard meters (usually added, but users could turn them off)
44  if ( _xos->isResourceTrue("load") )
45  push(new LoadMeter(_xos));
46 
47  if ( _xos->isResourceTrue("cpu") ) {
48  bool single, both, all;
49  unsigned int cpuCount = BSDCountCpus();
50 
51  single = ( strncmp(_xos->getResource("cpuFormat"), "single", 2) == 0 );
52  both = ( strncmp(_xos->getResource("cpuFormat"), "both", 2) == 0 );
53  all = ( strncmp(_xos->getResource("cpuFormat"), "all", 2) == 0 );
54 
55  if ( strncmp(_xos->getResource("cpuFormat"), "auto", 2) == 0 ) {
56  if (cpuCount == 1 || cpuCount > 4)
57  single = true;
58  else
59  all = true;
60  }
61 
62  if (single || both)
63  push(new CPUMeter(_xos, 0));
64 
65  if (all || both) {
66  for (unsigned int i = 1; i <= cpuCount; i++)
67  push(new CPUMeter(_xos, i));
68  }
69  }
70 
71  if ( _xos->isResourceTrue("mem") )
72  push(new MemMeter(_xos));
73 
74  if ( _xos->isResourceTrue("swap") )
75  push(new SwapMeter(_xos));
76 
77  if ( _xos->isResourceTrue("page") )
78  push(new PageMeter(_xos, atof(_xos->getResource("pageBandwidth"))));
79 
80  if ( _xos->isResourceTrue("net") )
81  push(new NetMeter(_xos, atof(_xos->getResource("netBandwidth"))));
82 
83  if ( _xos->isResourceTrue("disk") )
84  push(new DiskMeter(_xos, atof(_xos->getResource("diskBandwidth"))));
85 
86  if ( _xos->isResourceTrue("interrupts") )
87  push(new IntMeter(_xos));
88 
89  if ( _xos->isResourceTrue("irqrate") )
90  push(new IrqRateMeter(_xos));
91 
92  if ( _xos->isResourceTrue("battery") && BSDHasBattery() )
93  push(new BtryMeter(_xos));
94 
95 #if defined(__i386__) || defined(__x86_64__)
96  if ( _xos->isResourceTrue("coretemp") && CoreTemp::countCpus() > 0 ) {
97  char caption[32];
98  snprintf(caption, 32, "ACT(\260C)/HIGH/%s",
99  _xos->getResourceOrUseDefault( "coretempHighest", "100" ) );
100  const char *displayType = _xos->getResourceOrUseDefault("coretempDisplayType", "separate");
101  if (strncmp(displayType, "separate", 1) == 0) {
102  char name[5];
103  for (uint i = 0; i < CoreTemp::countCpus(); i++) {
104  snprintf(name, 5, "CPU%d", i);
105  push(new CoreTemp(_xos, name, caption, i));
106  }
107  }
108  else if (strncmp(displayType, "average", 1) == 0)
109  push(new CoreTemp(_xos, "CPU", caption, -1));
110  else if (strncmp(displayType, "maximum", 1) == 0)
111  push(new CoreTemp(_xos, "CPU", caption, -2));
112  else {
113  std::cerr << "Unknown value of coretempDisplayType: " << displayType << std::endl;
114  _xos->done(1);
115  }
116  }
117 #endif
118 
119  if ( _xos->isResourceTrue("bsdsensor") ) {
120  char caption[16], l[8], s[16];
121  for (int i = 1 ; ; i++) {
122  snprintf(s, 16, "bsdsensorHighest%d", i);
123  float highest = atof( _xos->getResourceOrUseDefault(s, "100") );
124  snprintf(caption, 16, "ACT/HIGH/%f", highest);
125  snprintf(s, 16, "bsdsensor%d", i);
126  const char *name = _xos->getResourceOrUseDefault(s, NULL);
127  if (!name || !*name)
128  break;
129  snprintf(s, 16, "bsdsensorHigh%d", i);
130  const char *high = _xos->getResourceOrUseDefault(s, NULL);
131  snprintf(s, 16, "bsdsensorLow%d", i);
132  const char *low = _xos->getResourceOrUseDefault(s, NULL);
133  snprintf(s, 16, "bsdsensorLabel%d", i);
134  snprintf(l, 8, "SEN%d", i);
135  const char *label = _xos->getResourceOrUseDefault(s, l);
136  push(new BSDSensor(_xos, name, high, low, label, caption, i));
137  }
138  }
139 }
static unsigned int countCpus(void)
Definition: coretemp.cc:73
void makeMeters(void)
Definition: MeterMaker.cc:42
MeterMaker(XOSView *xos)
Definition: MeterMaker.cc:38
XOSView * _xos
Definition: MeterMaker.h:28
int push(const Meter * data)
Definition: pllist.h:25
const char * getResourceOrUseDefault(const char *name, const char *defaultVal)
Definition: xwin.cc:351
int done(void)
Definition: xwin.h:29
int isResourceTrue(const char *name)
Definition: xwin.h:89
const char * getResource(const char *name)
Definition: xwin.cc:362
bool BSDHasBattery()
Definition: kernel.cc:1532
int BSDCountCpus(void)
Definition: kernel.cc:1127