blob: 932f57755a8dc11132abbc7a048eb94db0c3b2cc [file] [log] [blame]
#!/bin/sh
# <@LICENSE>
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# </@LICENSE>
# Written by Theo Van Dinter <felicity@apache.org>
# Please feel free to mail with any questions. :)
# This script will run a mass-check against all targets specified on the
# commandline, or optionally via a program called "mbox-to-check" located in
# the same directory as this script.
#
# At the end, you will have a ham.log, spam.log, and results.log in the
# current directory.
# Parameters
#
# The first parameter is the directory to use for mass-check (if there
# is no parameter or the path isn't a directory, "../spamassassin-head" will
# be the default). On my machine, spamassassin-head is the latest version
# from SVN.
#
# All other parameters are passed directly to mass-check.
# Default parameters: --progress -c $SADIR/rules -j $PROCS
# (PROCS is determined by running $SADIR/masses/cpucount)
#
# Example:
# ./run-masses -n
# ./run-masses -n ham:mbox:mboxfile spam:mbox:mboxfile
# DEFOPTS sets default options to be passes to mass-check. I like
# "--all --cache", but ymmv.
DEFOPTS=""
# TARGETS should include your list of mbox/mbx/dir/file targets for mass-check
# or if you use the mbox-to-check script, you can leave this blank.
TARGETS=
# go through and limit out resource usage
# (-c) no core files
# (-v -m) max memory of 200MB
# (-n) max open files of 256
# (-u) max child procs of 32
ulimit -c 0
ulimit -v 204800
ulimit -m 204800
ulimit -n 256
ulimit -u 32
# fix the umask so group write is available
umask 002
# Setup the path as necessary
PATH=/bin:/usr/bin:/usr/local/bin
if [ -d /sw/bin ]; then
PATH=${PATH}:/sw/bin
fi
export PATH
# Use the specified directory for tests
if [ -z "$1" -o ! -d "$1" ]; then
DIR=../spamassassin-head
else
DIR="$1"
shift
fi
# Where are our files located?
MASS=$DIR/masses
RULES=$DIR/rules
# if mbox-to-check is setup, go ahead and run it for additional targets
CORPUS="`dirname $0`"
if [ -x "$CORPUS/mbox-to-check" ]; then
TARGETS="$TARGETS `$CORPUS/mbox-to-check $CORPUS`"
fi
# Make sure the old rules.pl file is gone
rm -rf $MASS/tmp
# How many processes should we run at once?
PROCS=`$MASS/cpucount`
# do the mass-check
$MASS/mass-check --progress -c $RULES -j $PROCS $DEFOPTS "$@" $TARGETS
if [ -f spam.log -a -f ham.log ]; then
echo "Generating hit frequency results"
$MASS/hit-frequencies -c $RULES -x -p -a > results.log
fi
# remove the parse-rules-for-masses tmp directory
echo "Removing temporary files"
rm -rf ./tmp