Skip to content
This repository has been archived by the owner on Oct 15, 2018. It is now read-only.

Commit

Permalink
Patches from Guntram Blohm - read CHANGELOG.
Browse files Browse the repository at this point in the history
  • Loading branch information
tiwilliam committed Apr 14, 2010
1 parent 7f61f87 commit d58a3f1
Show file tree
Hide file tree
Showing 15 changed files with 150 additions and 113 deletions.
5 changes: 5 additions & 0 deletions AUTHORS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,8 @@
- FreeBSD 4.x back-port
- Made it run without requiring root access
- Various small tweaks

Guntram Blohm <nagios1@guntram.de>
- Fixed lm_sensors to work with earlier versions
- Added used swap probes
- Various small tweaks
9 changes: 9 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
CHANGELOG FOR ISTAT
-------------------------------------------------------------------------
* Version: 0.5.7
* New: Probes for used swap space even if it's not used by client.
* New: Default config will set disk_mount_path_label to 1.
* Fix: Support older versions of lm_sensors (API < 0x0400).
* Fix: libfslabel could in some cases return uninitialized variables.
* Fix: kvm_open caused an error on first probe.
* Fix: sysctl will now warn if the network device can't be found.
* Fix: monitor_net can now include a colon (eg. ce:ce0).
-------------------------------------------------------------------------
* Version: 0.5.6
* New: Temperature and fan support with lm_sensors.
Expand Down
2 changes: 1 addition & 1 deletion isr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ string isr_memory_data(vector<sys_info> * _history)
stringstream temp;

if(0 == _history->size()) return temp.str();
temp << "<MEM w=\"" << _history->back().mem.c / 1000 << "\" a=\"" << _history->back().mem.a / 1000 << "\" i=\"" << _history->back().mem.i / 1000 << "\" f=\"" << _history->back().mem.f / 1000 << "\" t=\"" << _history->back().mem.t / 1000 << "\" su=\"0\" st=\"" << _history->back().mem.swt / 1000 << "\" pi=\"" << _history->back().mem.swi << "\" po=\"" << _history->back().mem.swo << "\"></MEM>";
temp << "<MEM w=\"" << _history->back().mem.c / 1000 << "\" a=\"" << _history->back().mem.a / 1000 << "\" i=\"" << _history->back().mem.i / 1000 << "\" f=\"" << _history->back().mem.f / 1000 << "\" t=\"" << _history->back().mem.t / 1000 << "\" su=\"" << _history->back().mem.swu / 1000 << "\" st=\"" << _history->back().mem.swt / 1000 << "\" pi=\"" << _history->back().mem.swi << "\" po=\"" << _history->back().mem.swo << "\"></MEM>";

return temp.str();
}
Expand Down
2 changes: 1 addition & 1 deletion libfslabel/fslabel.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ fslabel_identify(const char *path, fslabel_t *fslabel)
{
int fd, cr, r;

memset(fslabel, 0, sizeof(fslabel));
memset(fslabel, 0, sizeof(*fslabel));
do
{
fd = open(path, O_RDONLY|O_BINARY);
Expand Down
3 changes: 2 additions & 1 deletion main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@ int main(int argc, char ** argv)
#ifdef HAVE_LIBSENSORS
unsigned int sensor_num;
struct sensor_data sensor_data;


sensors_init(NULL);
sensor_num = get_sensor_num();

for (i = 0; i < sensor_num; i++)
Expand Down
19 changes: 16 additions & 3 deletions probes/kstat.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,10 +193,23 @@ int get_net_data(const char * _dev, struct net_data * _data)
kstat_t *ksp;
kstat_named_t *kn;
char name[32];
char module[32];
char *p;

strncpy(name, _dev, sizeof(name) - 1);
name[sizeof(name) - 1] = 0;
if(NULL == (ksp = kstat_lookup(ksh, "link", -1, name))) return -1;
strcpy(module, "link");
if((p = strchr(_dev, ':')) == NULL)
{
strncpy(name, _dev, sizeof(name) - 1);
name[sizeof(name) - 1] = 0;
}
else
{
strncpy(name, p + 1, sizeof(name) - 1);
name[sizeof(name) - 1]=0;
strncpy(module, _dev, sizeof(module) - 1);
module[p - _dev] = 0;
}
if(NULL == (ksp = kstat_lookup(ksh, module, -1, name))) return -1;
if(-1 == kstat_read(ksh, ksp, NULL)) return -1;
kn = (kstat_named_t *) ksp->ks_data;
if(NULL == (kn = (kstat_named_t *) kstat_data_lookup(ksp, "obytes64")))
Expand Down
84 changes: 42 additions & 42 deletions probes/kvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,60 +68,60 @@ int get_mem_data(struct mem_data * _mem)
double kbpp;
struct vmmeter sum;
struct kvm_swap swap[1];
static int first_time = 1;

struct nlist nl[] = {
{ "_cnt" },
{ NULL }
};

_mem->t = _mem->f = _mem->a = _mem->i = _mem->c = _mem->swi = _mem->swo = _mem->swt = 0;
_mem->t = _mem->f = _mem->a = _mem->i = _mem->c = _mem->swi = _mem->swo = _mem->swt = _mem->swu = 0;

if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY,
first_time ? "kvm_open()" : NULL)) != NULL)
if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) == NULL)
{
/* get virtual memory data */
if (kvm_nlist(kd, nl) == -1)
{
fprintf(stderr, "kvm_nlist(): %s\n", strerror(errno));
kvm_close(kd);
return -1;
}

len = sizeof(sum);

if (kvm_read(kd, nl[0].n_value, &sum, len) == -1)
{
fprintf(stderr, "kvm_read(): %s\n", strerror(errno));
kvm_close(kd);
return -1;
}

/* kilo bytes per page */
kbpp = sum.v_page_size / 1024;

_mem->t = sum.v_page_count * kbpp;
_mem->f = sum.v_free_count * kbpp;
_mem->a = sum.v_active_count * kbpp;
_mem->i = sum.v_inactive_count * kbpp;
_mem->c = sum.v_cache_count * kbpp;

_mem->swi = sum.v_swappgsin;
_mem->swo = sum.v_swappgsout;

if (kvm_getswapinfo(kd, swap, 1, 0) == -1)
{
fprintf(stderr, "kvm_getswapinfo(): %s\n", strerror(errno));
kvm_close(kd);
return -1;
}

_mem->swt = swap[0].ksw_total * kbpp;
fprintf(stderr, "kvm_open(): %s\n", strerror(errno));
return -1;
}

/* get virtual memory data */
if (kvm_nlist(kd, nl) == -1)
{
fprintf(stderr, "kvm_nlist(): %s\n", strerror(errno));
kvm_close(kd);
return -1;
}

len = sizeof(sum);

if (kvm_read(kd, nl[0].n_value, &sum, len) == -1)
{
fprintf(stderr, "kvm_read(): %s\n", strerror(errno));
kvm_close(kd);
return -1;
}

first_time = 0; /* don't warn on failures on subsequent calls */
/* kilo bytes per page */
kbpp = sum.v_page_size / 1024;

_mem->t = sum.v_page_count * kbpp;
_mem->f = sum.v_free_count * kbpp;
_mem->a = sum.v_active_count * kbpp;
_mem->i = sum.v_inactive_count * kbpp;
_mem->c = sum.v_cache_count * kbpp;

_mem->swi = sum.v_swappgsin;
_mem->swo = sum.v_swappgsout;

if (kvm_getswapinfo(kd, swap, 1, 0) == -1)
{
fprintf(stderr, "kvm_getswapinfo(): %s\n", strerror(errno));
kvm_close(kd);
return -1;
}

_mem->swt = swap[0].ksw_total * kbpp;
_mem->swu = swap[0].ksw_used * kbpp;

kvm_close(kd);

return 0;
}
Expand Down
105 changes: 47 additions & 58 deletions probes/lm_sensors.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
# include "config.h"
#endif

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#ifdef HAVE_SENSORS_SENSORS_H
Expand All @@ -45,86 +47,73 @@ unsigned int get_sensor_data(unsigned int _id, struct sensor_data *_data)
{
int a, b, c, num;
const sensors_chip_name * chip;
const sensors_feature * features;
const sensors_subfeature * subfeatures;

const sensors_feature_data * features;

a = num = 0;
while ((chip = sensors_get_detected_chips(NULL, &a)))

while ((chip = sensors_get_detected_chips(&a)))
{
b = 0;
while ((features = sensors_get_features(chip, &b)))
b = c = 0;

while ((features = sensors_get_all_features(*chip, &b, &c)))
{
c = 0;
while ((subfeatures = sensors_get_all_subfeatures(chip, features, &c)))
if (!memcmp(features->name, "fan", 3) && features->name[4]=='\0')
{
if (subfeatures->type == SENSORS_SUBFEATURE_FAN_INPUT)
if (_id == num)
{
if (_id == num)
{
_data->id = _id;
_data->chip = chip->addr;
_data->sensor = features->number;
_data->label = sensors_get_label(chip, features);
_data->kind = SENSOR_FAN;
sensors_get_value(chip, subfeatures->number, &_data->data);
}
num++;
_data->id = _id;
_data->chip = chip->addr;
_data->sensor = features->number;
_data->kind = SENSOR_FAN;
sensors_get_label(*chip, _data->sensor, &_data->label);
sensors_get_feature(*chip, _data->sensor, &_data->data);
}

if (subfeatures->type == SENSORS_SUBFEATURE_TEMP_INPUT)

num++;
}

if (!memcmp(features->name, "temp", 3) && features->name[5]=='\0')
{
if (_id == num)
{
if (_id == num)
{
_data->id = _id;
_data->chip = chip->addr;
_data->sensor = features->number;
_data->label = sensors_get_label(chip, features);
_data->kind = SENSOR_TEMP;
sensors_get_value(chip, subfeatures->number, &_data->data);
}
num++;
_data->id = _id;
_data->chip = chip->addr;
_data->sensor = features->number;
_data->kind = SENSOR_TEMP;
sensors_get_label(*chip, _data->sensor, &_data->label);
sensors_get_feature(*chip, _data->sensor, &_data->data);
}

num++;
}
}
}

return 0;
}

unsigned int get_sensor_num(void)
{
int a, b, c, num;
const sensors_chip_name * chip;
const sensors_feature * features;
const sensors_subfeature * subfeatures;

sensors_init(NULL);

const sensors_chip_name *chip;
const sensors_feature_data *features;

a = num = 0;
while ((chip = sensors_get_detected_chips(NULL, &a)))

while ((chip = sensors_get_detected_chips(&a)))
{
b = 0;
while ((features = sensors_get_features(chip, &b)))
b = c = 0;

while ((features = sensors_get_all_features(*chip, &b, &c)))
{
c = 0;
while ((subfeatures = sensors_get_all_subfeatures(chip, features, &c)))
{
if (subfeatures->type == SENSORS_SUBFEATURE_FAN_INPUT)
{
// chip = chip->addr
// sensor = features->number
num++; break;
}

if (subfeatures->type != SENSORS_SUBFEATURE_TEMP_INPUT)
{
num++; break;
}
}
if (!memcmp(features->name, "fan", 3) && features->name[4]=='\0')
num++;

if (!memcmp(features->name, "temp", 3) && features->name[5]=='\0')
num++;
}
}

return num;
}
#endif
7 changes: 6 additions & 1 deletion probes/procfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ int get_mem_data(struct mem_data * _mem)
char buf[320];
static FILE * fp = NULL;
unsigned long long memtotal = 0;
unsigned long long swapfree = 0;

if (!(fp = fopen("/proc/meminfo", "r"))) return -1;

Expand All @@ -109,13 +110,17 @@ int get_mem_data(struct mem_data * _mem)
sscanf(buf, "Active: %llu kB", &_mem->a);
sscanf(buf, "Inactive: %llu kB", &_mem->i);
sscanf(buf, "SwapTotal: %llu kB", &_mem->swt);
sscanf(buf, "SwapFree: %llu kB", &swapfree);
sscanf(buf, "Cached: %llu kB", &_mem->c);
}

_mem->swu = _mem->swt - swapfree;

if (0 == _mem->a && 0 == _mem->i && 0 == _mem->c)
{
_mem->a = memtotal - _mem->f;
}

fclose(fp);

if (!(fp = fopen("/proc/vmstat", "r"))) return -1;
Expand Down Expand Up @@ -171,7 +176,7 @@ int get_avg_data(struct cpu_data *_cpu)
{
static FILE * fp = NULL;

if (!(fp = fopen("/proc/loadavg", "r"))) return -1;
if (!(fp = fopen("/proc/loadavg", "r"))) return -1;

fscanf(fp, "%f %f %f", &_cpu->one, &_cpu->two, &_cpu->three);
fclose(fp);
Expand Down
2 changes: 1 addition & 1 deletion probes/statfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ int get_disk_info(char * _device, char * _uuid, char * _label, char * _name)
strncpy(_label, label.label, sizeof(label.label) - 1);
_label[sizeof(label.label) - 1] = 0;
}
else if (0 == r)
else
{
_uuid[0] = 0;
_label[0] = 0;
Expand Down
Loading

0 comments on commit d58a3f1

Please sign in to comment.