Skip to content
Snippets Groups Projects
Commit e94fe78a authored by Hahn Axel (hahn)'s avatar Hahn Axel (hahn)
Browse files

Merge branch 'cpu-check-remove-pipes' into 'master'

Update EOL help and docs

See merge request !33
parents 1f9352d4 2173731a
No related branches found
No related tags found
1 merge request!33Update EOL help and docs
......@@ -47,12 +47,13 @@
# 2021-03-26 v1.2 <axel.hahn@iml.unibe.ch> test major version if minor version was not detected
# 2021-11-02 v1.3 <axel.hahn@iml.unibe.ch> detect centos stream
# 2022-02-28 v1.4 <axel.hahn@iml.unibe.ch> remove negative performance data
# 2022-08-29 v1.5 <axel.hahn@iml.unibe.ch> fix help; shell syntax updates
# ======================================================================
. `dirname $0`/inc_pluginfunctions
. "$( dirname $0 )/inc_pluginfunctions"
eolcfg="${0}-data/*.cfg"
_version="1.3"
_version="1.5"
# --- limits
typeset -i iDaysWarn=365
......@@ -89,7 +90,7 @@ function autodetect(){
# --- stop 2: find version number
detectorPlugin="$0-versiondetect/detect-$myKey"
if [ -x "$detectorPlugin" ]; then
myVersion=`. "$detectorPlugin"`
myVersion=$(. "$detectorPlugin")
fi
if [ -z "$myVersion" ]; then
ph.abort "UNKNOWN: [$myKey] was not detected properly. It is unknown or output for version cannot be parsed."
......@@ -108,8 +109,8 @@ function getDaysLeft(){
local mydate=$1
echo $mydate | grep "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" >/dev/null
if [ $? -eq 0 ]; then
typeset -i local tsend=`date --date="$mydate" +%s`
typeset -i local daysLeft=($tsend - `date +%s`)/60/60/24
typeset -i local tsend=$(date --date="$mydate" +%s)
typeset -i local daysLeft=($tsend - $(date +%s))/60/60/24
echo $daysLeft
fi
}
......@@ -125,7 +126,7 @@ function findEolDate(){
local bContinue=0
while [ $bContinue = 0 ]; do
myVerKey=$( echo $myVerKey | rev | cut -f 2- -d "." | rev )
line=`grep "^$myKey:$myVerKey:" $eolcfg | sort -n | tail -1`
line=$(grep "^$myKey:$myVerKey:" $eolcfg | sort -n | tail -1)
test -z "$line" || bContinue=1
echo $myVerKey | grep "\." >/dev/null || bContinue=1
......@@ -143,6 +144,7 @@ function findEolDate(){
# --- no param? show help
if [ $# -lt 2 ]; then
_self=$( basename $0 )
cat <<EOH
______________________________________________________________________
......@@ -154,15 +156,15 @@ ______________________________________________________________________
Check and of support of an OS or a product.
The dates are defined in the files check_eol-*.cfg
For detailed information see `basename $0`.md
For detailed information see docs/20_Checks/check_eol.md
USAGE
$ `basename $0` [-c CRITICAL] [-w WARING] PRODUCT VERSION
$ $_self [-c CRITICAL] [-w WARING] PRODUCT VERSION
PARAMETERS
PRODUCT set a product; known product keys are listed below
`grep "^[a-zA-Z]" $eolcfg | cut -f 2 -d ":" | sort -un | sed "s#^# #g"`
$( grep "^[a-zA-Z]" $eolcfg | cut -f 2 -d ":" | sort -u | sed "s#^# #g" )
VERSION set a version.
Autodetection:
......@@ -175,10 +177,10 @@ OPTIONS
-w set warning limit; default $iDaysWarn
EXAMPLES
`basename $0` php 7.4
`basename $0` -w 100 -c 30 php 7.4
`basename $0` os detect
`basename $0` php detect
$_self php 8.1
$_self -w 100 -c 30 php 8.1
$_self os detect
$_self php detect
EOH
......@@ -228,18 +230,18 @@ if [ -z "$eol" ]; then
echo
grep "^$myKey:" $eolcfg | grep -v ":$myKey:[0-9]" | cut -f 3- -d ":"
echo
echo "Maybe an admin can add the version in `grep -l "^$myKey:" $eolcfg`"
echo "Maybe an admin can add the version in $(grep -l "^$myKey:" $eolcfg)"
echo "Existing/ known versions are:"
grep "^$myKey:[0-9]" $eolcfg | cut -f 3 -d ":" | sort -un
else
echo "The product key [$myKey] was not detected in any version."
fi
else
myEolVer=`echo $eol | cut -f 3 -d ":"`
myEolEnd=`echo $eol | cut -f 4 -d ":"`
myComment=`echo $eol | cut -f 5 -d ":"`
myEolVer=$(echo $eol | cut -f 3 -d ":")
myEolEnd=$(echo $eol | cut -f 4 -d ":")
myComment=$(echo $eol | cut -f 5 -d ":")
myDaysLeft=`getDaysLeft $myEolEnd`
myDaysLeft=$(getDaysLeft $myEolEnd)
# --- verify days left with limits
ph.setStatus "ok"
if [ $myDaysLeft -lt $iDaysWarn ]; then
......@@ -251,7 +253,7 @@ else
if [ $myDaysLeft -ge 0 ]; then
ph.status "[$myKey $myEolVer] ends on $myEolEnd ... $myDaysLeft days left $myComment"
else
echo "[$myKey $myEolVer] ended on $myEolEnd ... `echo $myDaysLeft | sed 's#\-##'` days EXPIRED ALREADY !!! $myComment"
echo "[$myKey $myEolVer] ended on $myEolEnd ... $(echo $myDaysLeft | sed 's#\-##') days EXPIRED ALREADY !!! $myComment"
fi
echo
grep "^$myKey:" $eolcfg | grep -v ":$myKey:[0-9]" | cut -f 3- -d ":"
......
## check EOL
### Introduction
**check_eol** is a plugin for Icinga/ Nagios. It detects the end of life of an OS or a product.
You get a status "ok", "warning" or "critical" based on the limits.
The status is "unknown" if a product or the eol date was not detected.
It is customizable / extendable to detect other products that are not included in the delivered basic config.
### Syntax
```txt
./check_eol
______________________________________________________________________
CHECK EOL :: v1.5
(c) Institute for Medical Education - University of Bern
Licence: GNU GPL 3
______________________________________________________________________
Check and of support of an OS or a product.
The dates are defined in the files check_eol-*.cfg
For detailed information see docs/20_Checks/check_eol.md
USAGE
$ check_eol [-c CRITICAL] [-w WARING] PRODUCT VERSION
PARAMETERS
PRODUCT set a product; known product keys are listed below
centos
debian
mariadb
mysql
node
php
postgres
ruby
ubuntu
VERSION set a version.
Autodetection:
There is a special handling vor version "detect".
You can set "os" as product to detect the (linux) distribution.
See examples below.
OPTIONS
-c set critical limit; default 90
-w set warning limit; default 365
EXAMPLES
check_eol php 8.1
check_eol -w 100 -c 30 php 8.1
check_eol os detect
check_eol php detect
```
#### Parameters
PRODUCT set a product; known product keys are listed below
VERSION set a version.
Autodetection:
There is a special handling vor version "detect".
You can set "os" as product to detect the (linux) distribution.
See examples below.
#### Options
-c set critical limit; default 90
-w set warning limit; default 365
### Examples
``check_eol php 7.4``
Show end of life for given php version 7.4
``check_eol -w 100 -c 30 php 7.4``
Add custom critical and warning limits
``check_eol os detect``
Show end of life for current linux os. The distribution and the major version will be detected.
``check_eol php detect``
Show the end of life for the detected php version
### Extend/ customize
The check is build to be customizable. You can add
* add your own end of life dates
* write a version detection for other products
The related files are in 2 subdirectories with check_eol prefix:
```
> ls -1 check_eol-data/ check_eol-versiondetect/
check_eol-data/:
databases.cfg
os.cfg
program-languages.cfg
check_eol-versiondetect/:
autodetect-mysqlany*
autodetect-os*
detect-mariadb*
detect-mysql*
detect-node*
detect-php*
detect-postgres*
detect-ruby*
```
#### End of life dates
The dates are defined in the files *check_eol-*.cfg*.
Those contain lines with parsed information that must start at the begin of line:
* ``[Key]:[version]:[Date as YYYY-MM-DD]:[COMMENT]``
* Key: name of the product in lowercase, i.e. "php", "centos"
* Version: version number, i.e. a major version i.e. "12" for Node or "7.4" for PHP
* Date as YYYY-MM-DD
* Comment: this is optional
* ``[Key]:METADATA for a product (can be multiline)``
* This type is completely optional. You can use it to show general (version indepenendent) product infos. It will be shown as additional text for each version of a product
Al other lines, like empty lines, lines starting with special characters are ignored. I use the hash to mark comments.
Snippet:
# --------------------------------------------
centos:The CentOS Project
centos:website https://www.centos.org/
# --------------------------------------------
centos:6:2020-11-30
centos:7:2024-06-30
centos:8:2029-05-31
Example output:
$ check_eol centos 7
OK [centos 7] ends on 2024-06-30 ... 1586 days left
The CentOS Project
website https://www.centos.org/
Limit Info: warn below 365 days; critical below 90 days
#### Files
* check_eol-data/os.cfg - contains eol dates for debian, centos, ubuntu
* check_eol-data/check_eol-databases.cfg - Mariadb, PostgreSql
* check_eol-data/check_eol-program-languages.cfg - Php, NodeJS
You can add your custom products and dates - it just must match *check_eol-*.cfg*. You should use a custom file name that does not conflict with delivered files.
Suggestion: *check_eol-data/custom-[my category].cfg*
#### Version detection
If you use ``check_eol [product] [version]`` with an already known version in your monitoring check then the search for an eol date is done directly in the *cfg files (see above).
If you wan to let detect the version use the keyword *detect* next to a product i.e. ``check_eol php detect``.
What happens is is uses a detection for the version number. Therefor it calls a script named *check_eol-versiondetect/detect-[PRODUCT]* - in our example for php ist is *check_eol-versiondetect/detect-php*.
The scripts *check_eol-versiondetect/detect-[PRODUCT]* must return just a major version - or major and minor version without any other text.
You can add your own scripts for other non existing products. The only rule is: it must output the version only. Your [PRODUCT] and the returned version will be scanned in *check_eol-*.cfg* to perform the eol check.
......@@ -3,7 +3,7 @@
"author": "Axel Hahn",
"tagline": "Icinga checks written in Bash",
"ignore": {
"files": ["20_Checks/zz_template_check_.md"],
"files": ["zz_template_check_.md"],
"folders": ["99_Not_Ready"]
},
"html": {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment