X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcpusleep.c;h=aa14cc12f8286060e388fd5be7ded5ba3400c7e3;hb=b2543fd12ea900377dc0939c5221f76b893e7f55;hp=bedc02a7965c33617c5e91d66cfcf4c07c4616f7;hpb=c8a4558dd36e594c7453982a18724e02b26ba328;p=collectd.git diff --git a/src/cpusleep.c b/src/cpusleep.c index bedc02a7..aa14cc12 100644 --- a/src/cpusleep.c +++ b/src/cpusleep.c @@ -2,86 +2,74 @@ * collectd - src/cpusleep.c * Copyright (C) 2016 rinigus * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. * -The MIT License (MIT) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - * Authors: - * rinigus - - CPU sleep is reported in milliseconds / s. For that, derive type was - selected and the time difference between BOOT and MONOTONIC clocks - fed to RRD - - **/ + * rinigus + * + * CPU sleep is reported in milliseconds of sleep per second of wall + * time. For that, the time difference between BOOT and MONOTONIC clocks + * is reported using derive type. +**/ #include "collectd.h" + +#include #include "common.h" #include "plugin.h" -#include -static void cpusleep_submit (derive_t cpu_sleep) -{ - value_t values[1]; +static void cpusleep_submit(derive_t cpu_sleep) { value_list_t vl = VALUE_LIST_INIT; - - values[0].derive = (derive_t) cpu_sleep; - - vl.values = values; + + vl.values = &(value_t){.derive = cpu_sleep}; vl.values_len = 1; - sstrncpy (vl.host, hostname_g, sizeof (vl.host)); - sstrncpy (vl.plugin, "cpusleep", sizeof (vl.plugin)); - sstrncpy (vl.type, "cpusleep", sizeof (vl.type)); - - plugin_dispatch_values (&vl); + sstrncpy(vl.plugin, "cpusleep", sizeof(vl.plugin)); + sstrncpy(vl.type, "total_time_in_ms", sizeof(vl.type)); + + plugin_dispatch_values(&vl); } -static int cpusleep_read (void) -{ +static int cpusleep_read(void) { struct timespec b, m; - if ( clock_gettime(CLOCK_BOOTTIME, &b ) < 0 ) - { - ERROR("cpusleep plugin: clock_boottime failed"); - return (-1); - } - - if ( clock_gettime(CLOCK_MONOTONIC, &m ) < 0 ) - { - ERROR("cpusleep plugin: clock_monotonic failed"); - return (-1); - } + if (clock_gettime(CLOCK_BOOTTIME, &b) < 0) { + ERROR("cpusleep plugin: clock_boottime failed"); + return -1; + } - double db = b.tv_sec + 1e-9 * b.tv_nsec; - double dm = m.tv_sec + 1e-9 * m.tv_nsec; + if (clock_gettime(CLOCK_MONOTONIC, &m) < 0) { + ERROR("cpusleep plugin: clock_monotonic failed"); + return -1; + } // to avoid false positives in counter overflow due to reboot, - // derive is used - derive_t sleep = (derive_t) ((db-dm) * 1000); + // derive is used. Sleep is calculated in milliseconds + derive_t diffsec = b.tv_sec - m.tv_sec; + derive_t diffnsec = b.tv_nsec - m.tv_nsec; + derive_t sleep = diffsec * 1000 + diffnsec / 1000000; - cpusleep_submit (sleep); + cpusleep_submit(sleep); return 0; } -void module_register (void) -{ - plugin_register_read ("cpusleep", cpusleep_read); +void module_register(void) { + plugin_register_read("cpusleep", cpusleep_read); } /* void module_register */