#!/bin/bash
#
# test_db_sample
#
# Beispiel zum Schreiben eignener ULS-Agenten
# um Abfragen aus DBs (am Beispiel von mysql/mariadb)
# an ULS zu senden
#
# für dieses Beispiel muss eine Datei mysql.cnf
# mit den Zugangsdaten zur DB angelegt werden.
# Der Inhalt ist etwa:
#
# [client]
# host=instanz-ip|instanz-ip-name
# port=3306
# user=myusername
# password="my password"
#
# Vorgehen
# die Daten werden durch das SED Skript ins
# ULS-Value-File Format umgewandelt und per
# send_test_tab direkt an den ULS-Server versendet
#
# Das ULS-Value-File Format ist beschrieben unter
# https://www.universal-logging-system.org/dokuwiki/doku.php?id=uls:agents:value_file_format
#
############################################################################################
# Hostname festlegen
MYHOSTNAME=$(hostname)
#
# Section festlegen
ULSSECTION='Beispielsection'
#
# Teststep festlegen
ULSTESTSTEP='Beispielteststep'
#
# Zeitstempel festlegen
DT=$(date '+%F %T%:z')
#
# Datei mit Zugangsdaten
MYCNF='/Pfad/zur/Datei/mysql.cnf'
#
# DB, auf die der Select ausgeführt werden soll
DB="testdb"
#
# SQL Befehl, der die Daten für eine Zeile bestimmt
# wenn Zeichenketten mit Zeilenumbrüchen gesendet werden sollen, dann müssen die
# Zeilenumbrüche nach '\n' konvertiert werden.
# Die Einheit kann durch anhängen von '/<einheit>' an den Spaltennamen übergeben werden
SQL="select spalte1 as 'sp1', round(spalte2 / 1024, 3) as 'sp2/kByte', now() as 'now/{D}', replace(spalte3, '\\n', '\\\\n') as 'string'
  from tabelle1
  order by ID desc limit 1"
#
# Zuerst Datum, Zeit, Hostname, Section und Teststep vobelegen
{ echo "D;$DT;$MYHOSTNAME;$ULSSECTION;$ULSTESTSTEP;"
  #
  mysql --defaults-file="$MYCNF" --vertical -B "$DB" -e "$SQL" | sed -r '1d;s/\\n/\n/g;s/"/\\"/g;s#^ *([^:/]*)(/([^:]*))?: (.*)#V;;;;;\1;"\4";\3#'
} | send_test_tab
