# $Id: Portfile 82553 2011-08-15 19:22:39Z jmr@macports.org $

PortSystem 1.0

PortGroup		perl5 1.0

name			smokeping
version			2.4.2
revision		5
categories		net perl
maintainers		markd
description		A deluxe latency logging and graphing system.
long_description	SmokePing is a deluxe latency measurement tool. \
			It can measure, store, and display latency, latency \
			distribution, and packet loss. SmokePing uses RRDtool \
			to maintain a longterm data-store and to draw pretty \
			graphs, giving up to the minute information on the \
			state of each network connection.

platforms		darwin
homepage                http://oss.oetiker.ch/smokeping/
master_sites		http://oss.oetiker.ch/smokeping/pub/
checksums		md5 eb8e7679fcad35e59d7c51f2328250a2

patchfiles		patch-bin-smokeping.dist \
			patch-bin-tSmoke.dist \
			patch-etc-config.dist \
			patch-htdocs-smokeping.cgi.dist

depends_lib-append	port:perl5.12 \
			port:rrdtool \
			port:p5.12-libwww-perl \
			port:p5.12-cgi-speedycgi \
			port:p5.12-socket6 \
			port:p5.12-net-snmp \
			port:p5.12-net-telnet \
			port:p5.12-net-dns \
			port:p5.12-net-radius \
			port:p5.12-perl-ldap \
			port:p5.12-io-socket-ssl \
			port:p5.12-pathtools \
			port:p5.12-snmp_session \
			port:fping \
			port:echoping \
			port:curl

set smokeroot ${prefix}/lib/smokeping
set smokedata ${prefix}/var/smokeping
set smokeetc ${prefix}/etc/smokeping
set smokedoc ${prefix}/share/doc/smokeping
set apple_apache_docroot /Library/WebServer/Documents
set macports_apache_docroot ${prefix}/apache2/htdocs

	startupitem.create	yes
	startupitem.name	smokeping
	startupitem.executable	${prefix}/bin/smokeping --nodaemon

variant apple_apache description {Use Apple's built-in Apache } {
# This variant doesn't do anything in the Smokeping port, but it triggers the
# same variant name in p5-cgi-speedycgi, which is necessary for SpeedyCGI to
# work with Apple's Apache.
}

use_configure		no
build {}

post-patch {
if { [variant_isset apple_apache] } {
	reinplace "s|__APACHE__DOCROOT__|${apple_apache_docroot}|g" \
		${worksrcpath}/etc/config.dist
} else {
	reinplace "s|__APACHE__DOCROOT__|${macports_apache_docroot}|g" \
		${worksrcpath}/etc/config.dist
}

	eval reinplace "s|__PREFIX__|${prefix}|g" \
		[glob ${worksrcpath}/bin/*.dist] \
		[glob ${worksrcpath}/etc/*.dist] \
		[glob ${worksrcpath}/htdocs/*.dist]

	eval reinplace "s|__PERL5__ARCHLIB__|${perl5.archlib}|g" \
                [glob ${worksrcpath}/bin/*.dist] \
                [glob ${worksrcpath}/htdocs/*.dist]

	eval reinplace "s|/usr/bin/perl|${prefix}/bin/perl5.12|g" \
                [glob ${worksrcpath}/bin/*.dist] \
                [glob ${worksrcpath}/etc/*.dist] \
                [glob ${worksrcpath}/htdocs/*.dist]

	reinplace "s|/usr/bin/|${prefix}/bin/|g" \
		${worksrcpath}/lib/Smokeping.pm \
		${worksrcpath}/lib/Smokeping/Examples.pm \
		${worksrcpath}/lib/Smokeping/probes/Curl.pm \
		${worksrcpath}/lib/Smokeping/probes/RemoteFPing.pm \
		${worksrcpath}/lib/Smokeping/probes/SSH.pm \
		${worksrcpath}/lib/Smokeping/probes/FPing6.pm \
		${worksrcpath}/lib/Smokeping/probes/EchoPing.pm \
		${worksrcpath}/lib/Smokeping/probes/FPing.pm

	reinplace "s|/usr/share/smokeping/etc|${smokeetc}|g" \
		${worksrcpath}/lib/Smokeping/probes/passwordchecker.pm
}

destroot {
# bin
	xinstall -m 755 -d ${destroot}${prefix}/bin
	xinstall -m 755 ${worksrcpath}/bin/smokeping.dist ${destroot}${prefix}/bin/smokeping
	xinstall -m 755 ${worksrcpath}/bin/tSmoke.dist ${destroot}${prefix}/bin/tSmoke

# doc
	xinstall -m 755 -d ${destroot}${smokedoc}
	system "cp -R ${worksrcpath}/doc/ ${destroot}${smokedoc}"
	file copy ${worksrcpath}/README ${destroot}${smokedoc}
	file copy ${worksrcpath}/TODO ${destroot}${smokedoc}

# etc
# Leave the config.dist filename for users to remove so upgrades won't destroy the config file.
	xinstall -m 755 -d ${destroot}${smokeetc}
	eval xinstall -m 640 [glob ${worksrcpath}/etc/*.dist] ${destroot}${smokeetc}

# lib
	system "cp -R ${worksrcpath}/lib/ ${destroot}${smokeroot}"

# Smokeping data directory that needs to be symlinked to Apache docroot
	xinstall -m 755 -d ${destroot}${smokedata}

# Smokeping log directory
	xinstall -m 755 -d ${destroot}${smokedata}/log

# htdocs
        xinstall -m 755 ${worksrcpath}/htdocs/smokeping.cgi.dist \
                ${destroot}${smokedata}/smokeping.cgi
        xinstall -m 755 -d ${destroot}${smokedata}/cropper
        system "cp -R ${worksrcpath}/htdocs/cropper/ ${destroot}${smokedata}/cropper"

# Retain these empty directories
	destroot.keepdirs ${destroot}${smokedata}/log
}

post-activate {
ui_msg "\n  #### To complete the Smokeping installation ####

1) Enable SpeedyCGI (installed as a dependency of Smokeping) for Apache.

   -For MacPorts Apache 2, add the line below to ${prefix}/apache2/conf/httpd.conf.

	LoadModule speedycgi_module modules/mod_speedycgi.so

   -For Apple's Apache 2, manually copy mod_speedycgi.so and smokeping.cgi
    into place ...

	sudo cp ${prefix}/share/doc/speedycgi/mod_speedycgi.so /usr/libexec/apache2
	sudo cp ${prefix}${smokedata}/smokeping.cgi /Library/WebServer/CGI-Executables

   ... and add the lines below to /etc/apache2/httpd.conf.

	LoadModule speedycgi_module libexec/apache2/mod_speedycgi.so


2)  Changes to httpd.conf for Smokeping.

   -Uncomment this line to enable the CGI script handler.

	AddHandler cgi-script .cgi

   -Add a directive for Smokeping's data directory and add
    smokeping.cgi to DirectoryIndex for a simple /smokeping url.

	Alias /smokeping \"${prefix}/var/smokeping\"
	<Directory \"${prefix}/var/smokeping\">
	    Allow from all
	    Options ExecCGI
	</Directory>

	<IfModule dir_module>
	    DirectoryIndex index.html smokeping.cgi
	</IfModule>


3) Set Smokeping data directory permissions to the Apache user and group set
   in httpd.conf.  The default Apache user and group for OS X is www.

	sudo chown -R <smokeping-user>:<smokeping-group> ${smokedata}/


4) Setup Smokeping logging.

   -Add this statement to /etc/syslog.conf.

   local1.*	${smokedata}/log/smokeping.log

   -Create a logfile to receive the log messages.

	cd ${smokedata}/log
	sudo touch smokeping.log
	sudo chmod 600 smokeping.log
	sudo chown root:admin smokeping.log

   -Then restart the syslog facility.

	sudo kill -HUP `cat /var/run/syslog.pid`


5) Rename and edit the ${smokeetc}/config sample files, then test your config file.

   -Remove the .dist extension from all files; do not change the filenames.

        cd ${smokeetc}
        sudo mv config.dist config

   -Set the DNS names for the Smokeping config file url's \"imageurl\" and \"cgiurl\".
    But you should leave all file paths alone -they are set by MacPorts.

	imgurl   = http://myhost.mycompany.com/smokeping
	cgiurl   = http://myhost.mycompany.com/smokeping/smokeping.cgi

   -Customize variables.

     * General * - owner, contact, and mailhost
     * Alerts  * - to, from addresses

   -Then clear the examples \(they have a leading '+'\) in the *** Targets ***
    section and set your own.

        + My Web Server
           menu = MyWebServer
           title = My Web Server
           host = mywebserver.mydomain.com
           alerts = bigloss,someloss,startloss

    -See sample configurations and examples in ${prefix}/share/doc/smokeping/.

    -Perform a config file test from a terminal window and correct any errors that
     are reported.

	smokeping --check


6) Start Smokeping and verify it is running.  (Give it a minute to start)

	sudo launchctl load -w /Library/LaunchDaemons/org.macports.smokeping.plist
	ps -ax |grep smoke

 1713  Ss 0:00.16 ${prefix}/bin/smokeping \[FPing\]
 1753  Ss 0:00.18 ${prefix}/bin/speedy_backend -w ${prefix}/apache2/htdocs/smokeping/smokeping.cgi
 1754  S  0:01.56 ${prefix}/bin/speedy_backend -w ${prefix}/apache2/htdocs/smokeping/smokeping.cgi


7) Check the Smokeping graphs with a web browser.

   Go to http://localhost/smokeping


8) Add or remove targets from Smokeping.

   After adding or removing targets from ${smokeetc}/config, you must reload
   Smokeping from a terminal window.

	sudo smokeping --reload
\n"
}
