aboutsummaryrefslogtreecommitdiff
path: root/sysutils/bsdstats
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@FreeBSD.org>2006-12-01 13:30:45 +0000
committerMarc G. Fournier <scrappy@FreeBSD.org>2006-12-01 13:30:45 +0000
commit8575c7bb11f5167c478efe6492a53db993ba72f8 (patch)
tree76e0e5c0b6da98881b4502e1af9b0483769d99f1 /sysutils/bsdstats
parentf2aa8d1ab48270aa3ebc11eeb446cc4a4834a856 (diff)
Notes
Diffstat (limited to 'sysutils/bsdstats')
-rw-r--r--sysutils/bsdstats/Makefile3
-rw-r--r--sysutils/bsdstats/files/300.statistics128
-rw-r--r--sysutils/bsdstats/files/300.statistics.in128
-rw-r--r--sysutils/bsdstats/files/pkg-message.in3
-rw-r--r--sysutils/bsdstats/pkg-install6
-rw-r--r--sysutils/bsdstats/pkg-message3
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