#!/bin/bash # # $Id: mysqlard.server.sh 40 2006-01-20 20:26:11Z dewitge $ # # MySQL Activity Report # mysqlard Start script for the MySQL Activity Report Daemon # # Copyright 2004 Gert Dewit <gert.dewit@sos.be> # # chkconfig: 2345 79 11 # description: MySQL Activity Report Daemon # processname: mysqlard # config: /etc/mysqlard/mysqlard.cnf # pidfile: /var/run/mysqlard/mysqlard.pid # Source function library. . /etc/rc.d/init.d/functions # Source the config script if [[ "$datadir" == "" ]] ; then . /etc/mysqlard/mysqlard.cnf fi ######################################################################## # Options, change them in /etc/mysqlard/mysqlard.cnf or you can override # them here, but that's not recommended. Read the comments in # /etc/mysqlard/mysqlard.cnf if you want to know what you're changing. step=${step:="60"} minsamples=${minsamples:="720"} datadir=${datadir:="/var/lib/mysqlard"} pidfile=${pidfile:="/var/run/mysqlard/mysqlard.pid"} RRDTOOL=${RRDTOOL:="/usr/bin/rrdtool"} MYSQLARD=${MYSQLARD:="/usr/sbin/mysqlard"} MYSQLUSER=${MYSQLUSER:="mysqlar"} MYSQLHOST=${MYSQLHOST:=""} ######################################################################## # don't change anything below this line, but heck, I can't stop you ;-) confile=${confile:="${datadir}/connections.rrd"} tabfile=${tabfile:="${datadir}/table_cache.rrd"} keyfile=${keyfile:="${datadir}/key_cache.rrd"} queryfile=${queryfile:="${datadir}/queries.rrd"} slavefile=${slavefile:="${datadir}/slave.rrd"} # Source configuration. if [ -f /etc/sysconfig/mysqlard ]; then . /etc/sysconfig/mysqlard fi slaveopt= if [[ "$slave" != "" ]]; then slaveopt=-L fi if [[ "$MYSQLHOST" != "" ]] ; then MYSQLHOST=--host=$MYSQLHOST fi # functions avgsamps () { avg=$(($1 / $2)) if [ ${avg} -lt 1 ] then avg=1 fi echo ${avg} } archives () { arch=$(($1 / $2)) if [[ $(($2 * ${arch} * $3)) -lt $4 ]] then arch=$((${arch} + 1)) fi echo ${arch} } # calculated values heartbeat=$((${step} * 2)) hoursamps=$((3600 / ${step})) houravgs=$(avgsamps ${hoursamps} ${minsamples}) hourarchives=$(archives ${hoursamps} ${houravgs} ${step} 3600) daysamps=$((86400 / ${step})) dayavgs=$(avgsamps ${daysamps} ${minsamples}) dayarchives=$(archives ${daysamps} ${dayavgs} ${step} 86400) weeksamps=$((604800 / ${step})) weekavgs=$(avgsamps ${weeksamps} ${minsamples}) weekarchives=$(archives ${weeksamps} ${weekavgs} ${step} 604800) monthsamps=$((2678400 / ${step})) monthavgs=$(avgsamps ${monthsamps} ${minsamples}) montharchives=$(archives ${monthsamps} ${monthavgs} ${step} 2678400) yearsamps=$((31622400 / ${step})) yearavgs=$(avgsamps ${yearsamps} ${minsamples}) yeararchives=$(archives ${yearsamps} ${yearavgs} ${step} 31622400) # calculated RRA's hourrra="RRA:AVERAGE:0.5:${houravgs}:${hourarchives}" dayrra="RRA:AVERAGE:0.5:${dayavgs}:${dayarchives}" weekrra="RRA:AVERAGE:0.5:${weekavgs}:${weekarchives}" monthrra="RRA:AVERAGE:0.5:${monthavgs}:${montharchives}" yearrra="RRA:AVERAGE:0.5:${yearavgs}:${yeararchives}" allrras="${hourrra} ${dayrra} ${weekrra} ${monthrra} ${yearrra}" initrrd () { if [ ! -f ${confile} ] then ${RRDTOOL} create ${confile} --step ${step} \ DS:threads_connected:GAUGE:${heartbeat}:0:U \ DS:max_connections:GAUGE:${heartbeat}:0:U \ ${allrras} fi if [ ! -f ${tabfile} ] then ${RRDTOOL} create ${tabfile} --step ${step} \ DS:open_tables:GAUGE:${heartbeat}:0:U \ DS:table_cache:GAUGE:${heartbeat}:0:U \ DS:created_tmp_tables:COUNTER:${heartbeat}:0:U \ DS:created_tmp_disk_t:COUNTER:${heartbeat}:0:U \ ${allrras} fi if [ ! -f ${keyfile} ] then ${RRDTOOL} create ${keyfile} --step ${step} \ DS:key_reads:COUNTER:${heartbeat}:0:U \ DS:key_read_requests:COUNTER:${heartbeat}:0:U \ DS:key_buffer_size:GAUGE:${heartbeat}:0:U \ DS:key_blocks_used:GAUGE:${heartbeat}:0:U \ DS:select_full_join:COUNTER:${heartbeat}:0:U \ DS:select_range_check:COUNTER:${heartbeat}:0:U \ DS:handler_read_key:COUNTER:${heartbeat}:0:U \ DS:handler_read_rnd:COUNTER:${heartbeat}:0:U \ DS:slow_queries:COUNTER:${heartbeat}:0:U \ ${allrras} fi if [ ! -f ${queryfile} ] then ${RRDTOOL} create ${queryfile} --step ${step} \ DS:questions:COUNTER:${heartbeat}:0:U \ DS:com_select:COUNTER:${heartbeat}:0:U \ DS:com_insert:COUNTER:${heartbeat}:0:U \ DS:com_update:COUNTER:${heartbeat}:0:U \ DS:com_delete:COUNTER:${heartbeat}:0:U \ ${allrras} fi if [ ! -f ${slavefile} ] then ${RRDTOOL} create ${slavefile} --step ${step} \ DS:read_master_log_pos:COUNTER:${heartbeat}:0:U \ DS:exec_master_log_pos:COUNTER:${heartbeat}:0:U \ ${allrras} fi } RETVAL=0 start() { echo -n "Starting mysqlard" initrrd ${MYSQLARD} \ --step=${step} \ --datadir=${datadir} \ --user=${MYSQLUSER} $MYSQLHOST \ --pidfile=${pidfile} ${slaveopt} 2>/dev/null 1>&2 && success || failure RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/mysqlard return $RETVAL } stop() { echo -n "Stopping mysqlard" killproc mysqlard RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/mysqlard ${pidfile} } # See how we were called. case "$1" in start) start ;; stop) stop ;; initrrd) initrrd ;; status) status mysqlard RETVAL=$? ;; restart|reload) stop start ;; condrestart) if [ -f ${pidfile} ] ; then stop start fi ;; *) echo -n "Usage: $0 {start|stop|initrrd|status|restart|condrestart|reload}" exit 1 esac exit $RETVAL