X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcpusleep.c;h=62988fb0205f9e6c197ad4c86f39b00708bc6a1e;hb=ad0a12907bf80b4f0deec217b8379dd08c490dbc;hp=e68655012284401bfbc890a63531fca9e4cd1d33;hpb=73a6f82a63747f088352a61e201beac2d185b2ac;p=collectd.git diff --git a/src/cpusleep.c b/src/cpusleep.c index e6865501..62988fb0 100644 --- a/src/cpusleep.c +++ b/src/cpusleep.c @@ -2,97 +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)); - + 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); return (0); } -void module_register(void) -{ +void module_register(void) { plugin_register_read("cpusleep", cpusleep_read); } /* void module_register */ - - -/* - * Local variables: - * c-file-style: "gnu" - * indent-tabs-mode: nil - * c-indent-level: 4 - * c-basic-offset: 2 - * tab-width: 4 - * End: - */