#!/usr/bin/env perl
our
(
$mydir
,
$myname
);
BEGIN {
my
$location
= (-l $0) ? abs_path($0) : $0;
$location
=~ /(.*?)([^\/]+?)_?\z/s or
die
"?"
;
(
$mydir
,
$myname
) = ($1, $2);
}
my
$delay
= 5;
sub
usage {
print
"usage:
$myname
groupname/fieldname...
Run
'sensors'
, parse its output, and
print
the fields specified as
CSV, including the
time
as unixtime in the first column.
Options:
-d | --delay n delay between measurements in seconds (
default
:
$delay
)
Example:
examples/
log
-sensors
'coretemp-isa-0000/Core 0'
'coretemp-isa-0000/Core 1'
thinkpad-isa-0000/fan1
";
exit
1;
}
our
$verbose
= 0;
GetOptions(
"verbose"
=> \
$verbose
,
"help"
=>
sub
{usage},
"delay=n"
=> \
$delay
,
) or
exit
1;
usage
unless
@ARGV
;
Selector)
;
my
@sel
=
map
{
my
$sel
=
$_
;
my
@p
=
split
"/"
,
$sel
;
@p
== 2 or
die
"invalid selector: '$sel'"
;
Selector(
@p
)
}
@ARGV
;
sub
input {
my
$is_first
= 1;
my
$in
= maybeIO_to_stream(
sub
{
if
(
$is_first
) {
$is_first
= 0;
}
else
{
sleep
$delay
;
}
sensors_get
}
);
$in
->
map
(
sub
{
my
(
$m
) =
@_
;
[
$m
->
time
,
map
{
my
$sel
=
$_
;
$m
->
select
(
$_
)->value_or(
""
)
}
@sel
]
}
)
}
sub
do_log {
my
$rows
= input;
rows_to_csv_fh(
$rows
,
*STDOUT
,
undef
);
}
do_log;