login() { wget \ -O $listf \ -o /dev/null \ --no-check-certificate \ --save-cookies=${cookief} \ --keep-session-cookies \ --post-data='back_url=&username=admin&password='$pass'&login=Login ' \ "${site}/login" } fetch_url() { wget \ --no-check-certificate \ --load-cookies=${cookief} \ -o /dev/null \ -O - \ "$1" } fetch_items() { if [ "$1" = "-2" ] then out='$2' shift else out='$2 $3' fi # generic screen scraper for Redmine... what="$1" urlbit="$2" fetch_url "${site}/${urlbit}?per_page=5000" | perl -p -e 's{,}{\n}go;' | egrep "a href=\".*/$what/(show|edit)/" | grep -v '?' | perl -p -e 's{.*a href=".*/'"$what"'/(show|edit)/(.*?)".*?>(.*?).*}{'"$out"'}o;' | sed -e 's;[^-a-zA-Z0-9_/ ];;g' } get_repo_info() { fetch_url "${site}/projects/settings/$1" | sed -e '1,/tab-content-repository/d' -e '/tab-content-forms/,$d' | egrep 'selected=|name="repository' | perl -n -e 's{value="(.*?)"}{print $1,"\n"}ge;' } slurp_users() { fetch_items users users > $listf while read id name do eval user_$id=$name done < $listf } lookup_user() { nid=`echo $1 | sed -e 's/[^0-9]//g'` if [ "$nid" != "1" ] then eval echo \$user_$nid fi } update_users_for_proj() { proj=$1 k5l=${projroot}$proj/.k5login if [ -r $k5l ] then : else return fi cp ${k5l} ${k5l}.new member_ids=`fetch_items -2 account projects/show/$proj` printf "member names for $proj are: " for id in $member_ids do name=`lookup_user $id` printf "%s " $name if [ "$name" != "" ] then echo $name@FNAL.GOV >> ${k5l}.new fi done printf "\n" sort -u ${k5l}.new > ${k5l}.new.sorted if diff ${k5l}.new.sorted ${k5l} then : userlist unchanged else mv ${k5l}.new.sorted ${k5l} fi rm -f ${k5l}.new ${k5l}.new.sorted } get_post_entries() { grep "$datestr.*POST.*$1" $weblogfile | sed -e "s;.*$1/\\([^ /?]*\\).*;\\1;" | sort -u } driver() { login slurp_users projects_with_new_members=`get_post_entries /members/new` for proj in $projects_with_new_members do update_users_for_proj $proj done } test_get_repo_info() { tp=`get_repo_info Hello` echo "get_repo_info for Hello says $tp" tp=`get_repo_info testp1` echo "get_repo_info for testp1 says $tp" } test_login() { echo "Testing login" login grep "Logged in" $listf } test_fetch_items() { echo "Testing fetching projects:" fetch_items projects projects fetch_items -2 projects projects echo "Testing fetching Hello users:" fetch_items account projects/show/hello echo "Testing fetching all users:" fetch_items users users } test_slurp_users() { echo "slurping users:" slurp_users echo "user 1:" lookup_user 1 echo "user 4:" lookup_user 4 } test_get_post() { get_post_entries members/new } cd /usr/local/admin datestr=`date '+%d/%h/%Y'` weblogfile=/var/log/httpd/ssl_access_log site=https://cdcvs4.fnal.gov/redmine listf=/tmp/list_p$$ cookief=/tmp/cookies_p$$ projroot=/cvs/home/p- read pass < .redmine_passfile test_suite() { echo login test_login echo get_post datestr="30/Sep/2009" test_get_post echo fetch_items test_fetch_items echo slurp_users test_slurp_users echo repo_info test_get_repo_info } case $1 in -t) test_suite;; *) driver 2>&1 | logger -t $0;; esac # cleanup rm /tmp/*_p$$