DokuWiki

It's better when it's simple

User Tools

Site Tools


teams:dokubot

This is an old revision of the document!


DokuBot

Features

  • reconnects after Netsplit or kick
  • reloads configuration files
  • restarts itself on changes for database or irc configuration
  • supports MSS (Message Storage System)
  • implements test function for proper monitoring
  • implements proper logging (inlc. debug mode)
  • supports different configuration files (e.g. for testing)

MSS (Message Storage System)

This system is designed by Andrwe.

It stores messages addressed to someone in the channel who isn't online anymore in a database.
After reconnecting of the addressed user the message is send to him as private message including the link to irc log website.

It is activated by starting the message with '@Nickname' e.g. @Andrwe.

Currently the messages are only deleted after there were successfully send to the target.

Usage

This script controls an irc logging bot with command support.
Available options:
  -c - config file to use
  -h - this help
  -r - reload configurations and reconnects to irc and database if needed
  -s - start bot
  -t - check whether the bot is still running
  -x - stop bot

On the server of dokuwiki an init-script exists:

# start bot
service irclog start
# stop bot
service irclog stop
# restart bot
service irclog restart
# reload bot
service irclog reload
# checks running bot
service irclog check

For testing purpose there is irclog-test init-script. It starts a bot using /var/www/irclog/htdocs/test.conf.php as configuration file.

Configuration

There is an example configuration file in the git.

The parameters you have to change are:

  • db_host
  • db_user
  • db_pass
  • db_name
  • irc_host
  • irc_port
  • irc_chan
  • irc_nick
  • irc_name
  • irc_pass
  • initscript

The parameters you might want to change:

  • *_log
  • irc_* for automatic messages

Init-script

The following can be used to control the bot on Debian systems. Just copy it to /etc/init.d/irclog.

/etc/init.d/irclog
#! /bin/sh
### BEGIN INIT INFO
# Provides:          irclog
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: start dokubot (irclogger)
# Description:       start dokubot for logging IRC messages
### END INIT INFO
 
# Author: dokuwiki.org (Andrwe)
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="IRC logging service"
NAME=irclog.pl
DAEMON=/var/www/irclog/htdocs/$NAME
PIDFILE=/var/run/$NAME.pid
 
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 1
 
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
 
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
 
#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon --start --quiet -d /var/www/irclog/htdocs -c irclog -b --exec $DAEMON -- -s  \
        || return 2
}
 
#
# Function that stops the daemon/service
#
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --name $NAME -- -x
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    return "$RETVAL"
}
 
do_reload()
{
    start-stop-daemon --start --quiet -d /var/www/irclog/htdocs -c irclog --exec $DAEMON -- -r \
        || return 1
}
 
do_check()
{
    return start-stop-daemon --start --quiet -d /var/www/irclog/htdocs -c irclog --exec $DAEMON -- -t
}
 
case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
        0|1) log_end_msg 0 ;;
        2) log_end_msg 1 ;;
    esac
    ;;
  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) log_end_msg 0 ;;
        2) log_end_msg 1 ;;
    esac
    ;;
  reload)
    log_daemon_msg "Reloading $DESC" "$NAME"
    do_reload
    case "$?" in
        0) log_end_msg 0 ;;
        1) log_end_msg 1 ;; # Old process is still running
        *) log_end_msg 1 ;; # Failed to start
    esac
    ;;
  check)
    log_daemon_msg "Checking $DESC" "$NAME"
    do_check
    case "$?" in
        0) log_end_msg 0 ;;
        1) 
            log_end_msg 1
            log_daemon_msg "Couldn't run test." "$NAME"
            ;;
        2) 
            log_end_msg 1
            log_daemon_msg "Test failed. To fix it you have to restart the bot." "$NAME"
            ;;
        3) 
            log_end_msg 1
            log_daemon_msg "Test failed. To fix it you have to restart the bot." "$NAME"
            ;;
        *) 
            log_end_msg 1
            ;;
    esac
    ;;
  restart)
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
          # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|reload}" >&2
    exit 3
    ;;
esac

TODO

  • check for already running process
  • increase error checks
  • increase error logging
  • write help command
  • msgstore cleanup
  • zabbix monitoring
teams/dokubot.1375608850.txt.gz · Last modified: 2013-08-04 11:34 by 2001:4dd0:ff00:809d:67d:7bff:fe34:5b30

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki