Commit 7a7bdfef authored by Adam Wujek's avatar Adam Wujek 💬

userspace/snmpd: add wrsOSStatus to wrsGeneralStatusGroup

-- add wrsOSStatus logic to wrsGeneralStatusGroup.c
-- update MIB
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent 1f8ca818
......@@ -50,8 +50,30 @@ wrsScalarOne OBJECT-TYPE
"Integer incremented at every GET"
::= { wrsScalar 1 }
-- wrsGeneralStatusGroup (.6.1)
wrsGeneralStatusGroup OBJECT IDENTIFIER ::= { wrsStatus 1 }
wrsOSStatus OBJECT-TYPE
SYNTAX INTEGER {
na(0),
ok(1),
error(2),
warning(3),
warningNA(4),
bug(5)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Grouped status of wrsOSStatusGroup
ok - values in wrsOSStatusGroup are correct
error - there is an error in wrsOSStatusGroup
warning - there is a warning in wrsOSStatusGroup
warningNA - there is N/A field in wrsOSStatusGroup
bug - bug in checking conditions of wrsOSStatusGroup, please report"
::= { wrsGeneralStatusGroup 2 }
--wrsGeneralStatusGroup OBJECT IDENTIFIER ::= { wrsStatus 1 }
wrsDetailedStatusesGroup OBJECT IDENTIFIER ::= { wrsStatus 2 }
-- wrsOSStatusGroup (.6.2.1)
......
......@@ -13,6 +13,7 @@
static struct pickinfo wrsGeneralStatus_pickinfo[] = {
FIELD(wrsGeneralStatus_s, ASN_INTEGER, wrsMainSystemStatus),
FIELD(wrsGeneralStatus_s, ASN_INTEGER, wrsOSStatus),
};
struct wrsGeneralStatus_s wrsGeneralStatus_s;
......@@ -20,16 +21,52 @@ struct wrsGeneralStatus_s wrsGeneralStatus_s;
time_t wrsGeneralStatus_data_fill(void)
{
static time_t time_update; /* time of last update */
time_t time_temp; /* time when temperature data was updated */
time_t time_osstatus; /* time when wrsOSStatus data was updated */
struct wrsOSStatus_s *o;
time_temp = wrsTemperature_data_fill();
time_osstatus = wrsOSStatus_data_fill();
if (time_temp <= time_update) {
if (time_osstatus <= time_update) {
/* cache not updated, return last update time */
snmp_log(LOG_ERR,
"SNMP: wrsGeneralStatusGroup cache\n");
return time_update;
}
/*********************************************************************\
|**************************** wrsOSStatus ****************************|
\*********************************************************************/
o = &wrsOSStatus_s;
if ( /* check if error */
o->wrsBootSuccessful == WRS_BOOT_SUCCESSFUL_ERROR
) {
wrsGeneralStatus_s.wrsOSStatus = WRS_OS_STATUS_ERROR;
} else if ( /* check if warning */
o->wrsBootSuccessful == WRS_BOOT_SUCCESSFUL_WARNING
|| o->wrsTemperatureWarning == WRS_TEMPERATURE_WARNING_THOLD_NOT_SET
|| o->wrsTemperatureWarning == WRS_TEMPERATURE_WARNING_TOO_HIGH
) { /* warning */
wrsGeneralStatus_s.wrsOSStatus = WRS_OS_STATUS_WARNING;
} else if ( /* check if any of fields equal to 0 */
o->wrsBootSuccessful == WRS_BOOT_SUCCESSFUL_WARNING_NA
|| o->wrsBootSuccessful == 0
|| o->wrsTemperatureWarning == 0
) { /* warning NA */
wrsGeneralStatus_s.wrsOSStatus = WRS_OS_STATUS_WARNING_NA;
} else if ( /* check if OK */
o->wrsBootSuccessful == WRS_BOOT_SUCCESSFUL_OK
&& o->wrsTemperatureWarning == WRS_TEMPERATURE_WARNING_OK
) { /* OK */
wrsGeneralStatus_s.wrsOSStatus = WRS_OS_STATUS_OK;
} else { /* probably bug in previous conditions,
* this should never happen */
wrsGeneralStatus_s.wrsOSStatus = WRS_OS_STATUS_BUG;
}
time_update = time(NULL);
wrsCurrentTime_data_fill();
wrsOSStatus_data_fill();
......
......@@ -2,8 +2,18 @@
#define WRS_GENERAL_STATUS_GROUP_H
#define WRSGENERALSTATUS_OID WRS_OID, 6, 1
#define WRS_OS_STATUS_OK 1 /* ok */
#define WRS_OS_STATUS_ERROR 2 /* error */
#define WRS_OS_STATUS_WARNING 3 /* warning */
#define WRS_OS_STATUS_WARNING_NA 4 /* warning, at least one field is
* equal to 0 (NA),shouldn't happen in
* normal operation */
#define WRS_OS_STATUS_BUG 5 /* warning */
struct wrsGeneralStatus_s {
int wrsMainSystemStatus;
int wrsOSStatus;
};
extern struct wrsGeneralStatus_s wrsGeneralStatus_s;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment