#!/bin/bash
#
# delete_old_loggings
#
# Alle Loggingdatensaetze loeschen, die nach den Eintraegen in den section, server,
# teststep-Tabellen geloescht werden koennen
#
###############################################################################
#
if [[ -f /etc/ulsserver.conf ]]
 then
  . /etc/ulsserver.conf
fi
if [[ -z "$ULSNAME" ]]
 then
  ULSNAME=`hostname`
fi
#
RET=0
#
exec 2>&1
#
cd `dirname $0`
#
if [[ -f ../database.conf ]]
 then
  . ../database.conf
fi
MYSQL="/usr/bin/mysql -vvv -h ${LOGGINGADMINHOST:-localhost} -u loggingadmin -p$LOGGINGADMINPWD logging"
MYSQLO="/usr/bin/mysql -B -N -h ${LOGGINGADMINHOST:-localhost} -u loggingadmin -p$LOGGINGADMINPWD logging"
#
#
# Alle Werte Datensaetze, die gloescht werden koennen, loeschen
#
date '+%T Werte werden geloescht und optimiert'
$MYSQL -e "call cleanvalues()" || RET=1
date '+%T Werte geloescht und optimiert'
#
#
# Server aktivieren, die auf "no alarms" stehen und lange genug Werte haben
date '+%T Server aktiveren'
$MYSQL -e "call activateserver()" || RET=1
#
#
# Tabelle server optimieren
$MYSQL -e "optimize table server" || RET=1
date '+%T server optimiert'
#
#
# Komprimierte Werte mit lwertezeiten loeschen
#
date '+%T lwerte und lwertezeiten werden geloescht'
$MYSQL -e "call cleanlwerte()" || RET=1
date '+%T lwerte und lwertezeiten geloescht'
#
# Alle Datensaetze aus lwerteindizes bestimmen, die gloescht werden koennen
#
STS=`date '+%s'`
date '+%T LWerteindizes werden geloescht'
$MYSQL -e "call cleanlwerteindizes()" || RET=1
date '+%T LWerteindizes geloescht'
sleep $(( `date '+%s'` - $STS ))
#
#
# komprimierungids Datensaetze loeschen, die keine Entsprechung in lwerteindizes haben
#
date '+%T Komprimierungids werden geloescht'
$MYSQL -e "delete komprimierungids from komprimierungids left join lwerteindizes on komprimierungids.lwerteindizesID=lwerteindizes.ID where lwerteindizes.ID is NULL" || RET=1
date '+%T Komprimierungids geloescht'
$MYSQL -e "optimize table komprimierungids" || RET=1
date '+%T Komprimierungids optimiert'
#
#
# Alle Datensaetze aus werteindizes bestimmen, die gloescht werden koennen
#
STS=`date '+%s'`
date '+%T Werteindizes werden geloescht'
$MYSQL -e "call cleanwerteindizes()" || RET=1
date '+%T Werteindizes geloescht'
$MYSQL -e "optimize table werteindizes" || RET=1
date '+%T Werteindizes optimiert'
sleep $(( `date '+%s'` - $STS ))
#
#
# Datensaetze aus winames loeschen, die keine Entsprechung in werteindizes haben
#
date '+%T winames werden geloescht'
$MYSQL -e "delete winames from winames left join werteindizes on winames.ID=werteindizes.ID where werteindizes.ID is NULL" || RET=1
date '+%T winames geloescht'
$MYSQL -e "optimize table winames" || RET=1
date '+%T winames optimiert'
#
#
# Section, Teststep, Details und Einheiten Datensaetze loeschen,
# die keine Entsprechung in werteindizes haben
#
STS=`date '+%s'`
date '+%T Sections, Teststeps, Details und Einheiten werden geloescht'
$MYSQL -e "call cleansectstdeteh()" || RET=1
date '+%T Sections, Teststeps, Details und Einheiten geloescht'
$MYSQL -e "optimize table section" || RET=1
date '+%T Sections optimiert'
$MYSQL -e "optimize table teststep" || RET=1
date '+%T teststeps optimiert'
$MYSQL -e "optimize table teststepdetails" || RET=1
date '+%T Teststepdetails optimiert'
$MYSQL -e "optimize table einheiten" || RET=1
date '+%T Einheiten optimiert'
sleep $(( `date '+%s'` - $STS ))
#
#
#
# Isalive Datensaetze loeschen, die keine Entsprechung in werteindizes haben
#
date '+%T Isalive werden geloescht'
$MYSQL -e "delete isalive from isalive left join werteindizes on isalive.werteindizesID=werteindizes.ID where werteindizes.ID is NULL" || RET=1
date '+%T Isalive geloescht'
$MYSQL -e "optimize table isalive" || RET=1
date '+%T Isalive optimiert'
#
#
# Limits Datensaetze loeschen, die keine Entsprechung in werteindizes haben
#
date '+%T Limits werden geloescht'
$MYSQL -e "delete wertelimits from wertelimits left join werteindizes on werteindizesID=werteindizes.ID where werteindizes.ID is NULL" || RET=1
date '+%T Limits geloescht'
$MYSQL -e "optimize table wertelimits" || RET=1
date '+%T Limits optimiert'
#
#
# Kombilimits loeschen
#
date '+%T kombilimits werden geloescht'
$MYSQL -e "call cleancombilimits()" || RET=1
date '+%T kombilimits geloescht'
$MYSQL -e "optimize table kombilimits" || RET=1
date '+%T kombilimits optimiert'
#
#
# Kombidetails loeschen
#
date '+%T kombidetails werden geloescht'
$MYSQL -e "call cleancombidetails()" || RET=1
date '+%T kombidetails geloescht'
$MYSQL -e "optimize table kombidetails" || RET=1
date '+%T kombidetails optimiert'
#
#
# compr. Kombidetails loeschen
#
date '+%T clean compr. combidetails'
$MYSQL -e "call cleanccdetails()" || RET=1
date '+%T compr.combidetails cleaned'
$MYSQL -e "optimize table ccdetails" || RET=1
date '+%T compr. combidetails optimized'
#
#
# letztewerte Datensaetze loeschen, die keine Entsprechung in werteindizes haben
#
STS=`date '+%s'`
date '+%T Letztewerte werden geloescht'
$MYSQL -e "delete letztewerte from letztewerte left join werteindizes on letztewerte.ID=werteindizes.ID where werteindizes.ID is NULL" || RET=1
$MYSQL -e "delete lastvaluesc from lastvaluesc left join werteindizes on lastvaluesc.ID=werteindizes.ID where werteindizes.ID is NULL" || RET=1
date '+%T Letztewerte geloescht'
$MYSQL -e "optimize table letztewerte" || RET=1
$MYSQL -e "optimize table lastvaluesc" || RET=1
date '+%T Letztewerte optimiert'
sleep $(( `date '+%s'` - $STS ))
#
# letztewerte Datensaetze anlegen, wenn verloren gegangen
$MYSQL -e "insert ignore into letztewerte (ID) select ID from werteindizes" || RET=1
#
#
# ServerSectionTeststepBeschreibungen loeschen, die keine Entsprechung in werteindizes
# haben
#
date '+%T sstBeschreibungen werden geloescht'
$MYSQL -e "delete sstbeschreibung from sstbeschreibung left join werteindizes as w using(serverID,sectionID,teststepID) where w.serverID is NULL" || RET=1
date '+%T sstBeschreibungen geloescht'
$MYSQL -e "optimize table sstbeschreibung" || RET=1
date '+%T sstBeschreibungen optimiert'
#
#
# ServerSectionBeschreibungen loeschen, die keine Entsprechung in werteindizes
# haben
#
date '+%T ssremarks werden geloescht'
$MYSQL -e "delete ssremarks from ssremarks left join werteindizes as w using(serverID,sectionID) where w.serverID is NULL" || RET=1
date '+%T ssremarks geloescht'
$MYSQL -e "optimize table ssremarks" || RET=1
date '+%T ssremarks optimiert'
#
#
# Autoaufbewahrung loeschen, zu denen es kein Verfahren mehr gibt
#
date '+%T autoaufbewahrung werden geloescht'
$MYSQL -e "delete autoaufbewahrung from autoaufbewahrung left join verfahren on verfahrenID=verfahren.ID where verfahren.ID is NULL" || RET=1
date '+%T autoaufbewahrung geloescht'
$MYSQL -e "optimize table autoaufbewahrung" || RET=1
date '+%T autoaufbewahrung optimiert'
#
#
#
# Autoisalive loeschen, zu denen es kein Verfahren mehr gibt
#
date '+%T  autoisalive werden geloescht'
$MYSQL -e "delete autoisalive from autoisalive left join verfahren on verfahrenID=verfahren.ID where verfahren.ID is NULL" || RET=1
date '+%T autoisalive geloescht'
$MYSQL -e "optimize table autoisalive" || RET=1
date '+%T autoisalive optimiert'
#
#
# Autokomprimierung loeschen, zu denen es kein Verfahren mehr gibt
#
date '+%T autokomprimierung werden geloescht'
$MYSQL -e "delete autokomprimierung from autokomprimierung left join verfahren on verfahrenID=verfahren.ID where verfahren.ID is NULL" || RET=1
date '+%T autokomprimierung geloescht'
$MYSQL -e "optimize table autokomprimierung" || RET=1
date '+%T autokomprimierung optimiert'
#
#
# Autolimits loeschen, zu denen es kein Verfahren mehr gibt
#
date '+%T autolimits werden geloescht'
$MYSQL -e "delete autolimits from autolimits left join verfahren on verfahrenID=verfahren.ID where verfahren.ID is NULL" || RET=1
date '+%T autolimits geloescht'
$MYSQL -e "optimize table autolimits" || RET=1
date '+%T autolimits optimiert'
#
#
# Beschreibungen loeschen, zu denen es keine Wertendizes mehr gibt
#
date '+%T beschreibung werden geloescht'
$MYSQL -e "delete beschreibung from beschreibung left join werteindizes on beschreibung.ID=werteindizes.ID where werteindizes.ID is NULL" || RET=1
date '+%T beschreibung geloescht'
$MYSQL -e "optimize table beschreibung" || RET=1
date '+%T beschreibung optimiert'
#
#
# Favoriten loeschen, zu denen es keinen User mehr gibt
#
date '+%T favoriten werden geloescht'
$MYSQL -e "delete favoriten from favoriten left join user on userID=user.ID where user.ID is NULL" || RET=1
date '+%T favoriten geloescht'
$MYSQL -e "optimize table favoriten" || RET=1
date '+%T favoriten optimiert'
#
#
# Reports loeschen, zu denen es keinen User mehr gibt
#
date '+%T reports werden geloescht'
$MYSQL -e "delete reports from reports left join user on userID=user.ID where userID > 0 and user.ID is NULL" || RET=1
$MYSQL -e "delete reports from reports left join gruppen on groupID=gruppen.ID where userID = 0 and gruppen.ID is NULL" || RET=1
date '+%T reports geloescht'
$MYSQL -e "optimize table reports" || RET=1
date '+%T reports optimiert'
#
#
# Reportdets loeschen, zu denen es keinen Report mehr gibt
#
date '+%T reportdets werden geloescht'
$MYSQL -e "delete reportdets from reportdets left join reports on reportsID=reports.ID where reports.ID is NULL" || RET=1
date '+%T reportdets geloescht'
$MYSQL -e "optimize table reportdets" || RET=1
date '+%T reportdets optimiert'
#
#
# Mailreports Datensaetze loeschen, die keine Entsprechung in reports haben
#
date '+%T Mailreports werden geloescht'
$MYSQL -e "delete mailreports from mailreports left join reports on reportsID=reports.ID where reports.ID is NULL" || RET=1
date '+%T Mailreports geloescht'
#
#
# Serverdoku loeschen, zu denen es keinen Server mehr gibt oder die Aufbewahrung
#   abgelaufen ist
date '+%T serverdoku werden geloescht'
$MYSQL -e "delete serverdoku from serverdoku left join server on serverID=server.ID where deldate < curdate() OR server.ID is NULL" || RET=1
date '+%T serverdoku geloescht'
$MYSQL -e "optimize table serverdoku" || RET=1
date '+%T serverdoku optimiert'
#
#
# UTT-Tickets auf geloest, zu denen es keinen Server mehr gibt
$MYSQL -e "update uttevent left join server on server.ID = serverID set uttevent.state = 'solved' where server.ID is NULL" || RET=1
#
#
# UTT-Tickets loeschen
#
date '+%T delete utts'
$MYSQL -e "call cleanutt()" || RET=1
date '+%T utts deleted'
#
#
# limgrpstats Tabellen bereinigen
date '+%T limgrpstat Tabellen bereinigen'
$MYSQL -e "call cleanlimgrpstats()" || RET=1
date '+%T limgrpstat Tabellen bereinigt'
#
#
# domstat Tabellen bereinigen
date '+%T domstat Tabellen bereinigen'
$MYSQL -e "call cleandomstats()" || RET=1
date '+%T domstat Tabellen bereinigt'
#
#
# changeprot
#
date '+%T changeprot wird geloescht'
$MYSQL -e "call cleanchangeprot()" || RET=1
date '+%T changeprot geloescht'
$MYSQL -e "optimize table changeprot" || RET=1
date '+%T changeprot optimiert'
#
#
# Ueberwachungspausen loeschen, die abgelaufen oder zu denen es kein Verfahren mehr gibt
# oder die keine Auwirkungen haben
# nur Samstags
if [[ $(date '+%u') = 6 ]]
 then
  date '+%T ueberwachungspausen werden geloescht'
  $MYSQL -e "call cleansuspensions()" || RET=1
  date '+%T ueberwachunspausen geloescht'
  $MYSQL -e "optimize table ueberwachungspausen" || RET=1
  date '+%T ueberwachunspausen optimiert'
fi
#
#
# daten
date '+%T ggf. daten optimieren'
for p in `$MYSQLO -e "select partition_name from information_schema.partitions where TABLE_SCHEMA='logging' and TABLE_NAME='daten' and PARTITION_NAME is not NULL order by DATA_FREE desc limit 7"`
 do
  STS=`date '+%s'`
  $MYSQL -e "alter table daten optimize partition $p" || RET=1
  sleep $(( ( `date '+%s'` - $STS ) / 2 ))
done
date '+%T daten optimiert'
#
exit $RET
