#!/bin/bash

MODULE="$1"

SS_HOME=/opt/SecureSpan
GW_HOME="${SS_HOME}"/Gateway
GW_NODE_DEFAULT_VAR_DB="${GW_HOME}"/node/default/var/db
GW_NODE_CONF="${GW_HOME}"/node/default/etc/conf
MYSQLD_LOG=/var/log/mysqld.log
MYSQL_ERROR_LOG=/var/log/mysql/error.log


# Pull in collector support functions
. "${COLLECTOR_HOME}"/collectorlib

preModule "$MODULE"

#Define and create output folders
DB_MODULE_BASEOUTPUTDIR="${BASE_OUTPUT_DIR}/${MODULE}"
mkdir -p "${DB_MODULE_BASEOUTPUTDIR}"

if [[ -w "${DB_MODULE_BASEOUTPUTDIR}" && -e ${GW_NODE_CONF}/node.properties ]]
then
    if grep -q "derby" ${GW_NODE_CONF}/node.properties
    then
        echo "Embedded derby database found."
        logAndRunCmd "cp \"${GW_NODE_DEFAULT_VAR_DB}\"/derby.log \"${DB_MODULE_BASEOUTPUTDIR}\""
    else
        echo "MYSQL database found."

        DB_MODULE_CONFIGOUTPUTDIR="${DB_MODULE_BASEOUTPUTDIR}"/config
        mkdir -p "${DB_MODULE_CONFIGOUTPUTDIR}"

        logAndRunCmd "service mysql status &> \"${DB_MODULE_BASEOUTPUTDIR}\"/mysql-status.txt"
        logAndRunCmd "mysql ssg -e 'select * from ssg_version' &> \"${DB_MODULE_BASEOUTPUTDIR}\"/ssg-version.txt"
        logAndRunCmd "mysql ssg -e 'show tables' &> \"${DB_MODULE_BASEOUTPUTDIR}\"/show-tables.txt"
        logAndRunCmd "mysql ssg -e 'show slave status \G' &> \"${DB_MODULE_BASEOUTPUTDIR}\"/show-slave-status.txt"
        logAndRunCmd "mysql ssg -e 'show master status \G' &> \"${DB_MODULE_BASEOUTPUTDIR}\"/show-master-status.txt"
        logAndRunCmd "mysqladmin -u root processlist &> \"${DB_MODULE_BASEOUTPUTDIR}\"/processlist.txt"
        logAndRunCmd "cp /var/lib/mysql/*-slow.log \"${DB_MODULE_BASEOUTPUTDIR}\""
        if [ -f "$MYSQLD_LOG" ]; then
            logAndRunCmd "cp $MYSQLD_LOG \"${DB_MODULE_BASEOUTPUTDIR}\""
        else
            echo "File '$MYSQLD_LOG' not found."
        fi
        if [ -f "$MYSQL_ERROR_LOG" ]; then
            logAndRunCmd "cp $MYSQL_ERROR_LOG \"${DB_MODULE_BASEOUTPUTDIR}\""
        else
            echo "File '$MYSQL_ERROR_LOG' not found."
        fi

        logAndRunCmd "mysql ssg -e 'select count(*) as count_audit_main from audit_main' \
            &> \"${DB_MODULE_BASEOUTPUTDIR}\"/count-audit-main.txt"
        logAndRunCmd "mysql ssg -e 'SELECT hex(ps.goid) goid, ps.name name, routing_uri, f.name folder, \
                su.requestnr, su.authorizedreqnr, su.completedreqnr \
            FROM ssg.service_usage su \
            INNER JOIN ssg.published_service ps on ps.goid = su.serviceid \
            INNER JOIN folder f on f.goid = ps.folder_goid \G' \
            &> \"${DB_MODULE_BASEOUTPUTDIR}\"/service-usage.txt"
        logAndRunCmd "mysql ssg -e 'SELECT hex(goid), name, disabled, soap, internal, routing_uri, \
                default_routing_url, http_methods \
            FROM published_service \G' \
            &> \"${DB_MODULE_BASEOUTPUTDIR}\"/published-services.txt"
        logAndRunCmd "mysql ssg -e 'SELECT hex(goid), propkey, propvalue, properties FROM cluster_properties \G' \
            &> \"${DB_MODULE_BASEOUTPUTDIR}\"/cluster-properties.txt"
        logAndRunCmd "mysql ssg -e 'SELECT name, hex(goid), module_type, properties FROM server_module_file \G' \
            &> \"${DB_MODULE_BASEOUTPUTDIR}\"/server-modules.txt"
        logAndRunCmd "mysql ssg -e 'SELECT name, hex(goid) goid, sk_version, properties, install_properties, \
                mappings, uninstall_bundle, hex(parent_goid) parent_goid \
            FROM solution_kit \G' \
            &> \"${DB_MODULE_BASEOUTPUTDIR}\"/solution-kits.txt"

        for user in $(mysql --silent --skip-column-names ssg -e "select concat('\'',user,'\'@\'',host,'\'') as user from mysql.user")
        do
            logAndRunCmd "mysql ssg -e \"show grants for ${user}\" &>> \"${DB_MODULE_BASEOUTPUTDIR}\"/show-grants.txt"
        done

        if [ -w "${DB_MODULE_CONFIGOUTPUTDIR}" ]
        then
            logAndRunCmd "cp /etc/my.cnf \"${DB_MODULE_CONFIGOUTPUTDIR}\""
        else
            echo "ERROR: Could not create mysql config module output directory - my.cnf file not copied."
        fi
    fi
else
    echo "ERROR: Could not create database module output directory."
fi

postModule "$MODULE"
