Browse Source

Umstellung auf CLI

master
Andre Knieschewski 1 week ago
parent
commit
1fac3a89c0
  1. 7
      _.mailrc
  2. 96
      env/BI_ENV.sam
  3. 304
      update/hisinone_bi_qisserver/modules_update.sh
  4. 34
      update/modules_update_cron.sh.sam

7
_.mailrc

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
set v15-compat
account superx_mailversand {
set from="SuperX APP <superx-app@uni-musterstadt.de>"
set mta=smtp://<<BENUTZERNAME>>:<<PASSWORT>>@<<SMPT-SERVER>>:587
set smtp-use-starttls
}

96
env/BI_ENV.sam vendored

@ -1,39 +1,81 @@ @@ -1,39 +1,81 @@
#!/bin/bash
#
# BI_ENV – gemeinsame Umgebung für BI-Update-/Upgrade-Skripte
# Dieses Skript wird von den BI-Skripten per ". /pfad/BI_ENV" eingebunden
# und setzt alle notwendigen Umgebungsvariablen.
#BI Environment (Muster für Tomcat9 unter Ubuntu)
WEBAPP=/var/lib/tomcat9/webapps/superx
export WEBAPP
#Hier werden die zu verwendende Module aufgelistet.
#Nur den Modulnamen in Kleinbuchstaben
#export BI_UPGRADE_MODULES="kern cob sos sva kenn"
#Module Liste:
#Hier werden die zu verwendende Module aufgelistet.
#Nur den Modulnamen:ULR in Kleinbuchstaben, z.B.:
#export BI_UPDATE_MODULES="sos:trans_pruefungen_1_sospos sos:trans_pruefungen_2 sos:trans_pruefungen_3 sos gang"
#Beispielaufruf:
#export BI_UPDATE_MODULES="sos gang"
LOGPFAD=/var/log/tomcat9
export LOGPFAD
#Mailprogramm:
export MAILPROG=s-nail
#Der Anhang wird bei s-nail mit -a und bei mail mit -A definiert
export MAIL_APPEND="-a"
export LOGMAIL=superx@localhost
#RAM für Java:
MEM=2000M
export MEM
########## Java-Konfiguration ##########
# Java (hier: OpenJDK 17 unter Ubuntu)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME="$JAVA_HOME"
export PATH="$JAVA_HOME/bin:$PATH"
# Java-Optionen
export JAVA_OPTS="-Xmx1520M -Djava.awt.headless=true \
-DHIS1_DATABASES_PROPERTIES=/home/superx/git/Memtext-Interna/devel_module/kern/tomcat_superx_git/dq/his1_databases_eduetl_only.properties \
--add-opens java.naming/com.sun.jndi.ldap=ALL-UNNAMED \
--add-opens java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED \
--add-opens java.base/javax.crypto=ALL-UNNAMED \
--add-opens java.base/java.util.stream=ALL-UNNAMED \
--add-opens java.base/java.util=ALL-UNNAMED \
--add-opens java.base/java.net=ALL-UNNAMED \
--add-opens java.base/java.io=ALL-UNNAMED \
--add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.math=ALL-UNNAMED"
########## SuperX / Tomcat-Pfade ##########
# Basis-Webapp-Verzeichnis von SuperX
export WEBAPP=/var/lib/tomcat10/webapps/superx
# Konfigurationsverzeichnis für BI / edustore
export SUPERX_DIR="$WEBAPP/WEB-INF/conf/edustore"
########## Modul-Listen ##########
# Durch Leerzeichen getrennt, nur Kleinbuchstaben.
# export BI_UPGRADE_MODULES="kern cob sos sva kenn"
export BI_UPGRADE_MODULES="kenn"
export BI_UPDATE_MODULES="kenn"
########## Logging / Mail ##########
# Logverzeichnis (für Master- und Modul-Logs)
export LOGPFAD="$WEBAPP/WEB-INF/logs"
# Standard-Mailadressen für den Update-/Fehlerbericht
# - LOGMAIL: Empfänger für reguläre Erfolgs- und Statusmeldungen
# - ERRORMAIL: Empfänger für Fehlermeldungen
#
# Falls ausschließlich Fehlermeldungen verschickt werden sollen,
# LOGMAIL einfach leer lassen:
# export LOGMAIL=""
#
# Mehrfachempfänger können über Leerzeichen angegeben werden:
# export ERRORMAIL="admin@hs.de support@hs.de"
#
# Hinweis:
# LOGMAIL überschreibt ERRORMAIL nicht, sondern ergänzt:
# - Erfolgsfall → Mail an LOGMAIL (nur, wenn gesetzt)
# - Fehlerfall → Mail an ERRORMAIL, falls vorhanden, sonst an LOGMAIL
# Mailprogramm (s-nail mit vorkonfiguriertem Account 'superx_mailversand')
export MAILPROG='s-nail --account=superx_mailversand -S ttycharset=utf-8 -S sendcharset=utf-8'
# Betreff-Bausteine
export MAIL_BETREFF_UPDATE="BI Job Update"
export MAIL_BETREFF_UPGRADE="BI Job Upgrade"
export MAIL_BETREFF_SUFFIX_ERFOLGREICH=" - Erfolgreich"
export MAIL_BETREFF_SUFFIX_FEHLER=" - Fehler"
#Speziell für HISinOne-BI:
########## Zusatz-Pfade ##########
# Optional: zusätzlicher bin-Pfad relativ zum BI-Skript (falls dort Tools liegen)
PATH="$PATH:../bin"
export PATH
#Speziell für HISinOne-BI:
QISSERVER_PFAD=$WEBAPP/../qisserver
QISSERVER_LIB_PFAD=$QISSERVER_PFAD/WEB-INF/lib
QIS_CLASSPATH="$WEBAPP/WEB-INF/lib_ext/servlet-api.jar:$QISSERVER_PFAD/WEB-INF/classes" ; for i in `ls $QISSERVER_LIB_PFAD/*.jar` ; do QIS_CLASSPATH=$QIS_CLASSPATH:$i ; done

304
update/hisinone_bi_qisserver/modules_update.sh

@ -1,67 +1,263 @@ @@ -1,67 +1,263 @@
#!/bin/bash
#Variablen und Umgebung setzen:
MASTERLOG=$LOGPFAD/bi_update.log
#
# modules_update.sh
#
# Führt BI-Updatejobs für alle in BI_UPDATE_MODULES definierten Module aus.
# Erwartet, dass vorher BI_ENV gesourced wurde (JAVA_HOME, WEBAPP, LOGPFAD,
# BI_UPDATE_MODULES, MAILPROG, LOGMAIL, ERRORMAIL, MAIL_BETREFF_*,
# sowie die Mapping-Tabelle SYSTEMINFO_MAP in der BI_ENV).
#
# Die wichtigsten Variablen werden im Startcheck geprüft. Fehlt etwas,
# wird – sofern konfiguriert – eine Fehlermail verschickt und das Skript beendet.
#erzeuge Logs Verzeichnis wenn es noch nicht existiert:
mkdir -p $LOGPFAD
set -u
ERROR_FLAG=0
ERROR_LOG=""
#######################################
# Modul → systeminfo_id Mapping
#######################################
declare -A SYSTEMINFO_MAP=(
[gang]=121
[cob]=10
[zul]=130
[man]=200
[sos]=7
[erfolg]=120
[rpta]=330
[etl]=270
[kern]=9
[kenn]=109
[ivs]=140
[bau]=4
[fin]=3
[lm]=300
[sva]=6
)
executeUpdate()
{
JOB=$1
LOGPFAD=$2
MYMASTERLOG=$3
MODUL=$JOB
MODUL_UPPER=`echo $MODUL | tr [a-z] [A-Z]`
JOBLOG=$LOGPFAD/"$JOB"_update.log
echo "" >>$MYMASTERLOG
echo "--- Start Update für: $JOB ---" >>$MYMASTERLOG
date >>$MYMASTERLOG
echo java -Xmx${MEM} -cp "...CLASSPATH" -Dfile.encoding=UTF-8 de.his.edustore.modules.WebFrontendForModuleUpdate $JOB true '$SUPERX_DIR='$WEBAPP'/WEB-INF/conf/edustore $'$MODUL_UPPER'_LOAD_PFAD='$WEBAPP'/WEB-INF/conf/edustore/db/module/'$MODUL'/rohdaten $'$MODUL_UPPER'_PFAD='$WEBAPP'/WEB-INF/conf/edustore/db/module/'$MODUL >$JOBLOG 2>&1
java -Xmx${MEM} -cp "$QIS_CLASSPATH" -Dfile.encoding=UTF-8 de.his.edustore.modules.WebFrontendForModuleUpdate $JOB true '$SUPERX_DIR='$WEBAPP'/WEB-INF/conf/edustore $'$MODUL_UPPER'_LOAD_PFAD='$WEBAPP'/WEB-INF/conf/edustore/db/module/'$MODUL'/rohdaten $'$MODUL_UPPER'_PFAD='$WEBAPP'/WEB-INF/conf/edustore/db/module/'$MODUL >>$JOBLOG 2>&1
RETURN_CODE=$?
echo "Returncode von dem Job des Moduls $JOB ist: $RETURN_CODE" >>$MYMASTERLOG
date >>$MYMASTERLOG
if [ $RETURN_CODE -eq 0 ]
then
echo "--- Ende Update von $JOB: erfolgreich ---" >>$MYMASTERLOG
########## Hilfsfunktionen für Mailversand ##########
# Log-Mail (Erfolgsfall) – nur, wenn MAILPROG und LOGMAIL gesetzt sind
send_log_mail() {
local subject="$1"
local body_file="$2"
if [ -n "${MAILPROG:-}" ] && [ -n "${LOGMAIL:-}" ]; then
$MAILPROG -s "$subject" "$LOGMAIL" <"$body_file"
fi
}
# Fehlermail – bevorzugt an ERRORMAIL, sonst an LOGMAIL
# Zusätzliche Parameter (ab $3) werden direkt an MAILPROG weitergereicht (z.B. -a <file>)
send_error_mail() {
local subject="$1"
local body_file="$2"
shift 2
local recipient=""
if [ -n "${ERRORMAIL:-}" ]; then
recipient="$ERRORMAIL"
elif [ -n "${LOGMAIL:-}" ]; then
recipient="$LOGMAIL"
fi
if [ -n "${MAILPROG:-}" ] && [ -n "$recipient" ]; then
$MAILPROG -s "$subject" "$@" "$recipient" <"$body_file"
fi
}
########## Startcheck – minimale Grundprüfung ##########
startcheck_var() {
local varname="$1"
local value="${!varname:-}"
if [ -z "$value" ]; then
# Startcheck-Fehler in temporärer Logdatei protokollieren
local tmpfile="/tmp/bi_update_startcheck_${varname}.log"
{
echo "Startcheck: Variable $varname fehlt oder ist leer. (Quelle: BI_ENV)"
echo "Hinweis: Der Wert wird normalerweise in der BI_ENV gepflegt."
date
} >"$tmpfile"
# Fehlermail (optional) schicken
send_error_mail "BI Update Startcheck Fehler: $varname fehlt" "$tmpfile"
echo "FEHLER: Startcheck gescheitert – Variable $varname fehlt oder ist leer."
echo "Hinweis: Der Wert wird normalerweise in der BI_ENV gepflegt."
exit 1
fi
}
# Startcheck: Pflichtvariablen aus BI_ENV
startcheck_var "WEBAPP"
startcheck_var "LOGPFAD"
startcheck_var "BI_UPDATE_MODULES"
########## DOQUERY prüfen (über $PATH) ##########
# DOQUERY wird nur verwendet, wenn es im PATH gefunden wird.
# Ist es nicht vorhanden, wird die DB-Protokollierung vollständig übersprungen.
DOQUERY_AVAILABLE=0
DOQUERY_CMD=""
if command -v DOQUERY >/dev/null 2>&1; then
DOQUERY_AVAILABLE=1
DOQUERY_CMD="DOQUERY"
else
echo ">>>> Achtung: Das Update des Modules $JOB wurde mit einem Fehler beendet! <<<<" >> $MYMASTERLOG
echo "--- Ende des Updates vom Modul $JOB mit Fehler ---" >>$MYMASTERLOG
ERROR_FLAG=1
echo "Hinweis: DOQUERY nicht im PATH gefunden – DB-Protokollierung deaktiviert."
fi
ERROR_LOG+=" $MAIL_APPEND $JOBLOG"
echo "" >>$MYMASTERLOG
########## Logging vorbereiten ##########
MASTERLOG="$LOGPFAD/bi_update.log"
mkdir -p "$LOGPFAD"
ERROR_FLAG=0
ERROR_LOG_FILES=() # Liste der Modul-Logfiles mit Fehlern
########## Funktion: Modul-Update ausführen ##########
run_module_update() {
local module="$1"
local log_dir="$2"
local masterlog="$3"
local module_upper
module_upper=$(echo "$module" | tr '[:lower:]' '[:upper:]')
local joblog="$log_dir/${module}_update.log"
local start_ts
local end_ts
start_ts=$(date '+%Y-%m-%d %H:%M:%S%z')
{
echo
echo "--- Start Update für Modul: $module ($module_upper) ---"
date
} >>"$masterlog"
########## DB-Protokollierung: Start ##########
if [ $DOQUERY_AVAILABLE -eq 1 ]; then
# Standardwert 0, falls Mapping nicht vorhanden ist
local sys_id="0"
# Prüfen, ob SYSTEMINFO_MAP existiert (kommt aus BI_ENV)
if declare -p SYSTEMINFO_MAP >/dev/null 2>&1; then
sys_id="${SYSTEMINFO_MAP[$module]:-0}"
fi
$DOQUERY_CMD "
INSERT INTO update_prot (systeminfo_id, update_entity, update_id, update_time)
VALUES ($sys_id, '$module', -10000, '$start_ts');
" >>"$masterlog" 2>&1 || echo "WARNUNG: DB-Insert für Modul $module fehlgeschlagen." >>"$masterlog"
fi
########## DB-Protokollierung: Start ENDE ##########
# Java-Job ausführen, Fehler kontrolliert auswerten
local rc=0
if ! java ${JAVA_OPTS:-} \
-classpath "$WEBAPP/WEB-INF/classes:$WEBAPP/WEB-INF/lib/*:$WEBAPP/WEB-INF/lib_ext/*" \
de.superx.bin.ComponentAdminCLI -e "$module" \
>>"$joblog" 2>&1
then
rc=$?
fi
end_ts=$(date '+%Y-%m-%d %H:%M:%S%z')
{
echo "Returncode des Moduls $module: $rc"
date
} >>"$masterlog"
if [ "$rc" -eq 0 ]; then
echo "--- Ende Update von $module: ERFOLGREICH ---" >>"$masterlog"
########## DB-Protokollierung: Erfolg ##########
if [ $DOQUERY_AVAILABLE -eq 1 ]; then
$DOQUERY_CMD "
UPDATE update_prot
SET updated_at = '$end_ts',
update_id = -10000
WHERE tid = (
SELECT tid
FROM update_prot
WHERE update_entity = '$module'
AND updated_at IS NULL
ORDER BY tid DESC
LIMIT 1
);
" >>"$masterlog" 2>&1 || echo "WARNUNG: DB-Update (Erfolg) für Modul $module fehlgeschlagen." >>"$masterlog"
fi
########## DB-Protokollierung: Erfolg ENDE ##########
else
echo ">>>> ACHTUNG: Update des Moduls $module wurde mit einem FEHLER beendet! <<<<" >>"$masterlog"
echo "--- Ende Update von $module: FEHLER ---" >>"$masterlog"
ERROR_FLAG=1
ERROR_LOG_FILES+=("$joblog")
########## DB-Protokollierung: Fehler ##########
if [ $DOQUERY_AVAILABLE -eq 1 ]; then
$DOQUERY_CMD "
UPDATE update_prot
SET updated_at = '$end_ts',
update_id = -10001
WHERE tid = (
SELECT tid
FROM update_prot
WHERE update_entity = '$module'
AND updated_at IS NULL
ORDER BY tid DESC
LIMIT 1
);
" >>"$masterlog" 2>&1 || echo "WARNUNG: DB-Update (Fehler) für Modul $module fehlgeschlagen." >>"$masterlog"
fi
########## DB-Protokollierung: Fehler ENDE ##########
fi
echo >>"$masterlog"
}
# Schleife über Updates:
########## Schleife über alle Module ##########
{
echo "Starte BI-Updates für folgende Module: $BI_UPDATE_MODULES"
date
echo "######################################"
echo
} >"$MASTERLOG"
echo "Starte BI-Jobs für die Module: $BI_UPDATE_MODULES" >$MASTERLOG
date >>$MASTERLOG
echo -e "######################################\n\n" >>$MASTERLOG
for JOB_SINGLE in ${BI_UPDATE_MODULES[@]} ; do
executeUpdate $JOB_SINGLE $LOGPFAD $MASTERLOG
for module in $BI_UPDATE_MODULES; do
run_module_update "$module" "$LOGPFAD" "$MASTERLOG"
done
echo -e "\n\n######################################" >>$MASTERLOG
echo -e "-- Ende BI update `date`\n\n" >>$MASTERLOG
# Mailversand
if [ $ERROR_FLAG -eq 0 ]
then
if [ "$MAILPROG" != "" ]
then
$MAILPROG -s "$MAIL_BETREFF_UPDATE$MAIL_BETREFF_SUFFIX_ERFOLGREICH" $LOGMAIL <$MYMASTERLOG
fi
{
echo
echo "######################################"
echo "-- Ende BI Update $(date)"
echo
} >>"$MASTERLOG"
########## Mailversand (optional) ##########
if [ "$ERROR_FLAG" -eq 0 ]; then
# Erfolgreich → Log-Mail an LOGMAIL (falls konfiguriert)
send_log_mail \
"${MAIL_BETREFF_UPDATE:-BI Job Update}${MAIL_BETREFF_SUFFIX_ERFOLGREICH:-}" \
"$MASTERLOG"
else
if [ "$MAILPROG" != "" ]
then
echo "Sende Logmail an $LOGMAIL"
$MAILPROG -s "$MAIL_BETREFF_UPDATE$MAIL_BETREFF_SUFFIX_FEHLER" $ERROR_LOG $LOGMAIL <$MYMASTERLOG
fi
echo "Sende Fehler-Logmail (falls konfiguriert)."
# Attachments für fehlerhafte Modul-Logs vorbereiten (s-nail: -a DATEI)
attach_args=()
for f in "${ERROR_LOG_FILES[@]}"; do
[ -f "$f" ] && attach_args+=("-a" "$f")
done
# Fehlerfall → Fehlermail an ERRORMAIL (oder Fallback LOGMAIL), mit Attachments
send_error_mail \
"${MAIL_BETREFF_UPDATE:-BI Job Update}${MAIL_BETREFF_SUFFIX_FEHLER:-}" \
"$MASTERLOG" \
"${attach_args[@]}"
fi

34
update/modules_update_cron.sh.sam

@ -1,10 +1,28 @@ @@ -1,10 +1,28 @@
#!/bin/bash
#Bitte umbenennen nach modules_update_cron.sh
#Und den Pfad /var/lib/tomcat9... anpassen:
#in crontab:
# Werktäglicher BI-Update um 18 Uhr
#0 18 * * 1-5 /var/lib/tomcat9/BI_Maintenance/update/modules_update_cron.sh >/var/lib/tomcat9/BI_Maintenance/update/hisinone_bi_qisserver/modules_update.log 2>&1
. /var/lib/tomcat9/BI_Maintenance/env/BI_ENV
#bei Nutzung H1-Qisserver:
#/var/lib/tomcat9/BI_Maintenance/update/hisinone_bi_qisserver/modules_update.sh >/var/lib/tomcat9/BI_Maintenance/update/hisinone_bi_qisserver/modules_update.log 2>&1
#
# modules_update_cron.sh
#
# Wrapper-Skript für den Cronjob.
# Wird typischerweise aus /etc/crontab oder via "crontab -e" aufgerufen.
#
# Beispiel (werktags 18:00 Uhr):
# 0 18 * * 1-5 /var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/update/hisinone_bi_qisserver/modules_update_cron.sh
set -e
ENV_FILE="/var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/env/BI_ENV"
MAIN_SCRIPT="/var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/update/hisinone_bi_qisserver/modules_update.sh"
CRONLOG="/var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/update/hisinone_bi_qisserver/modules_update.log"
# Prüfen, ob ENV vorhanden ist
if [ ! -f "$ENV_FILE" ]; then
echo "FEHLER: ENV-Datei nicht gefunden: $ENV_FILE" >&2
exit 1
fi
# Umgebung laden
# shellcheck source=/dev/null
. "$ENV_FILE"
# Hauptskript ausführen, Ausgabe ins Cron-Log
"$MAIN_SCRIPT" >>"$CRONLOG" 2>&1

Loading…
Cancel
Save