diff options
author | scrappy <scrappy@FreeBSD.org> | 2006-12-01 21:30:45 +0800 |
---|---|---|
committer | scrappy <scrappy@FreeBSD.org> | 2006-12-01 21:30:45 +0800 |
commit | 76baddb12740a5a54df658b2b485243590bfc5a2 (patch) | |
tree | 8f0aa8643e1ede2975a9fab970839113385ebc1d /sysutils | |
parent | 48a7b38c4fc5ec47b9124ff196a8b4897b706eea (diff) | |
download | freebsd-ports-gnome-76baddb12740a5a54df658b2b485243590bfc5a2.tar.gz freebsd-ports-gnome-76baddb12740a5a54df658b2b485243590bfc5a2.tar.zst freebsd-ports-gnome-76baddb12740a5a54df658b2b485243590bfc5a2.zip |
v5.0 of the BSDstats script ...
This version brings in optional port reporting.
This version is backwards compatible with the older versions, so an
upgrade isn't required, except if you wish to enable port reporting
Diffstat (limited to 'sysutils')
-rw-r--r-- | sysutils/bsdstats/Makefile | 3 | ||||
-rw-r--r-- | sysutils/bsdstats/files/300.statistics | 128 | ||||
-rw-r--r-- | sysutils/bsdstats/files/300.statistics.in | 128 | ||||
-rw-r--r-- | sysutils/bsdstats/files/pkg-message.in | 3 | ||||
-rw-r--r-- | sysutils/bsdstats/pkg-install | 6 | ||||
-rw-r--r-- | sysutils/bsdstats/pkg-message | 3 |
6 files changed, 265 insertions, 6 deletions
diff --git a/sysutils/bsdstats/Makefile b/sysutils/bsdstats/Makefile index 4cc82582a508..360297a58d8d 100644 --- a/sysutils/bsdstats/Makefile +++ b/sysutils/bsdstats/Makefile @@ -6,8 +6,7 @@ # PORTNAME= bsdstats -PORTVERSION= 4.8 -PORTREVISION= 2 +PORTVERSION= 5.0 CATEGORIES= sysutils DISTFILES= diff --git a/sysutils/bsdstats/files/300.statistics b/sysutils/bsdstats/files/300.statistics index 5b1fc6f17f6d..d3b4c704474a 100644 --- a/sysutils/bsdstats/files/300.statistics +++ b/sysutils/bsdstats/files/300.statistics @@ -1,6 +1,6 @@ #!/bin/sh - # -# $FreeBSD: /tmp/pcvs/ports/sysutils/bsdstats/files/Attic/300.statistics,v 1.33 2006-10-04 04:51:41 scrappy Exp $ +# $FreeBSD: /tmp/pcvs/ports/sysutils/bsdstats/files/Attic/300.statistics,v 1.34 2006-12-01 13:30:45 scrappy Exp $ # # If there is a global system configuration file, suck it in. @@ -22,7 +22,7 @@ fi oldmask=$(umask) umask 066 -version="4.7" +version="5.0" checkin_server=${monthly_statistics_checkin_server:-"rpt.bsdstats.org"} bsdstats_log=${monthly_statistics_logfile:-"/var/log/bsdstats"} id_token_file='/var/db/bsdstats' @@ -76,6 +76,7 @@ check_dns () { exit fi } + send_devices () { case $(uname) in FreeBSD ) @@ -95,6 +96,119 @@ send_devices () { 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}" | \ + /usr/bin/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 @@ -308,6 +422,16 @@ case "$monthly_statistics_enable" in 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 ;; *) diff --git a/sysutils/bsdstats/files/300.statistics.in b/sysutils/bsdstats/files/300.statistics.in index 8a2a4d9ac42b..c3b5bb3df5a6 100644 --- a/sysutils/bsdstats/files/300.statistics.in +++ b/sysutils/bsdstats/files/300.statistics.in @@ -1,6 +1,6 @@ #!/bin/sh - # -# $FreeBSD: /tmp/pcvs/ports/sysutils/bsdstats/files/300.statistics.in,v 1.33 2006-10-04 04:51:41 scrappy Exp $ +# $FreeBSD: /tmp/pcvs/ports/sysutils/bsdstats/files/300.statistics.in,v 1.34 2006-12-01 13:30:45 scrappy Exp $ # # If there is a global system configuration file, suck it in. @@ -22,7 +22,7 @@ fi oldmask=$(umask) umask 066 -version="4.7" +version="5.0" checkin_server=${monthly_statistics_checkin_server:-"rpt.bsdstats.org"} bsdstats_log=${monthly_statistics_logfile:-"/var/log/bsdstats"} id_token_file='/var/db/bsdstats' @@ -76,6 +76,7 @@ check_dns () { exit fi } + send_devices () { case $(uname) in FreeBSD ) @@ -95,6 +96,119 @@ send_devices () { 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}" | \ + /usr/bin/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 @@ -308,6 +422,16 @@ case "$monthly_statistics_enable" in 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 ;; *) diff --git a/sysutils/bsdstats/files/pkg-message.in b/sysutils/bsdstats/files/pkg-message.in index 6bc79f1e0664..cf5eda09f142 100644 --- a/sysutils/bsdstats/files/pkg-message.in +++ b/sysutils/bsdstats/files/pkg-message.in @@ -16,6 +16,9 @@ To enable the port, edit or create /etc/periodic.conf and add this line: To enable device reporting, add this line: monthly_statistics_report_devices="YES" +To enable ports reporting, add this line: + monthly_statistics_report_ports="YES" + To run it manually the first time, just run it as: /usr/local/etc/periodic/monthly/300.statistics diff --git a/sysutils/bsdstats/pkg-install b/sysutils/bsdstats/pkg-install index 3ab8de033995..5f452f804c01 100644 --- a/sysutils/bsdstats/pkg-install +++ b/sysutils/bsdstats/pkg-install @@ -40,6 +40,9 @@ if [ ":$2" = ":POST-INSTALL" ]; then if yesno "Would you like to send a list of installed hardware as well" n; then echo "monthly_statistics_report_devices=\"YES\"" >> /etc/periodic.conf fi + if yesno "Would you like to send a list of installed ports as well" n; then + echo "monthly_statistics_report_ports=\"YES\"" >> /etc/periodic.conf + fi if yesno "Would you like to run it now" y; then /usr/local/etc/periodic/monthly/300.statistics fi @@ -51,6 +54,9 @@ if [ ":$2" = ":POST-INSTALL" ]; then if yesno "Would you like to send a list of installed hardware as well" n; then echo "monthly_statistics_report_devices=\"YES\"" >> /etc/periodic.conf fi + if yesno "Would you like to send a list of installed ports as well" n; then + echo "monthly_statistics_report_ports=\"YES\"" >> /etc/periodic.conf + fi if yesno "Would you like to run it now" y; then /usr/local/etc/periodic/monthly/300.statistics fi diff --git a/sysutils/bsdstats/pkg-message b/sysutils/bsdstats/pkg-message index 6bc79f1e0664..cf5eda09f142 100644 --- a/sysutils/bsdstats/pkg-message +++ b/sysutils/bsdstats/pkg-message @@ -16,6 +16,9 @@ To enable the port, edit or create /etc/periodic.conf and add this line: To enable device reporting, add this line: monthly_statistics_report_devices="YES" +To enable ports reporting, add this line: + monthly_statistics_report_ports="YES" + To run it manually the first time, just run it as: /usr/local/etc/periodic/monthly/300.statistics |