X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fprocesses.c;h=f2eb0a34a0156613725ea0be87688b155d862c40;hb=9988d61c84dfff5d04ddf48f4b93f6c9449cdc41;hp=576a5b1515940d030da301d98001ab8454de7579;hpb=71cc6701e311071e1d9bfebbe53f9ac324cc7dfb;p=collectd.git diff --git a/src/processes.c b/src/processes.c index 576a5b15..f2eb0a34 100644 --- a/src/processes.c +++ b/src/processes.c @@ -4,6 +4,7 @@ * Copyright (C) 2006-2008 Florian octo Forster * Copyright (C) 2008 Oleg King * Copyright (C) 2009 Sebastian Harl + * Copyright (C) 2009 Andrés J. Díaz * Copyright (C) 2009 Manuel Sanmartin * * This program is free software; you can redistribute it and/or modify it @@ -25,6 +26,7 @@ * Florian octo Forster * Oleg King * Sebastian Harl + * Andrés J. Díaz * Manuel Sanmartin **/ @@ -148,10 +150,10 @@ typedef struct procstat_entry_s unsigned long cpu_system_counter; /* io data */ - long io_rchar; - long io_wchar; - long io_syscr; - long io_syscw; + derive_t io_rchar; + derive_t io_wchar; + derive_t io_syscr; + derive_t io_syscw; struct procstat_entry_s *next; } procstat_entry_t; @@ -177,10 +179,10 @@ typedef struct procstat unsigned long cpu_system_counter; /* io data */ - long io_rchar; - long io_wchar; - long io_syscr; - long io_syscw; + derive_t io_rchar; + derive_t io_wchar; + derive_t io_syscr; + derive_t io_syscw; struct procstat *next; struct procstat_entry_s *instances; @@ -260,7 +262,7 @@ static void ps_list_register (const char *name, const char *regexp) ERROR ("processes plugin: ps_list_register: " "Regular expression \"%s\" found in config " "file, but support for regular expressions " - "has been dispabled at compile time.", + "has been disabled at compile time.", regexp); sfree (new); return; @@ -662,8 +664,8 @@ static void ps_submit_proc_list (procstat_t *ps) if ( (ps->io_rchar != -1) && (ps->io_wchar != -1) ) { sstrncpy (vl.type, "ps_disk_octets", sizeof (vl.type)); - vl.values[0].counter = ps->io_rchar; - vl.values[1].counter = ps->io_wchar; + vl.values[0].derive = ps->io_rchar; + vl.values[1].derive = ps->io_wchar; vl.values_len = 2; plugin_dispatch_values (&vl); } @@ -671,8 +673,8 @@ static void ps_submit_proc_list (procstat_t *ps) if ( (ps->io_syscr != -1) && (ps->io_syscw != -1) ) { sstrncpy (vl.type, "ps_disk_ops", sizeof (vl.type)); - vl.values[0].counter = ps->io_syscr; - vl.values[1].counter = ps->io_syscw; + vl.values[0].derive = ps->io_syscr; + vl.values[1].derive = ps->io_syscw; vl.values_len = 2; plugin_dispatch_values (&vl); } @@ -680,8 +682,8 @@ static void ps_submit_proc_list (procstat_t *ps) DEBUG ("name = %s; num_proc = %lu; num_lwp = %lu; vmem_rss = %lu; " "vmem_minflt_counter = %lu; vmem_majflt_counter = %lu; " "cpu_user_counter = %lu; cpu_system_counter = %lu; " - "io_rchar = %ld; io_wchar = %ld; " - "io_syscr = %ld; io_syscw = %ld;", + "io_rchar = %"PRIi64"; io_wchar = %"PRIi64"; " + "io_syscr = %"PRIi64"; io_syscw = %"PRIi64";", ps->name, ps->num_proc, ps->num_lwp, ps->vmem_rss, ps->vmem_minflt_counter, ps->vmem_majflt_counter, ps->cpu_user_counter, ps->cpu_system_counter, @@ -732,7 +734,9 @@ static procstat_t *ps_read_io (int pid, procstat_t *ps) while (fgets (buffer, 1024, fh) != NULL) { - long *val = NULL; + derive_t *val = NULL; + long long tmp; + char *endptr; if (strncasecmp (buffer, "rchar:", 6) == 0) val = &(ps->io_rchar); @@ -750,8 +754,14 @@ static procstat_t *ps_read_io (int pid, procstat_t *ps) if (numfields < 2) continue; - *val = atol (fields[1]); - } + errno = 0; + endptr = NULL; + tmp = strtoll (fields[1], &endptr, /* base = */ 10); + if ((errno != 0) || (endptr == fields[1])) + *val = -1; + else + *val = (derive_t) tmp; + } /* while (fgets) */ if (fclose (fh)) {