X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcpusleep.c;h=a1c3644752b3bc6689bb85d2f614cd405a00666a;hb=24bdf52decaf93359aab0364fb11420af5cd4a21;hp=46f10409dae5c53927ad590bb128515f1369dab7;hpb=9e07a3a7d90542740cab85c4f12a06b1df14fb59;p=collectd.git diff --git a/src/cpusleep.c b/src/cpusleep.c index 46f10409..a1c36447 100644 --- a/src/cpusleep.c +++ b/src/cpusleep.c @@ -2,86 +2,78 @@ * 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) -{ +static void cpusleep_submit(derive_t cpu_sleep) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - - values[0].derive = (derive_t) cpu_sleep; - + + values[0].derive = cpu_sleep; + vl.values = values; 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.host, hostname_g, sizeof(vl.host)); + 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_gettime CLOCK_MONOTONIC failed"); - return (-1); - } - - if ( clock_gettime(CLOCK_MONOTONIC, &m ) < 0 ) - { - ERROR("cpusleep plugin: clock_gettime 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; + 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 */