Skip to content

Instantly share code, notes, and snippets.

@Und3rf10w
Created April 19, 2016 14:37
Show Gist options
  • Save Und3rf10w/36a2034cb2c8eafbfb801c1a89e1f8bc to your computer and use it in GitHub Desktop.
Save Und3rf10w/36a2034cb2c8eafbfb801c1a89e1f8bc to your computer and use it in GitHub Desktop.

Revisions

  1. Und3rf10w created this gist Apr 19, 2016.
    48 changes: 48 additions & 0 deletions purge_quassel_db-sqlite.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    #!/bin/sh
    # Taken from http://blog.encomiabile.it/2011/02/03/prune-quassel-database/

    BAK_PATH="${HOME}/.config/quassel-irc.org/quassel-storage.sqlite.bak"
    CURRENT_PATH="${HOME}/.config/quassel-irc.org/quassel-storage.sqlite"
    # first day of data that will be maintained
    # -7 day means that *every* chatline stored before 8 days ago and so on are going to be eliminated.
    # only the last 7 days are keeped.
    DATE_TO_PRUNE='-7 day'

    die() {
    echo $@
    exit 1
    }

    # is quassel running?
    is_quassel_running() {
    pgrep quassel > /dev/null
    echo $?
    }

    if [ $(is_quassel_running) -eq 0 ]; then
    echo "ERROR: quassel is running, stop it first!"
    exit 1;
    fi

    echo -n "Creating a backup and a temporary copy of the db .."

    mv "$CURRENT_PATH" "$BAK_PATH" || die "unable to create a copy backup"
    cp "$BAK_PATH" "$BAK_PATH.tmp" || die "unable to create a temporary copy of the db"
    echo ".. done!"

    echo -n "Cleaning up the database .."

    # purge the db from old entry
    sqlite3 $BAK_PATH.tmp "DELETE FROM backlog WHERE time < strftime('%s','now','${DATE_TO_PRUNE}');" || die "Purge failed"
    echo ".. done!"

    echo -n "Rebuilding database .."
    # rebuild the db to save disk space (the db doesn't shrink automatically)
    sqlite3 $BAK_PATH.tmp .dump | sqlite3 $CURRENT_PATH || die "Rebuild failed"
    echo ".. done!"

    echo -n "Deleting temporary files .."

    # delete rubbish
    rm "$BAK_PATH.tmp" || die "rm failed"
    echo ".. done!"