From owner-p4-projects@FreeBSD.ORG Sat Aug 18 17:02:17 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F1DBE16A41A; Sat, 18 Aug 2007 17:02:16 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C17C616A46B for ; Sat, 18 Aug 2007 17:02:16 +0000 (UTC) (envelope-from cnst@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id ADCAD13C4A7 for ; Sat, 18 Aug 2007 17:02:16 +0000 (UTC) (envelope-from cnst@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l7IH2GCT057685 for ; Sat, 18 Aug 2007 17:02:16 GMT (envelope-from cnst@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l7IH2Gjd057682 for perforce@freebsd.org; Sat, 18 Aug 2007 17:02:16 GMT (envelope-from cnst@FreeBSD.org) Date: Sat, 18 Aug 2007 17:02:16 GMT Message-Id: <200708181702.l7IH2Gjd057682@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to cnst@FreeBSD.org using -f From: "Constantine A. Murenin" To: Perforce Change Reviews Cc: Subject: PERFORCE change 125310 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2007 17:02:17 -0000 http://perforce.freebsd.org/chv.cgi?CH=125310 Change 125310 by cnst@dale on 2007/08/18 17:01:35 update sensorsd documentation and sync sensor types I have submitted for review and then committed all of these changes upstream @ OpenBSD. Whilst here, also change the domain in my copyright, and remove OpenBSD's $Mdocdate$ from .Dd Affected files ... .. //depot/projects/soc2007/cnst-sensors/etc/sensorsd.conf#4 edit .. //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/Makefile#3 edit .. //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.8#4 edit .. //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#4 edit .. //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.conf.5#4 edit Differences ... ==== //depot/projects/soc2007/cnst-sensors/etc/sensorsd.conf#4 (text+ko) ==== @@ -1,6 +1,6 @@ -# $P4: //depot/projects/soc2007/cnst-sensors/etc/sensorsd.conf#3 $ +# $P4: //depot/projects/soc2007/cnst-sensors/etc/sensorsd.conf#4 $ # $FreeBSD$ -# $OpenBSD: sensorsd.conf,v 1.7 2007/05/30 07:49:37 cnst Exp $ +# $OpenBSD: sensorsd.conf,v 1.8 2007/08/14 19:02:02 cnst Exp $ # # Sample sensorsd.conf file. See sensorsd.conf(5) for details. @@ -31,7 +31,7 @@ # Warn if any temperature sensor is over 70 degC. # This entry will match only those temperature sensors -# that don't have their own entry and don't keep state. +# that don't have their own entry. #temp:high=70C ==== //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/Makefile#3 (text+ko) ==== @@ -1,4 +1,4 @@ -# $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/Makefile#2 $ +# $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/Makefile#3 $ # $FreeBSD$ # $OpenBSD: Makefile,v 1.1 2003/09/24 20:32:49 henning Exp $ ==== //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.8#4 (text+ko) ==== @@ -1,9 +1,10 @@ -.\" $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.8#3 $ +.\" $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.8#4 $ .\" $FreeBSD$ -.\" $OpenBSD: sensorsd.8,v 1.13 2007/07/31 08:11:36 jmc Exp $ +.\" $OpenBSD: sensorsd.8,v 1.16 2007/08/11 20:45:35 cnst Exp $ .\" .\" Copyright (c) 2003 Henning Brauer .\" Copyright (c) 2005 Matthew Gream +.\" Copyright (c) 2007 Constantine A. Murenin .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -17,30 +18,38 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: July 31 2007 $ +.Dd August 11, 2007 .Dt SENSORSD 8 .Os .Sh NAME .Nm sensorsd -.Nd monitor hardware sensors +.Nd hardware sensors monitor .Sh SYNOPSIS .Nm sensorsd .Op Fl d .Sh DESCRIPTION The .Nm -utility retrieves sensor monitoring data like fan speeds, -temperatures, voltages, and +utility retrieves sensor monitoring data like fan speed, +temperature, voltage and .Xr ami 4 logical disk status via .Xr sysctl 3 . -If the data is out of given limits, an alert is sent using +When the state of any monitored sensor changes, an alert is sent using .Xr syslog 3 and a command, if specified, is executed. .Pp By default, .Nm -also monitors status changes on all sensors that keep their state. +monitors status changes on all sensors that keep their state, +thus sensors that automatically provide status do not require +any additional configuration. +In addition, for every sensor, +no matter whether it automatically provides its state or not, +custom low and high limits may be set, +so that a local notion of sensor status can be computed by +.Nm , +indicating whether the sensor is within or is exceeding its limits. .Pp Limit and command values for a particular sensor may be specified in the .Xr sensorsd.conf 5 @@ -72,3 +81,14 @@ .Nm program first appeared in .Ox 3.5 . +.Sh CAVEATS +Certain sensors may flip status from time to time. +To guard against false reports, +.Nm +implements a state dumping mechanism. +However, this inevitably introduces +an additional delay in status reporting and command execution, +e.g. one may notice that +.Nm +makes its initial report about the state of monitored sensors +not immediately, but either 1 or 2 minutes after it is being started up. ==== //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#4 (text+ko) ==== @@ -1,6 +1,6 @@ -/* $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#3 $ */ +/* $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#4 $ */ /* $FreeBSD$ */ -/* $OpenBSD: sensorsd.c,v 1.33 2007/06/01 22:41:12 cnst Exp $ */ +/* $OpenBSD: sensorsd.c,v 1.34 2007/08/14 17:10:02 cnst Exp $ */ /*- * Copyright (c) 2003 Henning Brauer @@ -490,11 +490,17 @@ case SENSOR_AMPS: snprintf(fbuf, RFBUFSIZ, "%.2f A", value / 1000000.0); break; + case SENSOR_WATTHOUR: + snprintf(fbuf, RFBUFSIZ, "%.2f Wh", value / 1000000.0); + break; + case SENSOR_AMPHOUR: + snprintf(fbuf, RFBUFSIZ, "%.2f Ah", value / 1000000.0); + break; case SENSOR_INDICATOR: snprintf(fbuf, RFBUFSIZ, "%s", value? "On" : "Off"); break; case SENSOR_INTEGER: - snprintf(fbuf, RFBUFSIZ, "%lld raw", value); + snprintf(fbuf, RFBUFSIZ, "%lld", value); break; case SENSOR_PERCENT: snprintf(fbuf, RFBUFSIZ, "%.2f%%", value / 1000.0); @@ -503,11 +509,14 @@ snprintf(fbuf, RFBUFSIZ, "%.2f lx", value / 1000000.0); break; case SENSOR_DRIVE: - if (0 < value && value < sizeof(drvstat)/sizeof(drvstat[0])) { + if (0 < value && value < sizeof(drvstat)/sizeof(drvstat[0])) snprintf(fbuf, RFBUFSIZ, "%s", drvstat[value]); - break; - } - /* FALLTHROUGH */ + else + snprintf(fbuf, RFBUFSIZ, "%lld ???", value); + break; + case SENSOR_TIMEDELTA: + snprintf(fbuf, RFBUFSIZ, "%.6f secs", value / 1000000000.0); + break; default: snprintf(fbuf, RFBUFSIZ, "%lld ???", value); } @@ -613,9 +622,15 @@ case SENSOR_DRIVE: rval = val; break; + case SENSOR_AMPS: + case SENSOR_WATTHOUR: + case SENSOR_AMPHOUR: case SENSOR_LUX: rval = val * 1000 * 1000; break; + case SENSOR_TIMEDELTA: + rval = val * 1000 * 1000 * 1000; + break; default: errx(1, "unsupported sensor type"); /* not reached */ ==== //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.conf.5#4 (text+ko) ==== @@ -1,9 +1,10 @@ -.\" $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.conf.5#3 $ +.\" $P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.conf.5#4 $ .\" $FreeBSD$ -.\" $OpenBSD: sensorsd.conf.5,v 1.15 2007/06/05 04:10:56 jmc Exp $ +.\" $OpenBSD: sensorsd.conf.5,v 1.18 2007/08/14 17:10:02 cnst Exp $ .\" .\" Copyright (c) 2003 Henning Brauer .\" Copyright (c) 2005 Matthew Gream +.\" Copyright (c) 2007 Constantine A. Murenin .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -17,21 +18,19 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate$ +.Dd August 14, 2007 .Dt SENSORSD.CONF 5 .Os .Sh NAME .Nm sensorsd.conf .Nd configuration file for sensorsd -.Sh SYNOPSIS -.Nm sensorsd.conf .Sh DESCRIPTION The .Nm file is read by .Xr sensorsd 8 to configure hardware sensor monitoring. -Each valid sensor registered in the system +Each sensor registered in the system is matched by at most one entry in .Nm , which may specify high and low limits, @@ -59,7 +58,7 @@ .Pp .Bl -tag -width "commandXX" -offset indent -compact .It Li command -Specify a command to be executed if limits are crossed. +Specify a command to be executed on state change. .It Li high Specify an upper limit. .It Li low @@ -71,16 +70,26 @@ The values for temperature sensors can be given in degrees Celsius or Fahrenheit, for voltage sensors in volts, and fan speed sensors take a unit-less number representing RPM. +Values for all other types of sensors can be specified +in the same units as they appear under the +.Xr sysctl 8 +.Va hw.sensors +tree. .Pp -Sensors that provide status (such as from +Sensors that provide status (such as those from .Xr bio 4 , .Xr esm 4 , or .Xr ipmi 4 ) -do not require boundary values specified (that otherwise will be -ignored) and simply trigger on status transitions. +do not require boundary values specified +and simply trigger on status transitions. +If boundaries are specified nonetheless, +then they are used in addition to automatic status monitoring, +unless the +.Dq istatus +attribute is specified to ignore status values that are provided by the drivers. .Pp -The command is executed on transitions out of, and back into, given limits. +The command is executed when there is any change in sensor state. Tokens in the command are substituted as follows: .Pp .Bl -tag -width Ds -offset indent -compact @@ -114,18 +123,23 @@ .El .Sh EXAMPLES In the following configuration file, -if hw.sensors.ipmi0.temp0 goes above 80C, the command +if hw.sensors.ipmi0.temp0 transitions 80C or +if its status as provided by +.Xr ipmi 4 +changes, the command .Pa /etc/sensorsd/log_warning will be executed, with the sensor type, number and current value passed to it. -Alerts will be sent if hw.sensors.ipmi0.temp1 goes above 170F; -if hw.sensors.lm0.volt3 goes below 4.8V or above 5.2V; +Alerts will be sent +if hw.sensors.lm0.volt3 transitions to being within or outside +a range of 4.8V and 5.2V; if the speed of the fan attached to hw.sensors.lm0.fan1 -goes below 1000RPM or above 8000RPM; +transitions to being below or above 1000RPM; if any RAID volume drive -goes into a state other than +changes its status from, for example, .Dq OK , -such as drive failure, rebuild, or a complete failure, the command +such as in the case of drive failure, rebuild, or a complete failure, +the command .Pa /etc/sensorsd/drive will be executed, with the sensor number passed to it; however, no alerts will be generated for status changes on timedelta sensors. @@ -135,9 +149,8 @@ .Bd -literal -offset indent # Comments are allowed hw.sensors.ipmi0.temp0:high=80C:command=/etc/sensorsd/log_warning %t %n %2 -hw.sensors.ipmi0.temp1:high=170F hw.sensors.lm0.volt3:low=4.8V:high=5.2V -hw.sensors.lm0.fan1:low=1000:high=8000 +hw.sensors.lm0.fan1:low=1000 drive:command=/etc/sensorsd/drive %n timedelta:istatus #ignore status changes for timedelta .Ed @@ -153,3 +166,22 @@ .Nm file format first appeared in .Ox 3.5 . +The format was altered in +.Ox 4.1 +to accommodate hierarchical device-based sensor addressing. +The +.Dq istatus +attribute was introduced in +.Ox 4.2 . +.Sh CAVEATS +Alert functionality is triggered every time there is a change in sensor state; +for example, when +.Xr sensorsd 8 +is started, +the status of each monitored sensor changes +from undefined to whatever it is. +One must keep this in mind when using commands +that may unconditionally perform adverse actions (e.g.\& +.Xr shutdown 8 ) , +as they will be executed even when all sensors perform to specification. +If this is undesirable, then a wrapper shell script should be used instead.