From 95c1295818ac3c654b448f7d843971f2d69cda71 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 12 Jun 2019 11:32:52 +0200 Subject: [PATCH] init --- helpers/apt | 6 +++ helpers/date | 5 ++ helpers/df | 5 ++ helpers/hostname | 5 ++ helpers/mount | 5 ++ helpers/smart | 6 +++ helpers/template | 5 ++ helpers/uptime | 5 ++ hooks/on-finish | 1 + hooks/on-start | 11 +++++ report | 45 +++++++++++++++++ scripts/df | 8 +++ scripts/email | 22 +++++++++ scripts/footer | 5 ++ scripts/header | 10 ++++ scripts/html | 7 +++ scripts/mount | 8 +++ scripts/smart | 12 +++++ scripts/system | 22 +++++++++ templates/deblan/df.tpl | 7 +++ templates/deblan/footer.tpl | 3 ++ templates/deblan/header.tpl | 62 ++++++++++++++++++++++++ templates/deblan/mail-png-attachment.tpl | 9 ++++ templates/deblan/mail.tpl | 10 ++++ templates/deblan/mount.tpl | 7 +++ templates/deblan/plain.tpl | 1 + templates/deblan/smart.tpl | 7 +++ templates/deblan/system.tpl | 9 ++++ 28 files changed, 308 insertions(+) create mode 100644 helpers/apt create mode 100644 helpers/date create mode 100644 helpers/df create mode 100644 helpers/hostname create mode 100644 helpers/mount create mode 100644 helpers/smart create mode 100644 helpers/template create mode 100644 helpers/uptime create mode 100755 hooks/on-finish create mode 100755 hooks/on-start create mode 100755 report create mode 100755 scripts/df create mode 100755 scripts/email create mode 100755 scripts/footer create mode 100755 scripts/header create mode 100755 scripts/html create mode 100755 scripts/mount create mode 100755 scripts/smart create mode 100755 scripts/system create mode 100644 templates/deblan/df.tpl create mode 100644 templates/deblan/footer.tpl create mode 100644 templates/deblan/header.tpl create mode 100644 templates/deblan/mail-png-attachment.tpl create mode 100644 templates/deblan/mail.tpl create mode 100644 templates/deblan/mount.tpl create mode 100644 templates/deblan/plain.tpl create mode 100644 templates/deblan/smart.tpl create mode 100644 templates/deblan/system.tpl diff --git a/helpers/apt b/helpers/apt new file mode 100644 index 0000000..d379298 --- /dev/null +++ b/helpers/apt @@ -0,0 +1,6 @@ +#/bin/sh + +get_updates() { + LANG=en apt-get --just-print upgrade | grep "not upgraded" | grep -Eo '[0-9]{1,4}' | tr ' ' '\n' | awk '{sum+=$0}END{print sum}' +} + diff --git a/helpers/date b/helpers/date new file mode 100644 index 0000000..e5e9a5c --- /dev/null +++ b/helpers/date @@ -0,0 +1,5 @@ +#!/bin/sh + +get_date() { + LANG=fr_FR.UTF-8 date +} diff --git a/helpers/df b/helpers/df new file mode 100644 index 0000000..0086ada --- /dev/null +++ b/helpers/df @@ -0,0 +1,5 @@ +#!/bin/sh + +get_df() { + df -h +} diff --git a/helpers/hostname b/helpers/hostname new file mode 100644 index 0000000..584d3e8 --- /dev/null +++ b/helpers/hostname @@ -0,0 +1,5 @@ +#!/bin/sh + +get_hostname() { + hostname +} diff --git a/helpers/mount b/helpers/mount new file mode 100644 index 0000000..b5007e5 --- /dev/null +++ b/helpers/mount @@ -0,0 +1,5 @@ +#!/bin/sh + +get_mount() { + mount +} diff --git a/helpers/smart b/helpers/smart new file mode 100644 index 0000000..95e23c0 --- /dev/null +++ b/helpers/smart @@ -0,0 +1,6 @@ +#!/bin/sh + +get_smart() { + smartctl -H "$1" +} + diff --git a/helpers/template b/helpers/template new file mode 100644 index 0000000..daad366 --- /dev/null +++ b/helpers/template @@ -0,0 +1,5 @@ +#!/bin/sh + +render_template() { + envsubst < "$TEMPLATE/$1.tpl" +} diff --git a/helpers/uptime b/helpers/uptime new file mode 100644 index 0000000..7b5974b --- /dev/null +++ b/helpers/uptime @@ -0,0 +1,5 @@ +#!/bin/sh + +get_uptime() { + uptime | sed 's/^\s//' +} diff --git a/hooks/on-finish b/hooks/on-finish new file mode 100755 index 0000000..1a24852 --- /dev/null +++ b/hooks/on-finish @@ -0,0 +1 @@ +#!/bin/sh diff --git a/hooks/on-start b/hooks/on-start new file mode 100755 index 0000000..01b289f --- /dev/null +++ b/hooks/on-start @@ -0,0 +1,11 @@ +#!/bin/sh + +if ! apt-get update >/dev/null 2>/dev/null; then + printf "La mise à jour de la liste des paquets à échoué.\n" +fi + +if ! which envsubst 2>/dev/null >/dev/null; then + printf "Le programme \`envsubst\` est nécessaire. Installer \`gettext-base\`.\n" + + exit 1 +fi diff --git a/report b/report new file mode 100755 index 0000000..390d0bc --- /dev/null +++ b/report @@ -0,0 +1,45 @@ +#!/bin/sh + +PATH=/usr/sbin:/usr/bin:/sbin:/bin + +export _SCRIPT_NAME="$(realpath "$0")" +export _SCRIPT_PATH="$(dirname "$_SCRIPT_NAME")" + +# export EMAIL_RECIPIENT=you@example.com +# export EMAIL_SENDER=system@example.com +# export EMAIL_SUBJECT="[$(hostname)] Rapport journalier" + +# export HTML_OUTPUT=/tmp/report.html +# export MUNIN_DIRECTORY=/var/cache/munin/www/localhost/localhost +# export SMART_DEVICES="/dev/sda /dev/sdb /dev/sdc" + +if [ -z "$TEMPLATE" ]; then + export TEMPLATE="$_SCRIPT_PATH/templates/deblan" +fi + +cd "$_SCRIPT_PATH" + +./hooks/on-start + +REPORT="$( + ./scripts/header + ./scripts/system + ./scripts/mount + ./scripts/df + ./scripts/smart + ./scripts/footer +)" + +if [ -n "$HTML_OUTPUT" ]; then + export REPORT + + ./scripts/html +fi + +if [ -n "$EMAIL_RECIPIENT" ]; then + export REPORT + + ./scripts/email +fi + +./hooks/on-finish diff --git a/scripts/df b/scripts/df new file mode 100755 index 0000000..1ee47f4 --- /dev/null +++ b/scripts/df @@ -0,0 +1,8 @@ +#!/bin/sh + +. ./helpers/template +. ./helpers/df + +export df="$(get_df)" + +render_template df diff --git a/scripts/email b/scripts/email new file mode 100755 index 0000000..6395ad9 --- /dev/null +++ b/scripts/email @@ -0,0 +1,22 @@ +#!/bin/sh + +. ./helpers/template + +export BOUNDARY="-$(date | md5sum | cut -d ' ' -f 1)" + +( + render_template mail + + if [ -n "$MUNIN_DIRECTORY" -a -d "$MUNIN_DIRECTORY" ]; then + cd "$MUNIN_DIRECTORY" + + for file in *day.png; do + export file + export base64="$(base64 "$file")" + + render_template mail-png-attachment + done + fi + + printf "\n--%s--\n" "$BOUNDARY" +)| sendmail "$EMAIL_RECIPIENT" diff --git a/scripts/footer b/scripts/footer new file mode 100755 index 0000000..94fa2bc --- /dev/null +++ b/scripts/footer @@ -0,0 +1,5 @@ +#!/bin/sh + +. ./helpers/template + +render_template footer diff --git a/scripts/header b/scripts/header new file mode 100755 index 0000000..f83cb31 --- /dev/null +++ b/scripts/header @@ -0,0 +1,10 @@ +#!/bin/sh + +. ./helpers/template +. ./helpers/hostname +. ./helpers/date + +export hostname="$(get_hostname)" +export date="$(get_date)" + +render_template header diff --git a/scripts/html b/scripts/html new file mode 100755 index 0000000..6cb6fc2 --- /dev/null +++ b/scripts/html @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./helpers/template + +export content="$REPORT" + +render_template plain > "$HTML_OUTPUT" diff --git a/scripts/mount b/scripts/mount new file mode 100755 index 0000000..b6369cd --- /dev/null +++ b/scripts/mount @@ -0,0 +1,8 @@ +#!/bin/sh + +. ./helpers/template +. ./helpers/mount + +export mount="$(get_mount)" + +render_template mount diff --git a/scripts/smart b/scripts/smart new file mode 100755 index 0000000..2a7c839 --- /dev/null +++ b/scripts/smart @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./helpers/template +. ./helpers/smart + +for device in $SMART_DEVICES; do + export device + export result="$(get_smart "$device")" + + render_template smart +done + diff --git a/scripts/system b/scripts/system new file mode 100755 index 0000000..590ba4d --- /dev/null +++ b/scripts/system @@ -0,0 +1,22 @@ +#!/bin/sh + +. ./helpers/template +. ./helpers/uptime +. ./helpers/apt + +updates=$(get_updates) + +export uptime="$(get_uptime)" + +if [ $updates -gt 1 ]; then + export apt_color="#ff5e1e" + export apt_text="$(printf "%d paquets à mettre à jour" $updates)" +elif [ $updates -eq 1 ]; then + export apt_color="#ff5e1e" + export apt_text="$(printf "%d paquet à mettre à jour" $updates)" +else + export apt_color="#77c81b" + export apt_text="Système à jour" +fi + +render_template system diff --git a/templates/deblan/df.tpl b/templates/deblan/df.tpl new file mode 100644 index 0000000..4671c5c --- /dev/null +++ b/templates/deblan/df.tpl @@ -0,0 +1,7 @@ +
+ Espace(s) disque(s) +
+ +
+
${df}
+
diff --git a/templates/deblan/footer.tpl b/templates/deblan/footer.tpl new file mode 100644 index 0000000..c7a2628 --- /dev/null +++ b/templates/deblan/footer.tpl @@ -0,0 +1,3 @@ + + + diff --git a/templates/deblan/header.tpl b/templates/deblan/header.tpl new file mode 100644 index 0000000..835c82a --- /dev/null +++ b/templates/deblan/header.tpl @@ -0,0 +1,62 @@ + + + + + + + +
+ + + + + + +
+ + +
    +
  • ${hostname}
  • +
  • ${date}
  • +
+
+
diff --git a/templates/deblan/mail-png-attachment.tpl b/templates/deblan/mail-png-attachment.tpl new file mode 100644 index 0000000..be0b536 --- /dev/null +++ b/templates/deblan/mail-png-attachment.tpl @@ -0,0 +1,9 @@ +--${BOUNDARY} +Content-type: image/png; + name="${file}" +Content-Transfer-Encoding: base64 +Content-ID: <${file}> +Content-Disposition: attachement; + filename="${file}" + +${base64} diff --git a/templates/deblan/mail.tpl b/templates/deblan/mail.tpl new file mode 100644 index 0000000..0b7ac38 --- /dev/null +++ b/templates/deblan/mail.tpl @@ -0,0 +1,10 @@ +From: ${EMAIL_SENDER} +To: ${EMAIL_RECIPIENT} +Subject: ${EMAIL_RECIPIENT} +Content-type: multipart/mixed; + boundary="${BOUNDARY}" +--$BOUNDARY +Content-Type: text/html; charset=UTF-8 +Content-Transfer-Encoding: 7bit + +${REPORT} diff --git a/templates/deblan/mount.tpl b/templates/deblan/mount.tpl new file mode 100644 index 0000000..fb0a321 --- /dev/null +++ b/templates/deblan/mount.tpl @@ -0,0 +1,7 @@ +
+ Point(s) de montage(s) +
+ +
+
${mount}
+
diff --git a/templates/deblan/plain.tpl b/templates/deblan/plain.tpl new file mode 100644 index 0000000..41b2321 --- /dev/null +++ b/templates/deblan/plain.tpl @@ -0,0 +1 @@ +${content} diff --git a/templates/deblan/smart.tpl b/templates/deblan/smart.tpl new file mode 100644 index 0000000..30627bc --- /dev/null +++ b/templates/deblan/smart.tpl @@ -0,0 +1,7 @@ +
+ Smart ${device} +
+ +
+
${result}
+
diff --git a/templates/deblan/system.tpl b/templates/deblan/system.tpl new file mode 100644 index 0000000..73ca9b7 --- /dev/null +++ b/templates/deblan/system.tpl @@ -0,0 +1,9 @@ +
+ Système +
+ +
+ ${apt_text} + +
${uptime}
+