aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--collector/fixtures/e2e-output.txt350
l---------collector/fixtures/sys/class/hwmon/hwmon01
l---------collector/fixtures/sys/class/hwmon/hwmon11
l---------collector/fixtures/sys/class/hwmon/hwmon21
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan1_input1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan1_label1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan1_manual1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan1_max1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan1_min1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan1_output1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan1_safe0
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan2_input1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan2_label1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan2_manual1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan2_max1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan2_min1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan2_output1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/fan2_safe0
l---------collector/fixtures/sys/devices/platform/applesmc.768/hwmon/hwmon2/device1
-rw-r--r--collector/fixtures/sys/devices/platform/applesmc.768/name1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/name1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_input1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_label1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_max1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_label1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_max1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_input1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_label1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_max1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_input1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_label1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_max1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_input1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_label1
-rw-r--r--collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_max1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_beep1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_input1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_min1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_pulses1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_target1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_tolerance1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_beep1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_input1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_max1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_min1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_beep1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_input1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_max1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_min1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_beep1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_alarm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_beep1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/name1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_pwm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_temp1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_pwm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_temp1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_pwm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_temp1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_pwm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_temp1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_pwm1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_temp1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_crit_temp_tolerance1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_enable1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_floor1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_mode1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_start1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_down_time1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_up_time1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_stop_time1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_target_temp1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_sel1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_tolerance1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_base1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_step1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_sel1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_base1
-rw-r--r--collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_tol1
-rw-r--r--collector/hwmon_linux.go386
-rwxr-xr-xend-to-end-test.sh1
-rw-r--r--node_exporter.go2
99 files changed, 753 insertions, 79 deletions
diff --git a/README.md b/README.md
index c8b5b9f..d2e9c56 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,7 @@ diskstats | Exposes disk I/O statistics from `/proc/diskstats`. | Linux
24entropy | Exposes available entropy. | Linux 24entropy | Exposes available entropy. | Linux
25filefd | Exposes file descriptor statistics from `/proc/sys/fs/file-nr`. | Linux 25filefd | Exposes file descriptor statistics from `/proc/sys/fs/file-nr`. | Linux
26filesystem | Exposes filesystem statistics, such as disk space used. | FreeBSD, Dragonfly, Linux, OpenBSD 26filesystem | Exposes filesystem statistics, such as disk space used. | FreeBSD, Dragonfly, Linux, OpenBSD
27hwmon | Expose hardware monitoring and sensor data from `/sys/class/hwmon/`. | Linux
27loadavg | Exposes load average. | Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solaris 28loadavg | Exposes load average. | Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solaris
28mdadm | Exposes statistics about devices in `/proc/mdstat` (does nothing if no `/proc/mdstat` present). | Linux 29mdadm | Exposes statistics about devices in `/proc/mdstat` (does nothing if no `/proc/mdstat` present). | Linux
29meminfo | Exposes memory statistics. | Dragonfly, FreeBSD, Linux 30meminfo | Exposes memory statistics. | Dragonfly, FreeBSD, Linux
diff --git a/collector/fixtures/e2e-output.txt b/collector/fixtures/e2e-output.txt
index 9956940..54ff679 100644
--- a/collector/fixtures/e2e-output.txt
+++ b/collector/fixtures/e2e-output.txt
@@ -12,73 +12,73 @@ go_gc_duration_seconds_count 0
12go_goroutines 13 12go_goroutines 13
13# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. 13# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
14# TYPE go_memstats_alloc_bytes gauge 14# TYPE go_memstats_alloc_bytes gauge
15go_memstats_alloc_bytes 1.077136e+06 15go_memstats_alloc_bytes 1.236968e+06
16# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. 16# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
17# TYPE go_memstats_alloc_bytes_total counter 17# TYPE go_memstats_alloc_bytes_total counter
18go_memstats_alloc_bytes_total 1.077136e+06 18go_memstats_alloc_bytes_total 1.236968e+06
19# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. 19# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.
20# TYPE go_memstats_buck_hash_sys_bytes gauge 20# TYPE go_memstats_buck_hash_sys_bytes gauge
21go_memstats_buck_hash_sys_bytes 1.443406e+06 21go_memstats_buck_hash_sys_bytes 2717
22# HELP go_memstats_frees_total Total number of frees. 22# HELP go_memstats_frees_total Total number of frees.
23# TYPE go_memstats_frees_total counter 23# TYPE go_memstats_frees_total counter
24go_memstats_frees_total 0 24go_memstats_frees_total 265
25# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata. 25# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.
26# TYPE go_memstats_gc_sys_bytes gauge 26# TYPE go_memstats_gc_sys_bytes gauge
27go_memstats_gc_sys_bytes 98304 27go_memstats_gc_sys_bytes 65536
28# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use. 28# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use.
29# TYPE go_memstats_heap_alloc_bytes gauge 29# TYPE go_memstats_heap_alloc_bytes gauge
30go_memstats_heap_alloc_bytes 1.077136e+06 30go_memstats_heap_alloc_bytes 1.236968e+06
31# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used. 31# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used.
32# TYPE go_memstats_heap_idle_bytes gauge 32# TYPE go_memstats_heap_idle_bytes gauge
33go_memstats_heap_idle_bytes 737280 33go_memstats_heap_idle_bytes 139264
34# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use. 34# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use.
35# TYPE go_memstats_heap_inuse_bytes gauge 35# TYPE go_memstats_heap_inuse_bytes gauge
36go_memstats_heap_inuse_bytes 1.916928e+06 36go_memstats_heap_inuse_bytes 1.630208e+06
37# HELP go_memstats_heap_objects Number of allocated objects. 37# HELP go_memstats_heap_objects Number of allocated objects.
38# TYPE go_memstats_heap_objects gauge 38# TYPE go_memstats_heap_objects gauge
39go_memstats_heap_objects 4245 39go_memstats_heap_objects 8119
40# HELP go_memstats_heap_released_bytes_total Total number of heap bytes released to OS. 40# HELP go_memstats_heap_released_bytes_total Total number of heap bytes released to OS.
41# TYPE go_memstats_heap_released_bytes_total counter 41# TYPE go_memstats_heap_released_bytes_total counter
42go_memstats_heap_released_bytes_total 0 42go_memstats_heap_released_bytes_total 0
43# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system. 43# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system.
44# TYPE go_memstats_heap_sys_bytes gauge 44# TYPE go_memstats_heap_sys_bytes gauge
45go_memstats_heap_sys_bytes 2.654208e+06 45go_memstats_heap_sys_bytes 1.769472e+06
46# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection. 46# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection.
47# TYPE go_memstats_last_gc_time_seconds gauge 47# TYPE go_memstats_last_gc_time_seconds gauge
48go_memstats_last_gc_time_seconds 9 48go_memstats_last_gc_time_seconds 9
49# HELP go_memstats_lookups_total Total number of pointer lookups. 49# HELP go_memstats_lookups_total Total number of pointer lookups.
50# TYPE go_memstats_lookups_total counter 50# TYPE go_memstats_lookups_total counter
51go_memstats_lookups_total 16 51go_memstats_lookups_total 9
52# HELP go_memstats_mallocs_total Total number of mallocs. 52# HELP go_memstats_mallocs_total Total number of mallocs.
53# TYPE go_memstats_mallocs_total counter 53# TYPE go_memstats_mallocs_total counter
54go_memstats_mallocs_total 4245 54go_memstats_mallocs_total 8384
55# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures. 55# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures.
56# TYPE go_memstats_mcache_inuse_bytes gauge 56# TYPE go_memstats_mcache_inuse_bytes gauge
57go_memstats_mcache_inuse_bytes 9664 57go_memstats_mcache_inuse_bytes 9600
58# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system. 58# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system.
59# TYPE go_memstats_mcache_sys_bytes gauge 59# TYPE go_memstats_mcache_sys_bytes gauge
60go_memstats_mcache_sys_bytes 16384 60go_memstats_mcache_sys_bytes 16384
61# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures. 61# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures.
62# TYPE go_memstats_mspan_inuse_bytes gauge 62# TYPE go_memstats_mspan_inuse_bytes gauge
63go_memstats_mspan_inuse_bytes 18144 63go_memstats_mspan_inuse_bytes 16080
64# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system. 64# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system.
65# TYPE go_memstats_mspan_sys_bytes gauge 65# TYPE go_memstats_mspan_sys_bytes gauge
66go_memstats_mspan_sys_bytes 32768 66go_memstats_mspan_sys_bytes 16384
67# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place. 67# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place.
68# TYPE go_memstats_next_gc_bytes gauge 68# TYPE go_memstats_next_gc_bytes gauge
69go_memstats_next_gc_bytes 4.194304e+06 69go_memstats_next_gc_bytes 4.194304e+06
70# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations. 70# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations.
71# TYPE go_memstats_other_sys_bytes gauge 71# TYPE go_memstats_other_sys_bytes gauge
72go_memstats_other_sys_bytes 1.065642e+06 72go_memstats_other_sys_bytes 558435
73# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator. 73# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator.
74# TYPE go_memstats_stack_inuse_bytes gauge 74# TYPE go_memstats_stack_inuse_bytes gauge
75go_memstats_stack_inuse_bytes 491520 75go_memstats_stack_inuse_bytes 327680
76# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator. 76# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator.
77# TYPE go_memstats_stack_sys_bytes gauge 77# TYPE go_memstats_stack_sys_bytes gauge
78go_memstats_stack_sys_bytes 491520 78go_memstats_stack_sys_bytes 327680
79# HELP go_memstats_sys_bytes Number of bytes obtained by system. Sum of all system allocations. 79# HELP go_memstats_sys_bytes Number of bytes obtained by system. Sum of all system allocations.
80# TYPE go_memstats_sys_bytes gauge 80# TYPE go_memstats_sys_bytes gauge
81go_memstats_sys_bytes 5.802232e+06 81go_memstats_sys_bytes 2.756608e+06
82# HELP http_request_duration_microseconds The HTTP request latencies in microseconds. 82# HELP http_request_duration_microseconds The HTTP request latencies in microseconds.
83# TYPE http_request_duration_microseconds summary 83# TYPE http_request_duration_microseconds summary
84http_request_duration_microseconds{handler="prometheus",quantile="0.5"} NaN 84http_request_duration_microseconds{handler="prometheus",quantile="0.5"} NaN
@@ -380,73 +380,93 @@ node_disk_writes_merged{device="vda"} 2.0711856e+07
380node_entropy_available_bits 1337 380node_entropy_available_bits 1337
381# HELP node_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which node_exporter was built. 381# HELP node_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which node_exporter was built.
382# TYPE node_exporter_build_info gauge 382# TYPE node_exporter_build_info gauge
383node_exporter_build_info{branch="master",goversion="go1.5.4",revision="252feb6",version="0.12.0rc3"} 1 383node_exporter_build_info{branch="",goversion="go1.6.2",revision="",version=""} 1
384# HELP node_exporter_scrape_duration_seconds node_exporter: Duration of a scrape job. 384# HELP node_exporter_scrape_duration_seconds node_exporter: Duration of a scrape job.
385# TYPE node_exporter_scrape_duration_seconds summary 385# TYPE node_exporter_scrape_duration_seconds summary
386node_exporter_scrape_duration_seconds{collector="bonding",result="success",quantile="0.5"} 7.481600000000001e-05 386node_exporter_scrape_duration_seconds{collector="bonding",result="success",quantile="0.5"} 0.00019123300000000002
387node_exporter_scrape_duration_seconds{collector="bonding",result="success",quantile="0.9"} 7.481600000000001e-05 387node_exporter_scrape_duration_seconds{collector="bonding",result="success",quantile="0.9"} 0.00019123300000000002
388node_exporter_scrape_duration_seconds{collector="bonding",result="success",quantile="0.99"} 7.481600000000001e-05 388node_exporter_scrape_duration_seconds{collector="bonding",result="success",quantile="0.99"} 0.00019123300000000002
389node_exporter_scrape_duration_seconds_sum{collector="bonding",result="success"} 7.481600000000001e-05 389node_exporter_scrape_duration_seconds_sum{collector="bonding",result="success"} 0.00019123300000000002
390node_exporter_scrape_duration_seconds_count{collector="bonding",result="success"} 1 390node_exporter_scrape_duration_seconds_count{collector="bonding",result="success"} 1
391node_exporter_scrape_duration_seconds{collector="conntrack",result="success",quantile="0.5"} 0.00027974200000000003 391node_exporter_scrape_duration_seconds{collector="conntrack",result="success",quantile="0.5"} 3.1222e-05
392node_exporter_scrape_duration_seconds{collector="conntrack",result="success",quantile="0.9"} 0.00027974200000000003 392node_exporter_scrape_duration_seconds{collector="conntrack",result="success",quantile="0.9"} 3.1222e-05
393node_exporter_scrape_duration_seconds{collector="conntrack",result="success",quantile="0.99"} 0.00027974200000000003 393node_exporter_scrape_duration_seconds{collector="conntrack",result="success",quantile="0.99"} 3.1222e-05
394node_exporter_scrape_duration_seconds_sum{collector="conntrack",result="success"} 0.00027974200000000003 394node_exporter_scrape_duration_seconds_sum{collector="conntrack",result="success"} 3.1222e-05
395node_exporter_scrape_duration_seconds_count{collector="conntrack",result="success"} 1 395node_exporter_scrape_duration_seconds_count{collector="conntrack",result="success"} 1
396node_exporter_scrape_duration_seconds{collector="diskstats",result="success",quantile="0.5"} 0.001661895 396node_exporter_scrape_duration_seconds{collector="diskstats",result="success",quantile="0.5"} 0.001207839
397node_exporter_scrape_duration_seconds{collector="diskstats",result="success",quantile="0.9"} 0.001661895 397node_exporter_scrape_duration_seconds{collector="diskstats",result="success",quantile="0.9"} 0.001207839
398node_exporter_scrape_duration_seconds{collector="diskstats",result="success",quantile="0.99"} 0.001661895 398node_exporter_scrape_duration_seconds{collector="diskstats",result="success",quantile="0.99"} 0.001207839
399node_exporter_scrape_duration_seconds_sum{collector="diskstats",result="success"} 0.001661895 399node_exporter_scrape_duration_seconds_sum{collector="diskstats",result="success"} 0.001207839
400node_exporter_scrape_duration_seconds_count{collector="diskstats",result="success"} 1 400node_exporter_scrape_duration_seconds_count{collector="diskstats",result="success"} 1
401node_exporter_scrape_duration_seconds{collector="filefd",result="success",quantile="0.5"} 0.000146396 401node_exporter_scrape_duration_seconds{collector="entropy",result="success",quantile="0.5"} 2.1329000000000002e-05
402node_exporter_scrape_duration_seconds{collector="filefd",result="success",quantile="0.9"} 0.000146396 402node_exporter_scrape_duration_seconds{collector="entropy",result="success",quantile="0.9"} 2.1329000000000002e-05
403node_exporter_scrape_duration_seconds{collector="filefd",result="success",quantile="0.99"} 0.000146396 403node_exporter_scrape_duration_seconds{collector="entropy",result="success",quantile="0.99"} 2.1329000000000002e-05
404node_exporter_scrape_duration_seconds_sum{collector="filefd",result="success"} 0.000146396 404node_exporter_scrape_duration_seconds_sum{collector="entropy",result="success"} 2.1329000000000002e-05
405node_exporter_scrape_duration_seconds_count{collector="entropy",result="success"} 1
406node_exporter_scrape_duration_seconds{collector="filefd",result="success",quantile="0.5"} 3.7313e-05
407node_exporter_scrape_duration_seconds{collector="filefd",result="success",quantile="0.9"} 3.7313e-05
408node_exporter_scrape_duration_seconds{collector="filefd",result="success",quantile="0.99"} 3.7313e-05
409node_exporter_scrape_duration_seconds_sum{collector="filefd",result="success"} 3.7313e-05
405node_exporter_scrape_duration_seconds_count{collector="filefd",result="success"} 1 410node_exporter_scrape_duration_seconds_count{collector="filefd",result="success"} 1
406node_exporter_scrape_duration_seconds{collector="loadavg",result="success",quantile="0.5"} 6.1362e-05 411node_exporter_scrape_duration_seconds{collector="hwmon",result="success",quantile="0.5"} 0.002039698
407node_exporter_scrape_duration_seconds{collector="loadavg",result="success",quantile="0.9"} 6.1362e-05 412node_exporter_scrape_duration_seconds{collector="hwmon",result="success",quantile="0.9"} 0.002039698
408node_exporter_scrape_duration_seconds{collector="loadavg",result="success",quantile="0.99"} 6.1362e-05 413node_exporter_scrape_duration_seconds{collector="hwmon",result="success",quantile="0.99"} 0.002039698
409node_exporter_scrape_duration_seconds_sum{collector="loadavg",result="success"} 6.1362e-05 414node_exporter_scrape_duration_seconds_sum{collector="hwmon",result="success"} 0.002039698
415node_exporter_scrape_duration_seconds_count{collector="hwmon",result="success"} 1
416node_exporter_scrape_duration_seconds{collector="ksmd",result="success",quantile="0.5"} 9.497000000000001e-05
417node_exporter_scrape_duration_seconds{collector="ksmd",result="success",quantile="0.9"} 9.497000000000001e-05
418node_exporter_scrape_duration_seconds{collector="ksmd",result="success",quantile="0.99"} 9.497000000000001e-05
419node_exporter_scrape_duration_seconds_sum{collector="ksmd",result="success"} 9.497000000000001e-05
420node_exporter_scrape_duration_seconds_count{collector="ksmd",result="success"} 1
421node_exporter_scrape_duration_seconds{collector="loadavg",result="success",quantile="0.5"} 0.00030610500000000004
422node_exporter_scrape_duration_seconds{collector="loadavg",result="success",quantile="0.9"} 0.00030610500000000004
423node_exporter_scrape_duration_seconds{collector="loadavg",result="success",quantile="0.99"} 0.00030610500000000004
424node_exporter_scrape_duration_seconds_sum{collector="loadavg",result="success"} 0.00030610500000000004
410node_exporter_scrape_duration_seconds_count{collector="loadavg",result="success"} 1 425node_exporter_scrape_duration_seconds_count{collector="loadavg",result="success"} 1
411node_exporter_scrape_duration_seconds{collector="mdadm",result="success",quantile="0.5"} 0.000199423 426node_exporter_scrape_duration_seconds{collector="mdadm",result="success",quantile="0.5"} 0.001285081
412node_exporter_scrape_duration_seconds{collector="mdadm",result="success",quantile="0.9"} 0.000199423 427node_exporter_scrape_duration_seconds{collector="mdadm",result="success",quantile="0.9"} 0.001285081
413node_exporter_scrape_duration_seconds{collector="mdadm",result="success",quantile="0.99"} 0.000199423 428node_exporter_scrape_duration_seconds{collector="mdadm",result="success",quantile="0.99"} 0.001285081
414node_exporter_scrape_duration_seconds_sum{collector="mdadm",result="success"} 0.000199423 429node_exporter_scrape_duration_seconds_sum{collector="mdadm",result="success"} 0.001285081
415node_exporter_scrape_duration_seconds_count{collector="mdadm",result="success"} 1 430node_exporter_scrape_duration_seconds_count{collector="mdadm",result="success"} 1
416node_exporter_scrape_duration_seconds{collector="megacli",result="success",quantile="0.5"} 0.005821468000000001 431node_exporter_scrape_duration_seconds{collector="megacli",result="success",quantile="0.5"} 0.006589346
417node_exporter_scrape_duration_seconds{collector="megacli",result="success",quantile="0.9"} 0.005821468000000001 432node_exporter_scrape_duration_seconds{collector="megacli",result="success",quantile="0.9"} 0.006589346
418node_exporter_scrape_duration_seconds{collector="megacli",result="success",quantile="0.99"} 0.005821468000000001 433node_exporter_scrape_duration_seconds{collector="megacli",result="success",quantile="0.99"} 0.006589346
419node_exporter_scrape_duration_seconds_sum{collector="megacli",result="success"} 0.005821468000000001 434node_exporter_scrape_duration_seconds_sum{collector="megacli",result="success"} 0.006589346
420node_exporter_scrape_duration_seconds_count{collector="megacli",result="success"} 1 435node_exporter_scrape_duration_seconds_count{collector="megacli",result="success"} 1
421node_exporter_scrape_duration_seconds{collector="meminfo",result="success",quantile="0.5"} 0.001771465 436node_exporter_scrape_duration_seconds{collector="meminfo",result="success",quantile="0.5"} 0.0025752360000000003
422node_exporter_scrape_duration_seconds{collector="meminfo",result="success",quantile="0.9"} 0.001771465 437node_exporter_scrape_duration_seconds{collector="meminfo",result="success",quantile="0.9"} 0.0025752360000000003
423node_exporter_scrape_duration_seconds{collector="meminfo",result="success",quantile="0.99"} 0.001771465 438node_exporter_scrape_duration_seconds{collector="meminfo",result="success",quantile="0.99"} 0.0025752360000000003
424node_exporter_scrape_duration_seconds_sum{collector="meminfo",result="success"} 0.001771465 439node_exporter_scrape_duration_seconds_sum{collector="meminfo",result="success"} 0.0025752360000000003
425node_exporter_scrape_duration_seconds_count{collector="meminfo",result="success"} 1 440node_exporter_scrape_duration_seconds_count{collector="meminfo",result="success"} 1
426node_exporter_scrape_duration_seconds{collector="netdev",result="success",quantile="0.5"} 0.000959257 441node_exporter_scrape_duration_seconds{collector="meminfo_numa",result="success",quantile="0.5"} 0.000494111
427node_exporter_scrape_duration_seconds{collector="netdev",result="success",quantile="0.9"} 0.000959257 442node_exporter_scrape_duration_seconds{collector="meminfo_numa",result="success",quantile="0.9"} 0.000494111
428node_exporter_scrape_duration_seconds{collector="netdev",result="success",quantile="0.99"} 0.000959257 443node_exporter_scrape_duration_seconds{collector="meminfo_numa",result="success",quantile="0.99"} 0.000494111
429node_exporter_scrape_duration_seconds_sum{collector="netdev",result="success"} 0.000959257 444node_exporter_scrape_duration_seconds_sum{collector="meminfo_numa",result="success"} 0.000494111
445node_exporter_scrape_duration_seconds_count{collector="meminfo_numa",result="success"} 1
446node_exporter_scrape_duration_seconds{collector="netdev",result="success",quantile="0.5"} 0.00038711700000000003
447node_exporter_scrape_duration_seconds{collector="netdev",result="success",quantile="0.9"} 0.00038711700000000003
448node_exporter_scrape_duration_seconds{collector="netdev",result="success",quantile="0.99"} 0.00038711700000000003
449node_exporter_scrape_duration_seconds_sum{collector="netdev",result="success"} 0.00038711700000000003
430node_exporter_scrape_duration_seconds_count{collector="netdev",result="success"} 1 450node_exporter_scrape_duration_seconds_count{collector="netdev",result="success"} 1
431node_exporter_scrape_duration_seconds{collector="netstat",result="success",quantile="0.5"} 0.0017044130000000001 451node_exporter_scrape_duration_seconds{collector="netstat",result="success",quantile="0.5"} 0.0009007370000000001
432node_exporter_scrape_duration_seconds{collector="netstat",result="success",quantile="0.9"} 0.0017044130000000001 452node_exporter_scrape_duration_seconds{collector="netstat",result="success",quantile="0.9"} 0.0009007370000000001
433node_exporter_scrape_duration_seconds{collector="netstat",result="success",quantile="0.99"} 0.0017044130000000001 453node_exporter_scrape_duration_seconds{collector="netstat",result="success",quantile="0.99"} 0.0009007370000000001
434node_exporter_scrape_duration_seconds_sum{collector="netstat",result="success"} 0.0017044130000000001 454node_exporter_scrape_duration_seconds_sum{collector="netstat",result="success"} 0.0009007370000000001
435node_exporter_scrape_duration_seconds_count{collector="netstat",result="success"} 1 455node_exporter_scrape_duration_seconds_count{collector="netstat",result="success"} 1
436node_exporter_scrape_duration_seconds{collector="sockstat",result="success",quantile="0.5"} 0.000153337 456node_exporter_scrape_duration_seconds{collector="sockstat",result="success",quantile="0.5"} 0.000119957
437node_exporter_scrape_duration_seconds{collector="sockstat",result="success",quantile="0.9"} 0.000153337 457node_exporter_scrape_duration_seconds{collector="sockstat",result="success",quantile="0.9"} 0.000119957
438node_exporter_scrape_duration_seconds{collector="sockstat",result="success",quantile="0.99"} 0.000153337 458node_exporter_scrape_duration_seconds{collector="sockstat",result="success",quantile="0.99"} 0.000119957
439node_exporter_scrape_duration_seconds_sum{collector="sockstat",result="success"} 0.000153337 459node_exporter_scrape_duration_seconds_sum{collector="sockstat",result="success"} 0.000119957
440node_exporter_scrape_duration_seconds_count{collector="sockstat",result="success"} 1 460node_exporter_scrape_duration_seconds_count{collector="sockstat",result="success"} 1
441node_exporter_scrape_duration_seconds{collector="stat",result="success",quantile="0.5"} 0.00011309800000000001 461node_exporter_scrape_duration_seconds{collector="stat",result="success",quantile="0.5"} 0.00014981800000000002
442node_exporter_scrape_duration_seconds{collector="stat",result="success",quantile="0.9"} 0.00011309800000000001 462node_exporter_scrape_duration_seconds{collector="stat",result="success",quantile="0.9"} 0.00014981800000000002
443node_exporter_scrape_duration_seconds{collector="stat",result="success",quantile="0.99"} 0.00011309800000000001 463node_exporter_scrape_duration_seconds{collector="stat",result="success",quantile="0.99"} 0.00014981800000000002
444node_exporter_scrape_duration_seconds_sum{collector="stat",result="success"} 0.00011309800000000001 464node_exporter_scrape_duration_seconds_sum{collector="stat",result="success"} 0.00014981800000000002
445node_exporter_scrape_duration_seconds_count{collector="stat",result="success"} 1 465node_exporter_scrape_duration_seconds_count{collector="stat",result="success"} 1
446node_exporter_scrape_duration_seconds{collector="textfile",result="success",quantile="0.5"} 3.29e-07 466node_exporter_scrape_duration_seconds{collector="textfile",result="success",quantile="0.5"} 3.0500000000000004e-07
447node_exporter_scrape_duration_seconds{collector="textfile",result="success",quantile="0.9"} 3.29e-07 467node_exporter_scrape_duration_seconds{collector="textfile",result="success",quantile="0.9"} 3.0500000000000004e-07
448node_exporter_scrape_duration_seconds{collector="textfile",result="success",quantile="0.99"} 3.29e-07 468node_exporter_scrape_duration_seconds{collector="textfile",result="success",quantile="0.99"} 3.0500000000000004e-07
449node_exporter_scrape_duration_seconds_sum{collector="textfile",result="success"} 3.29e-07 469node_exporter_scrape_duration_seconds_sum{collector="textfile",result="success"} 3.0500000000000004e-07
450node_exporter_scrape_duration_seconds_count{collector="textfile",result="success"} 1 470node_exporter_scrape_duration_seconds_count{collector="textfile",result="success"} 1
451# HELP node_filefd_allocated File descriptor statistics: allocated. 471# HELP node_filefd_allocated File descriptor statistics: allocated.
452# TYPE node_filefd_allocated gauge 472# TYPE node_filefd_allocated gauge
@@ -457,6 +477,180 @@ node_filefd_maximum 1.631329e+06
457# HELP node_forks Total number of forks. 477# HELP node_forks Total number of forks.
458# TYPE node_forks counter 478# TYPE node_forks counter
459node_forks 26442 479node_forks 26442
480# HELP node_hwmon_fan_alarm Hardware sensor alarm status (fan)
481# TYPE node_hwmon_fan_alarm gauge
482node_hwmon_fan_alarm{chip="nct6779",sensor="fan2"} 0
483# HELP node_hwmon_fan_beep_enabled Hardware monitor sensor has beeping enabled
484# TYPE node_hwmon_fan_beep_enabled gauge
485node_hwmon_fan_beep_enabled{chip="nct6779",sensor="fan2"} 0
486# HELP node_hwmon_fan_manual Hardware monitor fan element manual
487# TYPE node_hwmon_fan_manual gauge
488node_hwmon_fan_manual{chip="applesmc_768",sensor="left_side"} 0
489node_hwmon_fan_manual{chip="applesmc_768",sensor="right_side"} 0
490# HELP node_hwmon_fan_max_rpm Hardware monitor for fan revolutions per minute (max)
491# TYPE node_hwmon_fan_max_rpm gauge
492node_hwmon_fan_max_rpm{chip="applesmc_768",sensor="left_side"} 6156
493node_hwmon_fan_max_rpm{chip="applesmc_768",sensor="right_side"} 5700
494# HELP node_hwmon_fan_min_rpm Hardware monitor for fan revolutions per minute (min)
495# TYPE node_hwmon_fan_min_rpm gauge
496node_hwmon_fan_min_rpm{chip="applesmc_768",sensor="left_side"} 2160
497node_hwmon_fan_min_rpm{chip="applesmc_768",sensor="right_side"} 2000
498node_hwmon_fan_min_rpm{chip="nct6779",sensor="fan2"} 0
499# HELP node_hwmon_fan_output Hardware monitor fan element output
500# TYPE node_hwmon_fan_output gauge
501node_hwmon_fan_output{chip="applesmc_768",sensor="left_side"} 2160
502node_hwmon_fan_output{chip="applesmc_768",sensor="right_side"} 2000
503# HELP node_hwmon_fan_pulses Hardware monitor fan element pulses
504# TYPE node_hwmon_fan_pulses gauge
505node_hwmon_fan_pulses{chip="nct6779",sensor="fan2"} 2
506# HELP node_hwmon_fan_rpm Hardware monitor for fan revolutions per minute (input)
507# TYPE node_hwmon_fan_rpm gauge
508node_hwmon_fan_rpm{chip="applesmc_768",sensor="left_side"} 0
509node_hwmon_fan_rpm{chip="applesmc_768",sensor="right_side"} 1998
510node_hwmon_fan_rpm{chip="nct6779",sensor="fan2"} 1098
511# HELP node_hwmon_fan_target_rpm Hardware monitor for fan revolutions per minute (target)
512# TYPE node_hwmon_fan_target_rpm gauge
513node_hwmon_fan_target_rpm{chip="nct6779",sensor="fan2"} 27000
514# HELP node_hwmon_fan_tolerance Hardware monitor fan element tolerance
515# TYPE node_hwmon_fan_tolerance gauge
516node_hwmon_fan_tolerance{chip="nct6779",sensor="fan2"} 0
517# HELP node_hwmon_in_alarm Hardware sensor alarm status (in)
518# TYPE node_hwmon_in_alarm gauge
519node_hwmon_in_alarm{chip="nct6779",sensor="in0"} 0
520node_hwmon_in_alarm{chip="nct6779",sensor="in1"} 1
521# HELP node_hwmon_in_beep_enabled Hardware monitor sensor has beeping enabled
522# TYPE node_hwmon_in_beep_enabled gauge
523node_hwmon_in_beep_enabled{chip="nct6779",sensor="in0"} 0
524node_hwmon_in_beep_enabled{chip="nct6779",sensor="in1"} 0
525# HELP node_hwmon_in_max_volts Hardware monitor for voltage (max)
526# TYPE node_hwmon_in_max_volts gauge
527node_hwmon_in_max_volts{chip="nct6779",sensor="in0"} 1.744
528node_hwmon_in_max_volts{chip="nct6779",sensor="in1"} 0
529# HELP node_hwmon_in_min_volts Hardware monitor for voltage (min)
530# TYPE node_hwmon_in_min_volts gauge
531node_hwmon_in_min_volts{chip="nct6779",sensor="in0"} 0
532node_hwmon_in_min_volts{chip="nct6779",sensor="in1"} 0
533# HELP node_hwmon_in_volts Hardware monitor for voltage (input)
534# TYPE node_hwmon_in_volts gauge
535node_hwmon_in_volts{chip="nct6779",sensor="in0"} 0.792
536node_hwmon_in_volts{chip="nct6779",sensor="in1"} 1.024
537# HELP node_hwmon_intrusion_alarm Hardware sensor alarm status (intrusion)
538# TYPE node_hwmon_intrusion_alarm gauge
539node_hwmon_intrusion_alarm{chip="nct6779",sensor="intrusion0"} 1
540node_hwmon_intrusion_alarm{chip="nct6779",sensor="intrusion1"} 1
541# HELP node_hwmon_intrusion_beep_enabled Hardware monitor sensor has beeping enabled
542# TYPE node_hwmon_intrusion_beep_enabled gauge
543node_hwmon_intrusion_beep_enabled{chip="nct6779",sensor="intrusion0"} 0
544node_hwmon_intrusion_beep_enabled{chip="nct6779",sensor="intrusion1"} 0
545# HELP node_hwmon_pwm_auto_point1_pwm Hardware monitor pwm element auto_point1_pwm
546# TYPE node_hwmon_pwm_auto_point1_pwm gauge
547node_hwmon_pwm_auto_point1_pwm{chip="nct6779",sensor="pwm1"} 153
548# HELP node_hwmon_pwm_auto_point1_temp Hardware monitor pwm element auto_point1_temp
549# TYPE node_hwmon_pwm_auto_point1_temp gauge
550node_hwmon_pwm_auto_point1_temp{chip="nct6779",sensor="pwm1"} 30000
551# HELP node_hwmon_pwm_auto_point2_pwm Hardware monitor pwm element auto_point2_pwm
552# TYPE node_hwmon_pwm_auto_point2_pwm gauge
553node_hwmon_pwm_auto_point2_pwm{chip="nct6779",sensor="pwm1"} 255
554# HELP node_hwmon_pwm_auto_point2_temp Hardware monitor pwm element auto_point2_temp
555# TYPE node_hwmon_pwm_auto_point2_temp gauge
556node_hwmon_pwm_auto_point2_temp{chip="nct6779",sensor="pwm1"} 70000
557# HELP node_hwmon_pwm_auto_point3_pwm Hardware monitor pwm element auto_point3_pwm
558# TYPE node_hwmon_pwm_auto_point3_pwm gauge
559node_hwmon_pwm_auto_point3_pwm{chip="nct6779",sensor="pwm1"} 255
560# HELP node_hwmon_pwm_auto_point3_temp Hardware monitor pwm element auto_point3_temp
561# TYPE node_hwmon_pwm_auto_point3_temp gauge
562node_hwmon_pwm_auto_point3_temp{chip="nct6779",sensor="pwm1"} 70000
563# HELP node_hwmon_pwm_auto_point4_pwm Hardware monitor pwm element auto_point4_pwm
564# TYPE node_hwmon_pwm_auto_point4_pwm gauge
565node_hwmon_pwm_auto_point4_pwm{chip="nct6779",sensor="pwm1"} 255
566# HELP node_hwmon_pwm_auto_point4_temp Hardware monitor pwm element auto_point4_temp
567# TYPE node_hwmon_pwm_auto_point4_temp gauge
568node_hwmon_pwm_auto_point4_temp{chip="nct6779",sensor="pwm1"} 70000
569# HELP node_hwmon_pwm_auto_point5_pwm Hardware monitor pwm element auto_point5_pwm
570# TYPE node_hwmon_pwm_auto_point5_pwm gauge
571node_hwmon_pwm_auto_point5_pwm{chip="nct6779",sensor="pwm1"} 255
572# HELP node_hwmon_pwm_auto_point5_temp Hardware monitor pwm element auto_point5_temp
573# TYPE node_hwmon_pwm_auto_point5_temp gauge
574node_hwmon_pwm_auto_point5_temp{chip="nct6779",sensor="pwm1"} 75000
575# HELP node_hwmon_pwm_crit_temp_tolerance Hardware monitor pwm element crit_temp_tolerance
576# TYPE node_hwmon_pwm_crit_temp_tolerance gauge
577node_hwmon_pwm_crit_temp_tolerance{chip="nct6779",sensor="pwm1"} 2000
578# HELP node_hwmon_pwm_enable Hardware monitor pwm element enable
579# TYPE node_hwmon_pwm_enable gauge
580node_hwmon_pwm_enable{chip="nct6779",sensor="pwm1"} 5
581# HELP node_hwmon_pwm_floor Hardware monitor pwm element floor
582# TYPE node_hwmon_pwm_floor gauge
583node_hwmon_pwm_floor{chip="nct6779",sensor="pwm1"} 1
584# HELP node_hwmon_pwm_mode Hardware monitor pwm element mode
585# TYPE node_hwmon_pwm_mode gauge
586node_hwmon_pwm_mode{chip="nct6779",sensor="pwm1"} 1
587# HELP node_hwmon_pwm_start Hardware monitor pwm element start
588# TYPE node_hwmon_pwm_start gauge
589node_hwmon_pwm_start{chip="nct6779",sensor="pwm1"} 1
590# HELP node_hwmon_pwm_step_down_time Hardware monitor pwm element step_down_time
591# TYPE node_hwmon_pwm_step_down_time gauge
592node_hwmon_pwm_step_down_time{chip="nct6779",sensor="pwm1"} 100
593# HELP node_hwmon_pwm_step_up_time Hardware monitor pwm element step_up_time
594# TYPE node_hwmon_pwm_step_up_time gauge
595node_hwmon_pwm_step_up_time{chip="nct6779",sensor="pwm1"} 100
596# HELP node_hwmon_pwm_stop_time Hardware monitor pwm element stop_time
597# TYPE node_hwmon_pwm_stop_time gauge
598node_hwmon_pwm_stop_time{chip="nct6779",sensor="pwm1"} 6000
599# HELP node_hwmon_pwm_target_temp Hardware monitor pwm element target_temp
600# TYPE node_hwmon_pwm_target_temp gauge
601node_hwmon_pwm_target_temp{chip="nct6779",sensor="pwm1"} 0
602# HELP node_hwmon_pwm_temp_sel Hardware monitor pwm element temp_sel
603# TYPE node_hwmon_pwm_temp_sel gauge
604node_hwmon_pwm_temp_sel{chip="nct6779",sensor="pwm1"} 7
605# HELP node_hwmon_pwm_temp_tolerance Hardware monitor pwm element temp_tolerance
606# TYPE node_hwmon_pwm_temp_tolerance gauge
607node_hwmon_pwm_temp_tolerance{chip="nct6779",sensor="pwm1"} 0
608# HELP node_hwmon_pwm_weight_duty_base Hardware monitor pwm element weight_duty_base
609# TYPE node_hwmon_pwm_weight_duty_base gauge
610node_hwmon_pwm_weight_duty_base{chip="nct6779",sensor="pwm1"} 0
611# HELP node_hwmon_pwm_weight_duty_step Hardware monitor pwm element weight_duty_step
612# TYPE node_hwmon_pwm_weight_duty_step gauge
613node_hwmon_pwm_weight_duty_step{chip="nct6779",sensor="pwm1"} 0
614# HELP node_hwmon_pwm_weight_temp_sel Hardware monitor pwm element weight_temp_sel
615# TYPE node_hwmon_pwm_weight_temp_sel gauge
616node_hwmon_pwm_weight_temp_sel{chip="nct6779",sensor="pwm1"} 1
617# HELP node_hwmon_pwm_weight_temp_step Hardware monitor pwm element weight_temp_step
618# TYPE node_hwmon_pwm_weight_temp_step gauge
619node_hwmon_pwm_weight_temp_step{chip="nct6779",sensor="pwm1"} 0
620# HELP node_hwmon_pwm_weight_temp_step_base Hardware monitor pwm element weight_temp_step_base
621# TYPE node_hwmon_pwm_weight_temp_step_base gauge
622node_hwmon_pwm_weight_temp_step_base{chip="nct6779",sensor="pwm1"} 0
623# HELP node_hwmon_pwm_weight_temp_step_tol Hardware monitor pwm element weight_temp_step_tol
624# TYPE node_hwmon_pwm_weight_temp_step_tol gauge
625node_hwmon_pwm_weight_temp_step_tol{chip="nct6779",sensor="pwm1"} 0
626# HELP node_hwmon_temp_celsius Hardware monitor for temperature (input)
627# TYPE node_hwmon_temp_celsius gauge
628node_hwmon_temp_celsius{chip="coretemp",sensor="core_0"} 54
629node_hwmon_temp_celsius{chip="coretemp",sensor="core_1"} 52
630node_hwmon_temp_celsius{chip="coretemp",sensor="core_2"} 53
631node_hwmon_temp_celsius{chip="coretemp",sensor="core_3"} 50
632node_hwmon_temp_celsius{chip="coretemp",sensor="physical_id_0"} 55
633# HELP node_hwmon_temp_crit_alarm_celsius Hardware monitor for temperature (crit_alarm)
634# TYPE node_hwmon_temp_crit_alarm_celsius gauge
635node_hwmon_temp_crit_alarm_celsius{chip="coretemp",sensor="core_0"} 0
636node_hwmon_temp_crit_alarm_celsius{chip="coretemp",sensor="core_1"} 0
637node_hwmon_temp_crit_alarm_celsius{chip="coretemp",sensor="core_2"} 0
638node_hwmon_temp_crit_alarm_celsius{chip="coretemp",sensor="core_3"} 0
639node_hwmon_temp_crit_alarm_celsius{chip="coretemp",sensor="physical_id_0"} 0
640# HELP node_hwmon_temp_crit_celsius Hardware monitor for temperature (crit)
641# TYPE node_hwmon_temp_crit_celsius gauge
642node_hwmon_temp_crit_celsius{chip="coretemp",sensor="core_0"} 100
643node_hwmon_temp_crit_celsius{chip="coretemp",sensor="core_1"} 100
644node_hwmon_temp_crit_celsius{chip="coretemp",sensor="core_2"} 100
645node_hwmon_temp_crit_celsius{chip="coretemp",sensor="core_3"} 100
646node_hwmon_temp_crit_celsius{chip="coretemp",sensor="physical_id_0"} 100
647# HELP node_hwmon_temp_max_celsius Hardware monitor for temperature (max)
648# TYPE node_hwmon_temp_max_celsius gauge
649node_hwmon_temp_max_celsius{chip="coretemp",sensor="core_0"} 84
650node_hwmon_temp_max_celsius{chip="coretemp",sensor="core_1"} 84
651node_hwmon_temp_max_celsius{chip="coretemp",sensor="core_2"} 84
652node_hwmon_temp_max_celsius{chip="coretemp",sensor="core_3"} 84
653node_hwmon_temp_max_celsius{chip="coretemp",sensor="physical_id_0"} 84
460# HELP node_intr Total number of interrupts serviced. 654# HELP node_intr Total number of interrupts serviced.
461# TYPE node_intr counter 655# TYPE node_intr counter
462node_intr 8.885917e+06 656node_intr 8.885917e+06
@@ -1540,8 +1734,8 @@ node_sockstat_UDP_mem_bytes 0
1540node_sockstat_sockets_used 229 1734node_sockstat_sockets_used 229
1541# HELP node_textfile_mtime Unixtime mtime of textfiles successfully read. 1735# HELP node_textfile_mtime Unixtime mtime of textfiles successfully read.
1542# TYPE node_textfile_mtime gauge 1736# TYPE node_textfile_mtime gauge
1543node_textfile_mtime{file="metrics1.prom"} 1.451167666820433e+09 1737node_textfile_mtime{file="metrics1.prom"} 1.463773694e+09
1544node_textfile_mtime{file="metrics2.prom"} 1.451167666820433e+09 1738node_textfile_mtime{file="metrics2.prom"} 1.463773694e+09
1545# HELP node_textfile_scrape_error 1 if there was an error opening or reading a file, 0 otherwise 1739# HELP node_textfile_scrape_error 1 if there was an error opening or reading a file, 0 otherwise
1546# TYPE node_textfile_scrape_error gauge 1740# TYPE node_textfile_scrape_error gauge
1547node_textfile_scrape_error 0 1741node_textfile_scrape_error 0
@@ -1553,16 +1747,16 @@ process_cpu_seconds_total 0
1553process_max_fds 1024 1747process_max_fds 1024
1554# HELP process_open_fds Number of open file descriptors. 1748# HELP process_open_fds Number of open file descriptors.
1555# TYPE process_open_fds gauge 1749# TYPE process_open_fds gauge
1556process_open_fds 7 1750process_open_fds 8
1557# HELP process_resident_memory_bytes Resident memory size in bytes. 1751# HELP process_resident_memory_bytes Resident memory size in bytes.
1558# TYPE process_resident_memory_bytes gauge 1752# TYPE process_resident_memory_bytes gauge
1559process_resident_memory_bytes 1.23904e+07 1753process_resident_memory_bytes 1.1108352e+07
1560# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. 1754# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
1561# TYPE process_start_time_seconds gauge 1755# TYPE process_start_time_seconds gauge
1562process_start_time_seconds 1.45121398864e+09 1756process_start_time_seconds 1.47509459587e+09
1563# HELP process_virtual_memory_bytes Virtual memory size in bytes. 1757# HELP process_virtual_memory_bytes Virtual memory size in bytes.
1564# TYPE process_virtual_memory_bytes gauge 1758# TYPE process_virtual_memory_bytes gauge
1565process_virtual_memory_bytes 1.30809856e+08 1759process_virtual_memory_bytes 2.0549632e+08
1566# HELP testmetric1_1 Metric read from collector/fixtures/textfile/two_metric_files/metrics1.prom 1760# HELP testmetric1_1 Metric read from collector/fixtures/textfile/two_metric_files/metrics1.prom
1567# TYPE testmetric1_1 untyped 1761# TYPE testmetric1_1 untyped
1568testmetric1_1{foo="bar"} 10 1762testmetric1_1{foo="bar"} 10
diff --git a/collector/fixtures/sys/class/hwmon/hwmon0 b/collector/fixtures/sys/class/hwmon/hwmon0
new file mode 120000
index 0000000..0d95805
--- /dev/null
+++ b/collector/fixtures/sys/class/hwmon/hwmon0
@@ -0,0 +1 @@
../../devices/platform/coretemp.0/hwmon/hwmon0 \ No newline at end of file
diff --git a/collector/fixtures/sys/class/hwmon/hwmon1 b/collector/fixtures/sys/class/hwmon/hwmon1
new file mode 120000
index 0000000..bfb5f22
--- /dev/null
+++ b/collector/fixtures/sys/class/hwmon/hwmon1
@@ -0,0 +1 @@
../../devices/platform/nct6775.656/hwmon/hwmon1 \ No newline at end of file
diff --git a/collector/fixtures/sys/class/hwmon/hwmon2 b/collector/fixtures/sys/class/hwmon/hwmon2
new file mode 120000
index 0000000..3a98f61
--- /dev/null
+++ b/collector/fixtures/sys/class/hwmon/hwmon2
@@ -0,0 +1 @@
../../devices/platform/applesmc.768/hwmon/hwmon2 \ No newline at end of file
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan1_input b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_input
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_input
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan1_label b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_label
new file mode 100644
index 0000000..ac8988c
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_label
@@ -0,0 +1 @@
Left side
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan1_manual b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_manual
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_manual
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan1_max b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_max
new file mode 100644
index 0000000..8abbad5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_max
@@ -0,0 +1 @@
6156
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan1_min b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_min
new file mode 100644
index 0000000..317509b
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_min
@@ -0,0 +1 @@
2160
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan1_output b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_output
new file mode 100644
index 0000000..317509b
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_output
@@ -0,0 +1 @@
2160
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan1_safe b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_safe
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan1_safe
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan2_input b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_input
new file mode 100644
index 0000000..1ff838f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_input
@@ -0,0 +1 @@
1998
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan2_label b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_label
new file mode 100644
index 0000000..b5b1ea6
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_label
@@ -0,0 +1 @@
Right side
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan2_manual b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_manual
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_manual
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan2_max b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_max
new file mode 100644
index 0000000..7a1f00d
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_max
@@ -0,0 +1 @@
5700
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan2_min b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_min
new file mode 100644
index 0000000..8bd1af1
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_min
@@ -0,0 +1 @@
2000
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan2_output b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_output
new file mode 100644
index 0000000..8bd1af1
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_output
@@ -0,0 +1 @@
2000
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/fan2_safe b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_safe
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/fan2_safe
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/hwmon/hwmon2/device b/collector/fixtures/sys/devices/platform/applesmc.768/hwmon/hwmon2/device
new file mode 120000
index 0000000..6d0a2fe
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/hwmon/hwmon2/device
@@ -0,0 +1 @@
../../../applesmc.768 \ No newline at end of file
diff --git a/collector/fixtures/sys/devices/platform/applesmc.768/name b/collector/fixtures/sys/devices/platform/applesmc.768/name
new file mode 100644
index 0000000..b47d174
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/applesmc.768/name
@@ -0,0 +1 @@
applesmc
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/name b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/name
new file mode 100644
index 0000000..77ce462
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/name
@@ -0,0 +1 @@
coretemp
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit
new file mode 100644
index 0000000..f7393e8
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit
@@ -0,0 +1 @@
100000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit_alarm b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit_alarm
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_crit_alarm
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_input b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_input
new file mode 100644
index 0000000..2ef4768
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_input
@@ -0,0 +1 @@
55000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_label b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_label
new file mode 100644
index 0000000..f93d047
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_label
@@ -0,0 +1 @@
Physical id 0
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_max b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_max
new file mode 100644
index 0000000..9c2ebf5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_max
@@ -0,0 +1 @@
84000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit
new file mode 100644
index 0000000..f7393e8
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit
@@ -0,0 +1 @@
100000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit_alarm b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit_alarm
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit_alarm
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input
new file mode 100644
index 0000000..627c5c7
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input
@@ -0,0 +1 @@
54000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_label b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_label
new file mode 100644
index 0000000..09f8cbd
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_label
@@ -0,0 +1 @@
Core 0
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_max b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_max
new file mode 100644
index 0000000..9c2ebf5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_max
@@ -0,0 +1 @@
84000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit
new file mode 100644
index 0000000..f7393e8
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit
@@ -0,0 +1 @@
100000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit_alarm b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit_alarm
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit_alarm
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_input b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_input
new file mode 100644
index 0000000..44a1fc2
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_input
@@ -0,0 +1 @@
52000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_label b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_label
new file mode 100644
index 0000000..e98a1da
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_label
@@ -0,0 +1 @@
Core 1
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_max b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_max
new file mode 100644
index 0000000..9c2ebf5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_max
@@ -0,0 +1 @@
84000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit
new file mode 100644
index 0000000..f7393e8
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit
@@ -0,0 +1 @@
100000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit_alarm b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit_alarm
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit_alarm
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_input b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_input
new file mode 100644
index 0000000..7f13265
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_input
@@ -0,0 +1 @@
53000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_label b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_label
new file mode 100644
index 0000000..18c8a0b
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_label
@@ -0,0 +1 @@
Core 2
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_max b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_max
new file mode 100644
index 0000000..9c2ebf5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_max
@@ -0,0 +1 @@
84000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit
new file mode 100644
index 0000000..f7393e8
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit
@@ -0,0 +1 @@
100000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit_alarm b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit_alarm
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit_alarm
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_input b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_input
new file mode 100644
index 0000000..ccfc37a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_input
@@ -0,0 +1 @@
50000
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_label b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_label
new file mode 100644
index 0000000..5ec08ee
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_label
@@ -0,0 +1 @@
Core 3
diff --git a/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_max b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_max
new file mode 100644
index 0000000..9c2ebf5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_max
@@ -0,0 +1 @@
84000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_alarm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_alarm
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_alarm
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_beep b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_beep
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_beep
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_input b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_input
new file mode 100644
index 0000000..e2bb11d
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_input
@@ -0,0 +1 @@
1098
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_min b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_min
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_min
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_pulses b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_pulses
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_pulses
@@ -0,0 +1 @@
2
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_target b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_target
new file mode 100644
index 0000000..48fa3d2
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_target
@@ -0,0 +1 @@
27000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_tolerance b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_tolerance
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/fan2_tolerance
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_alarm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_alarm
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_alarm
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_beep b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_beep
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_beep
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_input b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_input
new file mode 100644
index 0000000..16331dd
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_input
@@ -0,0 +1 @@
792
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_max b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_max
new file mode 100644
index 0000000..548f0a5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_max
@@ -0,0 +1 @@
1744
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_min b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_min
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in0_min
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_alarm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_alarm
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_alarm
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_beep b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_beep
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_beep
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_input b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_input
new file mode 100644
index 0000000..d7b1c44
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_input
@@ -0,0 +1 @@
1024
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_max b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_max
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_max
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_min b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_min
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/in1_min
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_alarm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_alarm
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_alarm
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_beep b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_beep
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion0_beep
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_alarm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_alarm
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_alarm
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_beep b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_beep
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/intrusion1_beep
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/name b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/name
new file mode 100644
index 0000000..bddebf2
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/name
@@ -0,0 +1 @@
nct6779
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_pwm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_pwm
new file mode 100644
index 0000000..7f1ddd5
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_pwm
@@ -0,0 +1 @@
153
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_temp b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_temp
new file mode 100644
index 0000000..3a05c8b
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point1_temp
@@ -0,0 +1 @@
30000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_pwm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_pwm
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_pwm
@@ -0,0 +1 @@
255
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_temp b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_temp
new file mode 100644
index 0000000..5bf3711
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point2_temp
@@ -0,0 +1 @@
70000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_pwm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_pwm
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_pwm
@@ -0,0 +1 @@
255
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_temp b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_temp
new file mode 100644
index 0000000..5bf3711
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point3_temp
@@ -0,0 +1 @@
70000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_pwm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_pwm
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_pwm
@@ -0,0 +1 @@
255
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_temp b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_temp
new file mode 100644
index 0000000..5bf3711
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point4_temp
@@ -0,0 +1 @@
70000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_pwm b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_pwm
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_pwm
@@ -0,0 +1 @@
255
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_temp b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_temp
new file mode 100644
index 0000000..f2617ca
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_auto_point5_temp
@@ -0,0 +1 @@
75000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_crit_temp_tolerance b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_crit_temp_tolerance
new file mode 100644
index 0000000..8bd1af1
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_crit_temp_tolerance
@@ -0,0 +1 @@
2000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_enable b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_enable
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_enable
@@ -0,0 +1 @@
5
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_floor b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_floor
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_floor
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_mode b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_mode
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_mode
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_start b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_start
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_start
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_down_time b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_down_time
new file mode 100644
index 0000000..29d6383
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_down_time
@@ -0,0 +1 @@
100
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_up_time b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_up_time
new file mode 100644
index 0000000..29d6383
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_step_up_time
@@ -0,0 +1 @@
100
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_stop_time b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_stop_time
new file mode 100644
index 0000000..a77fd92
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_stop_time
@@ -0,0 +1 @@
6000
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_target_temp b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_target_temp
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_target_temp
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_sel b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_sel
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_sel
@@ -0,0 +1 @@
7
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_tolerance b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_tolerance
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_temp_tolerance
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_base b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_base
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_base
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_step b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_step
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_duty_step
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_sel b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_sel
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_sel
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_base b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_base
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_base
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_tol b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_tol
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_weight_temp_step_tol
@@ -0,0 +1 @@
0
diff --git a/collector/hwmon_linux.go b/collector/hwmon_linux.go
new file mode 100644
index 0000000..4ee1bc0
--- /dev/null
+++ b/collector/hwmon_linux.go
@@ -0,0 +1,386 @@
1// Copyright 2016 The Prometheus Authors
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14// +build !nohwmon
15
16package collector
17
18import (
19 "errors"
20 "io/ioutil"
21 "os"
22 "path"
23 "path/filepath"
24 "regexp"
25 "strconv"
26 "strings"
27
28 "github.com/prometheus/client_golang/prometheus"
29)
30
31const (
32 hwMonSubsystem = "hwmon"
33)
34
35var (
36 hwmonInvalidMetricChars = regexp.MustCompile("[^a-z0-9:_]")
37 hwmonFilenameFormat = regexp.MustCompile(`^(?P<type>[^0-9]+)(?P<id>[0-9]*)?(_(?P<property>.+))?$`)
38 hwmonLabelDesc = []string{"chip", "sensor"}
39 hwmonSensorTypes = []string{
40 "vrm", "beep_enable", "update_interval", "in", "cpu", "fan",
41 "pwm", "temp", "curr", "power", "energy", "humidity",
42 "intrusion",
43 }
44)
45
46func init() {
47 Factories["hwmon"] = NewHwMonCollector
48}
49
50type hwMonCollector struct{}
51
52// Takes a prometheus registry and returns a new Collector exposing
53// /sys/class/hwmon stats (similar to lm-sensors).
54func NewHwMonCollector() (Collector, error) {
55 return &hwMonCollector{}, nil
56}
57
58func cleanMetricName(name string) string {
59 lower := strings.ToLower(name)
60 replaced := hwmonInvalidMetricChars.ReplaceAllLiteralString(lower, "_")
61 cleaned := strings.Trim(replaced, "_")
62 return cleaned
63}
64
65func addValueFile(data map[string]map[string]string, sensor string, prop string, file string) {
66 raw, e := ioutil.ReadFile(file)
67 if e != nil {
68 return
69 }
70 value := strings.Trim(string(raw), "\n")
71
72 if _, ok := data[sensor]; !ok {
73 data[sensor] = make(map[string]string)
74 }
75
76 data[sensor][prop] = value
77}
78
79// Split a sensor name into <type><num>_<property>
80func explodeSensorFilename(filename string) (ok bool, sensorType string, sensorNum int, sensorProperty string) {
81 matches := hwmonFilenameFormat.FindStringSubmatch(filename)
82 if len(matches) == 0 {
83 return false, sensorType, sensorNum, sensorProperty
84 }
85 for i, match := range hwmonFilenameFormat.SubexpNames() {
86 if i >= len(matches) {
87 return true, sensorType, sensorNum, sensorProperty
88 }
89 if match == "type" {
90 sensorType = matches[i]
91 }
92 if match == "property" {
93 sensorProperty = matches[i]
94 }
95 if match == "id" && len(matches[i]) > 0 {
96 if num, err := strconv.Atoi(matches[i]); err == nil {
97 sensorNum = num
98 } else {
99 return false, sensorType, sensorNum, sensorProperty
100 }
101 }
102 }
103 return true, sensorType, sensorNum, sensorProperty
104}
105
106func collectSensorData(dir string, data map[string]map[string]string) (err error) {
107 sensorFiles, dirError := ioutil.ReadDir(dir)
108 if dirError != nil {
109 return dirError
110 }
111 for _, file := range sensorFiles {
112 filename := file.Name()
113 ok, sensorType, sensorNum, sensorProperty := explodeSensorFilename(filename)
114 if !ok {
115 continue
116 }
117
118 for _, t := range hwmonSensorTypes {
119 if t == sensorType {
120 addValueFile(data, sensorType+strconv.Itoa(sensorNum), sensorProperty, path.Join(dir, file.Name()))
121 break
122 }
123 }
124 }
125 return nil
126}
127
128func (c *hwMonCollector) updateHwmon(ch chan<- prometheus.Metric, dir string) (err error) {
129 hwmonName, err := c.hwmonName(dir)
130 if err != nil {
131 return err
132 }
133
134 data := make(map[string]map[string]string)
135 err = collectSensorData(dir, data)
136 if err != nil {
137 return err
138 }
139 if _, err := os.Stat(path.Join(dir, "device")); err == nil {
140 err := collectSensorData(path.Join(dir, "device"), data)
141 if err != nil {
142 return err
143 }
144 }
145
146 // format all sensors
147 for sensor, sensorData := range data {
148
149 _, sensorType, _, _ := explodeSensorFilename(sensor)
150
151 if labelText, ok := sensorData["label"]; ok {
152 label := cleanMetricName(labelText)
153 if label != "" {
154 sensor = label
155 }
156 }
157 labels := []string{hwmonName, sensor}
158
159 if sensorType == "beep_enable" {
160 value := 0.0
161 if sensorData[""] == "1" {
162 value = 1.0
163 }
164 metricName := "node_hwmon_beep_enabled"
165 desc := prometheus.NewDesc(metricName, "Hardware beep enabled", hwmonLabelDesc, nil)
166 ch <- prometheus.MustNewConstMetric(
167 desc, prometheus.GaugeValue, value, labels...)
168 continue
169 }
170 if sensorType == "vrm" {
171 parsedValue, err := strconv.ParseFloat(sensorData[""], 64)
172 if err != nil {
173 continue
174 }
175 metricName := "node_hwmon_voltage_regulator_version"
176 desc := prometheus.NewDesc(metricName, "Hardware voltage regulator", hwmonLabelDesc, nil)
177 ch <- prometheus.MustNewConstMetric(
178 desc, prometheus.GaugeValue, parsedValue, labels...)
179 continue
180 }
181 if sensorType == "update_interval" {
182 parsedValue, err := strconv.ParseFloat(sensorData[""], 64)
183 if err != nil {
184 continue
185 }
186 metricName := "node_hwmon_update_interval_seconds"
187 desc := prometheus.NewDesc(metricName, "Hardware monitor update interval", hwmonLabelDesc, nil)
188 ch <- prometheus.MustNewConstMetric(
189 desc, prometheus.GaugeValue, parsedValue*0.001, labels...)
190 continue
191 }
192
193 prefix := "node_hwmon_" + sensorType
194
195 for element, value := range sensorData {
196
197 if element == "label" {
198 continue
199 }
200
201 name := prefix
202 if element == "input" {
203 // input is actually the value
204 if _, ok := sensorData[""]; ok {
205 name = name + "_input"
206 }
207 } else if element != "" {
208 name = name + "_" + cleanMetricName(element)
209 }
210 parsedValue, err := strconv.ParseFloat(value, 64)
211 if err != nil {
212 continue
213 }
214
215 // special elements, fault, alarm & beep should be handed out without units
216 if element == "fault" || element == "alarm" {
217 desc := prometheus.NewDesc(name, "Hardware sensor "+element+" status ("+sensorType+")", hwmonLabelDesc, nil)
218 ch <- prometheus.MustNewConstMetric(desc, prometheus.GaugeValue, parsedValue, labels...)
219 continue
220 }
221 if element == "beep" {
222 desc := prometheus.NewDesc(name+"_enabled", "Hardware monitor sensor has beeping enabled", hwmonLabelDesc, nil)
223 ch <- prometheus.MustNewConstMetric(desc, prometheus.GaugeValue, parsedValue, labels...)
224 continue
225 }
226
227 // everything else should get a unit
228 if sensorType == "in" || sensorType == "cpu" {
229 desc := prometheus.NewDesc(name+"_volts", "Hardware monitor for voltage ("+element+")", hwmonLabelDesc, nil)
230 ch <- prometheus.MustNewConstMetric(
231 desc, prometheus.GaugeValue, parsedValue*0.001, labels...)
232 continue
233 }
234 if sensorType == "temp" && element != "type" {
235 desc := prometheus.NewDesc(name+"_celsius", "Hardware monitor for temperature ("+element+")", hwmonLabelDesc, nil)
236 ch <- prometheus.MustNewConstMetric(
237 desc, prometheus.GaugeValue, parsedValue*0.001, labels...)
238 continue
239 }
240 if sensorType == "curr" {
241 desc := prometheus.NewDesc(name+"_amps", "Hardware monitor for current ("+element+")", hwmonLabelDesc, nil)
242 ch <- prometheus.MustNewConstMetric(
243 desc, prometheus.GaugeValue, parsedValue*0.001, labels...)
244 continue
245 }
246 if sensorType == "energy" {
247 desc := prometheus.NewDesc(name+"_joule_total", "Hardware monitor for joules used so far ("+element+")", hwmonLabelDesc, nil)
248 ch <- prometheus.MustNewConstMetric(
249 desc, prometheus.CounterValue, parsedValue/1000000.0, labels...)
250 continue
251 }
252 if sensorType == "power" && element == "accuracy" {
253 desc := prometheus.NewDesc(name, "Hardware monitor power meter accuracy, as a ratio", hwmonLabelDesc, nil)
254 ch <- prometheus.MustNewConstMetric(
255 desc, prometheus.GaugeValue, parsedValue/1000000.0, labels...)
256 continue
257 }
258 if sensorType == "power" && (element == "average_interval" || element == "average_interval_min" || element == "average_interval_max") {
259 desc := prometheus.NewDesc(name+"_seconds", "Hardware monitor power usage update interval ("+element+")", hwmonLabelDesc, nil)
260 ch <- prometheus.MustNewConstMetric(
261 desc, prometheus.GaugeValue, parsedValue*0.001, labels...)
262 continue
263 }
264 if sensorType == "power" {
265 desc := prometheus.NewDesc(name+"_watt", "Hardware monitor for power usage in watts ("+element+")", hwmonLabelDesc, nil)
266 ch <- prometheus.MustNewConstMetric(
267 desc, prometheus.GaugeValue, parsedValue/1000000.0, labels...)
268 continue
269 }
270
271 if sensorType == "humidity" {
272 desc := prometheus.NewDesc(name, "Hardware monitor for humidity, as a ratio (multiply with 100.0 to get the humidity as a percentage) ("+element+")", hwmonLabelDesc, nil)
273 ch <- prometheus.MustNewConstMetric(
274 desc, prometheus.GaugeValue, parsedValue/1000000.0, labels...)
275 continue
276 }
277
278 if sensorType == "fan" && (element == "input" || element == "min" || element == "max" || element == "target") {
279 desc := prometheus.NewDesc(name+"_rpm", "Hardware monitor for fan revolutions per minute ("+element+")", hwmonLabelDesc, nil)
280 ch <- prometheus.MustNewConstMetric(
281 desc, prometheus.GaugeValue, parsedValue, labels...)
282 continue
283 }
284
285 // fallback, just dump the metric as is
286
287 desc := prometheus.NewDesc(name, "Hardware monitor "+sensorType+" element "+element, hwmonLabelDesc, nil)
288 ch <- prometheus.MustNewConstMetric(
289 desc, prometheus.GaugeValue, parsedValue, labels...)
290 }
291 }
292
293 return nil
294}
295
296func (c *hwMonCollector) hwmonName(dir string) (string, error) {
297 // generate a name for a sensor path
298
299 // sensor numbering depends on the order of linux module loading and
300 // is thus unstable.
301 // However the path of the device has to be stable:
302 // - /sys/devices/<bus>/<device>
303 // Some hardware monitors have a "name" file that exports a human
304 // readbale name that can be used.
305
306 // human readable names would be bat0 or coretemp, while a path string
307 // could be platform_applesmc.768
308
309 // preference 1: is there a name file
310
311 sysnameRaw, nameErr := ioutil.ReadFile(path.Join(dir, "name"))
312 if nameErr == nil && string(sysnameRaw) != "" {
313 cleanName := cleanMetricName(string(sysnameRaw))
314 if cleanName != "" {
315 return cleanName, nil
316 }
317 }
318
319 // preference 2: construct a name based on device
320
321 devicePath, devErr := filepath.EvalSymlinks(path.Join(dir, "device"))
322 if devErr == nil {
323 devPathPrefix, devName := path.Split(devicePath)
324 _, devType := path.Split(devPathPrefix)
325
326 cleanDevName := cleanMetricName(devName)
327 cleanDevType := cleanMetricName(devType)
328
329 if cleanDevType != "" && cleanDevName != "" {
330 return cleanDevType + "_" + cleanDevName, nil
331 }
332
333 if cleanDevName != "" {
334 return cleanDevName, nil
335 }
336 }
337
338 // it looks bad, name and device don't provide enough information
339 // return a hwmon[0-9]* name
340
341 realDir, err := filepath.EvalSymlinks(dir)
342 if err != nil {
343 return "", err
344 }
345
346 // take the last path element, this will be hwmonX
347 _, name := path.Split(realDir)
348 cleanName := cleanMetricName(name)
349 if cleanName != "" {
350 return cleanName, nil
351 }
352 return "", errors.New("Could not derive a monitoring name for " + dir)
353}
354
355func (c *hwMonCollector) Update(ch chan<- prometheus.Metric) (err error) {
356 // Step 1: scan /sys/class/hwmon, resolve all symlinks and call
357 // updatesHwmon for each folder
358
359 hwmonPathName := path.Join(sysFilePath("class"), "hwmon")
360
361 hwmonFiles, err := ioutil.ReadDir(hwmonPathName)
362 if err != nil {
363 return err
364 }
365
366 for _, hwDir := range hwmonFiles {
367 hwmonXPathName := path.Join(hwmonPathName, hwDir.Name())
368
369 if hwDir.Mode()&os.ModeSymlink > 0 {
370 hwDir, err = os.Stat(hwmonXPathName)
371 if err != nil {
372 continue
373 }
374 }
375
376 if !hwDir.IsDir() {
377 continue
378 }
379
380 if lastErr := c.updateHwmon(ch, hwmonXPathName); lastErr != nil {
381 err = lastErr
382 }
383 }
384
385 return err
386}
diff --git a/end-to-end-test.sh b/end-to-end-test.sh
index 89f799f..4e4ba41 100755
--- a/end-to-end-test.sh
+++ b/end-to-end-test.sh
@@ -7,6 +7,7 @@ collectors=$(cat << COLLECTORS
7 diskstats 7 diskstats
8 entropy 8 entropy
9 filefd 9 filefd
10 hwmon
10 ksmd 11 ksmd
11 loadavg 12 loadavg
12 mdadm 13 mdadm
diff --git a/node_exporter.go b/node_exporter.go
index 1e5594a..52d76b4 100644
--- a/node_exporter.go
+++ b/node_exporter.go
@@ -31,7 +31,7 @@ import (
31) 31)
32 32
33const ( 33const (
34 defaultCollectors = "conntrack,cpu,diskstats,entropy,filefd,filesystem,loadavg,mdadm,meminfo,netdev,netstat,sockstat,stat,textfile,time,uname,vmstat" 34 defaultCollectors = "conntrack,cpu,diskstats,entropy,filefd,filesystem,hwmon,loadavg,mdadm,meminfo,netdev,netstat,sockstat,stat,textfile,time,uname,vmstat"
35) 35)
36 36
37var ( 37var (