--- archive.trunk.sh    2011-03-29 05:24:46.000000000 +0200
+++ archive.trunk.dev.sh        2011-07-12 12:40:06.328513820 +0200
@@ -30,6 +30,23 @@
 # enable_browser_archiving_triggering = false
 #===========================================================================

+while getopts ":p:" opt; do
+  case $opt in
+    p)
+      MAX_PROCS=$OPTARG
+      ;;
+    \?)
+      echo "Invalid option: -$OPTARG" >&2
+      exit 1
+      ;;
+    :)
+      echo "Option -$OPTARG requires an argument." >&2
+      exit 1
+      ;;
+  esac
+done
+test -z "$MAX_PROCS" && MAX_PROCS=`grep processor /proc/cpuinfo|wc -l`
+
 for TEST_PHP_BIN in php5 php php-cli php-cgi; do
   if which $TEST_PHP_BIN >/dev/null 2>/dev/null; then
     PHP_BIN=`which $TEST_PHP_BIN`
@@ -65,32 +82,37 @@
 CMD_GET_SEGMENTS_TO_ARCHIVE="$PHP_BIN -q $PIWIK_PATH -- module=API&method=CoreAdminHome.getKnownSegmentsToArchive&token_auth=$TOKEN_AUTH&format=csv&convertToUnicode=0"
 SEGMENTS_TO_ARCHIVE=`$CMD_GET_SEGMENTS_TO_ARCHIVE`

+CMDS=`mktemp`
+
 echo "Starting Piwik reports archiving..."
 echo ""
 for idsite in $ID_SITES; do
   TEST_IS_NUMERIC=`echo $idsite | egrep '^[0-9]+$'`
   if test -n "$TEST_IS_NUMERIC"; then
     for period in day week month year; do
-      echo ""
-      echo "Archiving period = $period for idsite = $idsite..."
-      CMD="$PHP_BIN -q $PIWIK_PATH -- module=API&method=VisitsSummary.getVisits&idSite=$idsite&period=$period&date=last52&format=xml&token_auth=$TOKEN_AUTH"
-      $CMD
-
+      echo "echo \"\"" >> $CMDS
+      echo "echo \"Archiving period = $period for idsite = $idsite...\"" >> $CMDS
+      CMD="$PHP_BIN -q $PIWIK_PATH -- \"module=API&method=VisitsSummary.getVisits&idSite=$idsite&period=$period&date=last52&format=xml&token_auth=$TOKEN_AUTH"
+      echo "$CMD\"" >> $CMDS
       for segment in $SEGMENTS_TO_ARCHIVE; do
            if test $segment != "value"; then
-         echo ""
-         echo " - Archiving for visitor segment $segment ..."
+         echo "echo \"\"" >> $CMDS
+         echo "echo \" - Archiving for visitor segment $segment ...\" " >> $CMDS
          CMD_ARCHIVE_SEGMENT="${CMD}&segment=$segment"
-         $CMD_ARCHIVE_SEGMENT
+         echo "$CMD_ARCHIVE_SEGMENT\"" >> $CMDS
        fi
       done
     done

-    echo ""
-    echo "Archiving for idsite = $idsite done!"
+    echo "echo \"\"" >> $CMDS
+    echo "echo \"Archiving for idsite = $idsite done!\"" >> $CMDS
+    echo -en "\00" >> $CMDS
   fi
 done

+xargs -P $MAX_PROCS --null -I{} sh -c {} < $CMDS
+rm -f "$CMDS"
+
 echo "Reports archiving finished."
 echo "---------------------------"
 echo "Starting Scheduled tasks..."
