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
This commit is contained in:
Kurt Jaeger 2016-03-20 20:20:13 +00:00
parent 347c925ee5
commit a30d6e77af
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=411516
9 changed files with 142 additions and 0 deletions

1
GIDs
View File

@ -137,6 +137,7 @@ bs:*:220:
rtpproxy:*:222:
postgrey:*:225:
sqlgrey:*:226:
_hfm:*:227:
kismet:*:229:
aprsd:*:240:
tnc:*:241:

1
UIDs
View File

@ -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

View File

@ -405,6 +405,7 @@
SUBDIR += heartbeat
SUBDIR += heirloom
SUBDIR += hextools
SUBDIR += hfm
SUBDIR += hfsexplorer
SUBDIR += hfsutils
SUBDIR += hidesvn

56
sysutils/hfm/Makefile Normal file
View File

@ -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>

6
sysutils/hfm/distinfo Normal file
View File

@ -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

47
sysutils/hfm/files/hfm.in Normal file
View File

@ -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"

17
sysutils/hfm/pkg-descr Normal file
View File

@ -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

5
sysutils/hfm/pkg-message Normal file
View File

@ -0,0 +1,5 @@
hfm includes an rc.d script to control a daemon mode. Use:
sysrc hfh_enable=yes
to enable.

8
sysutils/hfm/pkg-plist Normal file
View File

@ -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