Commit 355a0e0d authored by Adam Wujek's avatar Adam Wujek 💬

userspace/snmpd: add wrsDiskSpaceLow to wrsOSStatusGroup

Notify with error or warning when disk usage is too high.

Additionally:
--update MIB
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent 004085c5
......@@ -203,6 +203,22 @@ wrsCpuLoadHigh OBJECT-TYPE
Warning - average CPU load is more than 2 for 1min, 1.5 for 5min and 1 for 15min"
::= { wrsOSStatusGroup 4 }
wrsDiskSpaceLow OBJECT-TYPE
SYNTAX INTEGER {
na(0),
ok(1),
error(2),
warning(3),
warningNA(4)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Status of used disk space. Based on wrsDiskTable.
Error - more than 90% of any disk is used
Warning - more than 80% of any disk is used"
::= { wrsOSStatusGroup 5 }
-- wrsTimingStatusGroup (.6.2.2)
wrsTimingStatusGroup OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 2 }
......
......@@ -3,6 +3,7 @@
#include "wrsTemperatureGroup.h"
#include "wrsMemoryGroup.h"
#include "wrsCpuLoadGroup.h"
#include "wrsDiskTable.h"
#include "wrsOSStatusGroup.h"
#define WRSMEMORYFREELOW_TRESHOLD_ERROR 80
......@@ -16,11 +17,15 @@
#define WRSCPULOAD_5MIN_ERROR 200
#define WRSCPULOAD_15MIN_ERROR 150
#define WRSDISKSPACELOW_TRESHOLD_ERROR 90
#define WRSDISKSPACELOW_TRESHOLD_WARNING 80
static struct pickinfo wrsOSStatus_pickinfo[] = {
FIELD(wrsOSStatus_s, ASN_INTEGER, wrsBootSuccessful),
FIELD(wrsOSStatus_s, ASN_INTEGER, wrsTemperatureWarning),
FIELD(wrsOSStatus_s, ASN_INTEGER, wrsMemoryFreeLow),
FIELD(wrsOSStatus_s, ASN_INTEGER, wrsCpuLoadHigh),
FIELD(wrsOSStatus_s, ASN_INTEGER, wrsDiskSpaceLow),
};
struct wrsOSStatus_s wrsOSStatus_s;
......@@ -32,19 +37,26 @@ time_t wrsOSStatus_data_fill(void)
time_t time_boot; /* time when boot data was updated */
time_t time_free_mem; /* time when free memory data was updated */
time_t time_cpu_load; /* time when cpu load data was updated */
time_t time_disk_space; /* time when disk space data was updated */
unsigned int n_rows_disk_space; /* number of rows in wrsDiskTable_array
*/
unsigned int i;
struct wrsBootStatus_s *b;
struct wrsMemory_s *f;
struct wrsCpuLoad_s *c;
struct wrsDiskTable_s *d;
time_boot = wrsBootStatus_data_fill();
time_temp = wrsTemperature_data_fill();
time_free_mem = wrsMemory_data_fill();
time_cpu_load = wrsCpuLoad_data_fill();
time_disk_space = wrsDiskTable_data_fill(&n_rows_disk_space);
if (time_boot <= time_update
&& time_temp <= time_update
&& time_free_mem <= time_update
&& time_cpu_load <= time_update) {
&& time_cpu_load <= time_update
&& time_disk_space <= time_update) {
/* cache not updated, return last update time */
return time_update;
}
......@@ -190,6 +202,36 @@ time_t wrsOSStatus_data_fill(void)
wrsOSStatus_s.wrsCpuLoadHigh = WRS_CPU_LOAD_HIGH_OK;
}
/*********************************************************************\
|************************** wrsDiskSpaceLow **************************|
\*********************************************************************/
/* Check disk usage */
d = wrsDiskTable_array;
wrsOSStatus_s.wrsDiskSpaceLow = WRS_DISK_SPACE_LOW_OK;
for (i = 0; i < n_rows_disk_space; i++) {
if (d[i].wrsDiskUseRate > WRSDISKSPACELOW_TRESHOLD_ERROR) {
/* Disk usage above error threshold level */
wrsOSStatus_s.wrsDiskSpaceLow =
WRS_DISK_SPACE_LOW_ERROR;
snmp_log(LOG_ERR, "SNMP: wrsDiskSpaceLow error for "
"disk %s\n", d[i].wrsDiskMountPath);
/* error, can't be worst so break */
break;
} else if (d[i].wrsDiskUseRate > WRSDISKSPACELOW_TRESHOLD_WARNING) {
/* Disk usage above warning threshold level */
wrsOSStatus_s.wrsDiskSpaceLow =
WRS_DISK_SPACE_LOW_WARNING;
snmp_log(LOG_ERR, "SNMP: wrsDiskSpaceLow warning for "
"disk %s\n", d[i].wrsDiskMountPath);
} else if (d[i].wrsDiskSize == 0
&& wrsOSStatus_s.wrsDiskSpaceLow == WRS_DISK_SPACE_LOW_OK) {
/* disk size is 0, propably error while reading size,
* but don't overwrite regular warning */
wrsOSStatus_s.wrsDiskSpaceLow =
WRS_DISK_SPACE_LOW_WARNING_NA;
}
}
/* there was an update, return current time */
return time_update;
}
......
......@@ -26,11 +26,19 @@
#define WRS_CPU_LOAD_HIGH_ERROR 2 /* error */
#define WRS_CPU_LOAD_HIGH_WARNING 3 /* warning */
#define WRS_DISK_SPACE_LOW_OK 1 /* ok */
#define WRS_DISK_SPACE_LOW_ERROR 2 /* error */
#define WRS_DISK_SPACE_LOW_WARNING 3 /* warning */
#define WRS_DISK_SPACE_LOW_WARNING_NA 4 /* warning, at least one field is
* equal to 0 (NA),shouldn't happen in
* normal operation */
struct wrsOSStatus_s {
int wrsBootSuccessful;
int wrsTemperatureWarning;
int wrsMemoryFreeLow;
int wrsCpuLoadHigh;
int wrsDiskSpaceLow;
};
extern struct wrsOSStatus_s wrsOSStatus_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