[PC-BSD Commits] r273 - pcbsd/trunk/system-overlay/usr/local/etc/periodic/monthly

svn at pcbsd.org svn at pcbsd.org
Mon Jun 4 08:12:45 PDT 2007


Author: kris
Date: 2007-06-04 16:12:45 +0100 (Mon, 04 Jun 2007)
New Revision: 273

Modified:
   pcbsd/trunk/system-overlay/usr/local/etc/periodic/monthly/300.statistics
Log:

Upgraded BSDStats script to latest version



Modified: pcbsd/trunk/system-overlay/usr/local/etc/periodic/monthly/300.statistics
===================================================================
--- pcbsd/trunk/system-overlay/usr/local/etc/periodic/monthly/300.statistics	2007-06-04 15:03:53 UTC (rev 272)
+++ pcbsd/trunk/system-overlay/usr/local/etc/periodic/monthly/300.statistics	2007-06-04 15:12:45 UTC (rev 273)
@@ -1,6 +1,6 @@
 #!/bin/sh -
 #
-# $FreeBSD: ports/sysutils/bsdstats/files/300.statistics,v 1.33 2006/10/04 04:51:41 scrappy Exp $
+# $FreeBSD: ports/sysutils/bsdstats/files/300.statistics,v 1.38 2006/12/05 13:49:45 scrappy Exp $
 #
 
 # If there is a global system configuration file, suck it in.
@@ -22,7 +22,7 @@
 oldmask=$(umask)
 umask 066
 
-version="4.7"
+version="5.2"
 checkin_server=${monthly_statistics_checkin_server:-"rpt.bsdstats.org"}
 bsdstats_log=${monthly_statistics_logfile:-"/var/log/bsdstats"}
 id_token_file='/var/db/bsdstats'
@@ -76,10 +76,11 @@
       exit
     fi
 }
+
 send_devices () {
     case $(uname) in
 	FreeBSD )
-	    for line in `/usr/sbin/pciconf -l | /usr/bin/grep -v none`
+	    for line in `/usr/sbin/pciconf -l`
 	    do
 	      DRIVER=`echo $line | awk -F\@ '{print $1}'`
 	      DEV=`echo $line | awk '{print $4}' | cut -c8-15`
@@ -95,6 +96,119 @@
     esac
 }
 
+send_ports () {
+    case $(uname) in
+	FreeBSD )
+	    for line in `/usr/sbin/pkg_info | /usr/bin/awk '{print $1}' `
+	    do
+              category=`grep "@comment ORIGIN" /var/db/pkg/${line}/+CONTENTS | sed -E 's/^\@comment ORIGIN:(.+)\/.+/\1/g'`
+              line=$(uri_escape $line)
+              category=$(uri_escape $category)
+	      query_string=$query_string`echo \&port[]=${category}:${line}`
+	    done
+
+	    report_ports
+	    ;;
+	* )
+	    # Not supported
+	    ;;
+    esac
+}
+
+report_ports () {
+	# Handle HTTP proxy services
+	#
+	# HTTP_PROXY/http_proxy can take the following form:
+	#    [http://][username:password@]proxy[:port][/]
+	# Authentication details may also be provided via HTTP_PROXY_AUTH:
+	#    HTTP_PROXY_AUTH="basic:*:username:password"
+	#
+
+	if [ -z "$HTTP_PROXY" -a -n "$http_proxy" ]; then
+		HTTP_PROXY=$http_proxy
+	fi
+	if [ -n "$HTTP_PROXY" ]; then
+		# Attempt to resolve any HTTP authentication
+		if [ -n "$HTTP_PROXY_AUTH" ]; then
+			PROXY_AUTH_USER=`echo $HTTP_PROXY_AUTH | sed -E 's/^.+:\*:(.+):.+$/\1/g'`
+			PROXY_AUTH_PASS=`echo $HTTP_PROXY_AUTH | sed -E 's/^.+:\*:.+:(.+)$/\1/g'`
+		else
+			# Check for authentication within HTTP_PROXY
+			HAS_HTTP_AUTH=`echo $HTTP_PROXY | sed -E 's/^(http:\/\/)?(.+:.+@)?.+/\2/'`
+			if [ -n "$HAS_HTTP_AUTH" ]; then
+				# Found HTTP authentication details
+				PROXY_AUTH_USER=`echo $HAS_HTTP_AUTH | cut -d: -f1`
+				PROXY_AUTH_PASS=`echo $HAS_HTTP_AUTH | cut -d: -f2`
+			fi
+		fi
+
+		# Determine the proxy components
+		PROXY_HOST=`echo $HTTP_PROXY | sed -E 's/^(http:\/\/)?(.+:.+@)?([^@:]+)(:.+)?/\3/'`
+		PROXY_PORT=`echo $HTTP_PROXY | sed -E 's/^(http:\/\/)?(.+:.+@)?(.+):([0-9]+)/\4/' | sed -e 's/[^0-9]//g'`
+		if [ -z "$PROXY_PORT" ]; then
+			# Use default proxy port
+			PROXY_PORT=3128
+		fi
+	fi
+
+	# Determine the host/port netcat should connect to
+	if [ -n "$PROXY_HOST" -a -n "$PROXY_PORT" ]; then
+		nc_host=$PROXY_HOST
+		nc_port=$PROXY_PORT
+		url_prefix="http://${checkin_server}"
+	else
+		nc_host=$checkin_server
+		nc_port=80
+	fi
+
+	# Proxy authentication, if required
+	if [ -n "$PROXY_AUTH_USER" -a -n "$PROXY_AUTH_PASS" ]; then
+		auth_base64=`echo "$PROXY_AUTH_USER:$PROXY_AUTH_PASS" | openssl base64`
+		proxy_auth="Proxy-Authorization: Basic $auth_base64
+"
+	fi
+
+
+	# Make the request	
+	string_length=`echo ${query_string} | wc -m` 
+	string_length=`expr ${string_length} - 1`
+
+	echo "POST ${url_prefix}/scripts/report_ports.php HTTP/1.0
+Host: ${checkin_server}
+User-Agent: bsdstats ${version}
+Connection: close
+${proxy_auth}Content-Type: application/x-www-form-urlencoded
+Content-Length: ${string_length}
+
+token=${TOKEN}&key=${KEY}${query_string}" | \
+		nc $nc_host $nc_port  | \
+		grep STATUS= | {
+          local IFS
+          IFS='= 
+'
+
+           while read var val
+             do  
+             case $var in
+                 STATUS)
+                     if [ $val = "OK" ]
+                     then
+                       echo "[`date`] System Ports reported"
+                     else
+                       echo "[`date`] System Ports not reported, exiting"
+                       exit
+                     fi
+                 ;; 
+                 *)
+                     echo "[`date`] Error with fetch to server"
+                     exit
+                 ;;
+                 esac
+           done   
+       } >> $bsdstats_log
+
+}
+
 report_devices () {
       do_fetch report_devices.php?token=$TOKEN\&key=$KEY$query_string | { 
           local IFS
@@ -288,7 +402,7 @@
       ARCH=`/usr/bin/uname -m`
       OS="PC-BSD"
       get_id_token
-      sleep `random`
+      test X"$1" = X-nodelay || sleep `random`
       enable_token
       report_system
       echo "Posting monthly OS statistics to $checkin_server"
@@ -308,6 +422,16 @@
              echo "    set monthly_statistics_report_devices=\"YES\" in $periodic_conf"
              ;;
       esac
+      case "$monthly_statistics_report_ports" in
+          [Yy][Ee][Ss])
+              send_ports
+              echo "Posting monthly ports statistics to $checkin_server"
+             ;;
+          *) 
+             echo "Posting monthly ports statistics disabled"
+             echo "    set monthly_statistics_report_ports=\"YES\" in $periodic_conf"
+             ;;
+      esac
       disable_token
       ;;
     *) 



More information about the Commits mailing list