@cryptotaxi247 / netdata-1 / commits / 911dec2ba

Add Intel CPU temperature chart to FreeBSD plugin

Vladimir Kobal committed Aug 15, 2017 at 00:44 UTC 911dec2ba824511845bd751d099cf5b71e64b8b9
3 files changed +66
src/freebsd_sysctl.c
+64
@@ -372,6 +372,70 @@ int do_kern_cp_times(int update_every, usec_t dt) {
372 return 0;
373 }
374
375 +// --------------------------------------------------------------------------------------------------------------------
376 +// dev.cpu.temperature
377 +
378 +int do_dev_cpu_temperature(int update_every, usec_t dt) {
379 + (void)dt;
380 +
381 + int i;
382 + static int mib[4] = {0, 0, 0, 0};
383 + static long *pcpu_temperature = NULL;
384 + static int old_number_of_cpus = 0;
385 + char char_mib[MAX_INT_DIGITS + 21];
386 + char char_rd[MAX_INT_DIGITS + 9];
387 +
388 + if(unlikely(number_of_cpus != old_number_of_cpus))
389 + pcpu_temperature = reallocz(pcpu_temperature, sizeof(long) * number_of_cpus);
390 + for (i = 0; i < number_of_cpus; i++) {
391 + mib[2] = i;
392 + sprintf(char_mib, "dev.cpu.%d.temperature", i);
393 + if (unlikely(GETSYSCTL_SIMPLE(char_mib, mib, pcpu_temperature[i]))) {
394 + error("DISABLED: cpu.temperature chart");
395 + error("DISABLED: dev.cpu.temperature module");
396 + return 1;
397 + }
398 + }
399 +
400 + // --------------------------------------------------------------------
401 +
402 + static RRDSET *st;
403 + static RRDDIM **rd_pcpu_temperature;
404 +
405 + if(unlikely(number_of_cpus != old_number_of_cpus)) {
406 + rd_pcpu_temperature = reallocz(rd_pcpu_temperature, sizeof(RRDDIM) * number_of_cpus);
407 + if (unlikely(number_of_cpus > old_number_of_cpus))
408 + memset(&rd_pcpu_temperature[old_number_of_cpus], 0, sizeof(RRDDIM) * (number_of_cpus - old_number_of_cpus));
409 + }
410 +
411 + for (i = 0; i < number_of_cpus; i++) {
412 + if (unlikely(!st)) {
413 + st = rrdset_create_localhost("cpu",
414 + "temperature",
415 + NULL,
416 + "temperature",
417 + "cpu.temperatute",
418 + "Core temperature",
419 + "degree",
420 + 1050,
421 + update_every,
422 + RRDSET_TYPE_STACKED
423 + );
424 +
425 +
426 + sprintf(char_rd, "cpu%d.temp", i);
427 + rd_pcpu_temperature[i] = rrddim_add(st, char_rd, NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
428 + } else rrdset_next(st);
429 +
430 + rrddim_set_by_pointer(st, rd_pcpu_temperature[i], pcpu_temperature[i]);
431 + rrdset_done(st);
432 + }
433 +
434 + old_number_of_cpus = number_of_cpus;
435 +
436 + return 0;
437 +}
438 +
439 // --------------------------------------------------------------------------------------------------------------------
440 // hw.intrcnt
441
src/plugin_freebsd.c
+1
@@ -36,6 +36,7 @@ static struct freebsd_module {
36
37 // CPU metrics
38 { .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
39 + { .name = "dev.cpu.temperature", .dim = "cpu_temperature", .enabled = 1, .func = do_dev_cpu_temperature },
40
41 // disk metrics
42 { .name = "kern.devstat", .dim = "kern_devstat", .enabled = 1, .func = do_kern_devstat },
src/plugin_freebsd.h
+1
@@ -17,6 +17,7 @@ extern int do_vm_loadavg(int update_every, usec_t dt);
17 extern int do_vm_vmtotal(int update_every, usec_t dt);
18 extern int do_kern_cp_time(int update_every, usec_t dt);
19 extern int do_kern_cp_times(int update_every, usec_t dt);
20 +extern int do_dev_cpu_temperature(int update_every, usec_t dt);
21 extern int do_hw_intcnt(int update_every, usec_t dt);
22 extern int do_vm_stats_sys_v_intr(int update_every, usec_t dt);
23 extern int do_vm_stats_sys_v_soft(int update_every, usec_t dt);