aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt Jaeger <pi@FreeBSD.org>2016-03-20 20:20:13 +0000
committerKurt Jaeger <pi@FreeBSD.org>2016-03-20 20:20:13 +0000
commita30d6e77afe6ad0b7573e16aa819b08355439224 (patch)
treeb992649d45772f7e3f421922372ac33b0219e631
parent347c925ee59d4ed37e27c0dda29c249ad4666a53 (diff)
New port: sysutils/hfm
hfm is an application to run tests in parallel at a high frequency. If the outcome of the test results in a state change, other commands can be executed. It is designed to be a general purpose, loosely-coupled tool, by having both the tests and the state change commands be executed by the operating system. For example, one could write the test in shell or c, and have it called through the exec facility. In practice, the overhead of spawning a new process per test limits frequency that can be achieved by the tests, and their results. Anecdotally, 5ms intervals have been seen to be achievable. An example application is to poll other network services for health, and to take actions based on their health status changes. WWW: https://github.com/derekmarcotte/hfm PR: 207392 Submitted by: 554b8425@razorfever.net
Notes
Notes: svn path=/head/; revision=411516
-rw-r--r--GIDs1
-rw-r--r--UIDs1
-rw-r--r--sysutils/Makefile1
-rw-r--r--sysutils/hfm/Makefile56
-rw-r--r--sysutils/hfm/distinfo6
-rw-r--r--sysutils/hfm/files/hfm.in47
-rw-r--r--sysutils/hfm/pkg-descr17
-rw-r--r--sysutils/hfm/pkg-message5
-rw-r--r--sysutils/hfm/pkg-plist8
9 files changed, 142 insertions, 0 deletions
diff --git a/GIDs b/GIDs
index 4fda8d3edec4..af219598b9c9 100644
--- a/GIDs
+++ b/GIDs
@@ -137,6 +137,7 @@ bs:*:220:
rtpproxy:*:222:
postgrey:*:225:
sqlgrey:*:226:
+_hfm:*:227:
kismet:*:229:
aprsd:*:240:
tnc:*:241:
diff --git a/UIDs b/UIDs
index d44d75605ed1..a88057daeb48 100644
--- a/UIDs
+++ b/UIDs
@@ -142,6 +142,7 @@ bs:*:220:220::0:0:Big Sister:/usr/local/bigsister:/bin/sh
rtpproxy:*:222:222::0:0:& user:/nonexistent:/sbin/nologin
postgrey:*:225:225::0:0:Postgrey Owner:/nonexistent:/usr/sbin/nologin
sqlgrey:*:226:226::0:0:SQLgrey Owner:/nonexistent:/usr/sbin/nologin
+_hfm:*:227:227::0:0:hfm daemon:/nonexistent:/usr/sbin/nologin
aprsd:*:240:240::0:0:aprsd:/nonexistent:/bin/sh
tnc:*:241:241::0:0:aprsd:/nonexistent:/bin/sh
prosody:*:242:242::0:0:Prosody Jabber Server:/nonexistent:/usr/sbin/nologin
diff --git a/sysutils/Makefile b/sysutils/Makefile
index 0c12b90b8968..776b38eb1258 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -405,6 +405,7 @@
SUBDIR += heartbeat
SUBDIR += heirloom
SUBDIR += hextools
+ SUBDIR += hfm
SUBDIR += hfsexplorer
SUBDIR += hfsutils
SUBDIR += hidesvn
diff --git a/sysutils/hfm/Makefile b/sysutils/hfm/Makefile
new file mode 100644
index 000000000000..4e4d0563d0da
--- /dev/null
+++ b/sysutils/hfm/Makefile
@@ -0,0 +1,56 @@
+# $FreeBSD$
+
+PORTNAME= hfm
+PORTVERSION= 1.1.3
+DISTVERSIONPREFIX= v
+CATEGORIES= sysutils
+
+MAINTAINER= 554b8425@razorfever.net
+COMMENT= Run tests in parallel at high frequency
+
+LICENSE= BSD2CLAUSE
+
+# gb 0.4 includes FreeBSD-specific fixes that this port requires
+# https://github.com/constabulary/gb/issues/506
+BUILD_DEPENDS= go>=1.5:${PORTSDIR}/lang/go \
+ gb>=0.4:${PORTSDIR}/devel/gb \
+ ${LOCALBASE}/lib/libucl.a:${PORTSDIR}/textproc/libucl
+
+USES= compiler:c++11-lang
+USE_GITHUB= yes
+
+GH_ACCOUNT= derekmarcotte mitchellh:gu op:gl
+GH_PROJECT= hfm go-libucl:gu go-logging:gl
+GH_TAGNAME= ${DISTVERSIONFULL} f9d0e55:gu dfaf3df:gl
+
+USERS= _hfm
+GROUPS= _hfm
+
+USE_RC_SUBR= hfm
+
+MAKE_ARGS+= ETCDIR=${ETCDIR} TAG=${DISTVERSIONPREFIX}${PORTVERSION}
+
+NO_INSTALL= yes
+ALL_TARGET= test build
+
+post-extract:
+ ${MKDIR} ${WRKSRC}/vendor/src/github.com/mitchellh/go-libucl
+ ${MV} ${WRKDIR}/go-libucl-f9d0e55/* ${WRKSRC}/vendor/src/github.com/mitchellh/go-libucl/
+ ${MKDIR} ${WRKSRC}/vendor/src/github.com/op/go-logging
+ ${MV} ${WRKDIR}/go-logging-dfaf3df/* ${WRKSRC}/vendor/src/github.com/op/go-logging/
+
+do-patch:
+ (cd ${WRKSRC}; ${PATCH} vendor/src/github.com/mitchellh/go-libucl/libucl.go < vendor/patches/github.com/mitchellh/go-libucl/libucl.go.patch )
+
+do-install:
+ @${MKDIR} ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_PROGRAM} ${WRKSRC}/bin/hfm ${STAGEDIR}${PREFIX}/bin
+ @${MKDIR} ${STAGEDIR}${ETCDIR}
+ ${INSTALL_DATA} ${WRKSRC}/examples/hfm.conf.sample ${STAGEDIR}${ETCDIR}
+ @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ ${INSTALL_DATA} ${WRKSRC}/examples/* ${STAGEDIR}${EXAMPLESDIR}
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/README.md ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/doc/* ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.mk>
diff --git a/sysutils/hfm/distinfo b/sysutils/hfm/distinfo
new file mode 100644
index 000000000000..11a1c39c14a3
--- /dev/null
+++ b/sysutils/hfm/distinfo
@@ -0,0 +1,6 @@
+SHA256 (derekmarcotte-hfm-v1.1.3_GH0.tar.gz) = 8e00fbb4a640ac5cd6473f4705043af4067be731cdabc5aeb882121a0ccae743
+SIZE (derekmarcotte-hfm-v1.1.3_GH0.tar.gz) = 33915
+SHA256 (mitchellh-go-libucl-f9d0e55_GH0.tar.gz) = 955e56fa334e7131ca313098fcf0a91ce89270cf1294d2a07830aa1c17b58fc0
+SIZE (mitchellh-go-libucl-f9d0e55_GH0.tar.gz) = 9426
+SHA256 (op-go-logging-dfaf3df_GH0.tar.gz) = d34d3afbdb07ad92f51d2a0a9f2682a4c0fcece733618a4ad27013e5ab6c8b60
+SIZE (op-go-logging-dfaf3df_GH0.tar.gz) = 35747
diff --git a/sysutils/hfm/files/hfm.in b/sysutils/hfm/files/hfm.in
new file mode 100644
index 000000000000..74e216fe9679
--- /dev/null
+++ b/sysutils/hfm/files/hfm.in
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# $FreeBSD$
+#
+# PROVIDE: hfm
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# Add these lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# hfm_enable (bool): Set to NO by default.
+# Set it to YES to enable hfm.
+#
+# hfm_flags (bool): Check the sources of hfm for flags
+#
+
+. /etc/rc.subr
+
+name=hfm
+rcvar=hfm_enable
+
+command="%%PREFIX%%/bin/${name}"
+
+hfm_user=_hfm
+hfm_flags=${hfm_flags:-"-config %%ETCDIR%%/${name}.conf -facility local0 -log syslog"}
+
+pidfile="/var/run/${name}.pid"
+
+required_files="%%ETCDIR%%/${name}.conf"
+
+start_cmd=hfm_start
+stop_postcmd=hfm_postcmd
+
+hfm_start() {
+ echo "Staring ${name}."
+
+ /usr/sbin/daemon -cf -u ${hfm_user} -p ${pidfile} ${command} ${hfm_flags}
+}
+
+hfm_postcmd() {
+ [ -f ${pidfile} ] && rm ${pidfile}
+}
+
+load_rc_config $name
+run_rc_command "$1"
+
diff --git a/sysutils/hfm/pkg-descr b/sysutils/hfm/pkg-descr
new file mode 100644
index 000000000000..431436bd27da
--- /dev/null
+++ b/sysutils/hfm/pkg-descr
@@ -0,0 +1,17 @@
+hfm is an application to run tests in parallel at a high frequency.
+If the outcome of the test results in a state change, other commands
+can be executed.
+
+It is designed to be a general purpose, loosely-coupled tool, by
+having both the tests and the state change commands be executed by
+the operating system. For example, one could write the test in
+shell or c, and have it called through the exec facility.
+
+In practice, the overhead of spawning a new process per test limits
+frequency that can be achieved by the tests, and their results.
+Anecdotally, 5ms intervals have been seen to be achievable.
+
+An example application is to poll other network services for health,
+and to take actions based on their health status changes.
+
+WWW: https://github.com/derekmarcotte/hfm
diff --git a/sysutils/hfm/pkg-message b/sysutils/hfm/pkg-message
new file mode 100644
index 000000000000..52dc919ad1bb
--- /dev/null
+++ b/sysutils/hfm/pkg-message
@@ -0,0 +1,5 @@
+hfm includes an rc.d script to control a daemon mode. Use:
+
+sysrc hfh_enable=yes
+
+to enable.
diff --git a/sysutils/hfm/pkg-plist b/sysutils/hfm/pkg-plist
new file mode 100644
index 000000000000..a6359bce5f99
--- /dev/null
+++ b/sysutils/hfm/pkg-plist
@@ -0,0 +1,8 @@
+bin/hfm
+%%PORTDOCS%%%%DOCSDIR%%/README.md
+%%PORTDOCS%%%%DOCSDIR%%/architecture-90dpi.png
+%%PORTDOCS%%%%DOCSDIR%%/architecture.svg
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/hfm-test-fast.conf
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/hfm-test-start-delay.conf
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/hfm.conf.sample
+@sample %%ETCDIR%%/hfm.conf.sample