CptHook provides a single endpoint where you can point all your webhook notifications to and get the nicely formatted in an IRC channel of your choice.
Take a look at the input folder to find out which services are already supported by CptHook.
If you have questions or problems come chat with us in #CptHook on HackInt -> WebChat
Requirements
- Go >= 1.11
# go get -u github.com/fleaz/CptHook
# cp $GOPATH/bin/CptHook /usr/local/bin/CptHook
# vim /etc/cpthook.yml
# CptHook
vim cpthook.yml
docker run --rm -it -v $(pwd)/cpthook.yml:/etc/cpthook.yml -p 8086:8086 ghcr.io/fleaz/cpthook:stable
Visit the GitHub release page to download them.
SASL support is available to authenticate to the server. The following methods are supported:
SASL-Plain
uses plaintext username and password authenticationSASL-External
can be used with external authentication mechanism like CertFP
To use CertFP, a client certificate (certfile
) and key (keyfile
) must be specified in the irc.ssl.client_cert
section and the SASL-External
authentication method must be used.
These settings are available for all modules
- endpoint
Defines the URI where the module is reachable.
- type
The input module you want to initialize in this block.
- default_channel
Defines a fallback channel where messages should go if none of the defined filters has matched. Only used in modules which have some kind of routing for events, e.g. the Gitlab module.
Receives webhooks from Alertmanager.
- hostname_filter
This regex is used to shorten the hostname of instance name in an alert. This
regex must contain exactly one capture group which will be used as the
hostname if the regex matches.
Receives webhooks from Gitlab. Currently not all event types are implemented! When a webhook is received this
module will first check if there is an explicit mapping in the configuration especially for this project. If yes,
this channel will be used. If not, the module will look if there exists for the group. If yes, this channel will be
used. If not, the default_channel
will be used.
- groups
This dictionary maps Gitlab groups to IRC-channels.
- explicit
This dictionary maps full project paths (groupname/projectname) to IRC-channels.
Receives arbitrary messages as text via a HTTP POST
request and forwards this message line by line to a channel.
The channel can be specified per request by the channel
query parameter, otherwise the default_channel
from the config will
be used.
Receives webhooks from Icinga2. Add icinga2-notifications-webhook to your Icinga2 installation to send the required webhooks.
When a webhook is received this module will first check if there is an explicit
mapping in the configuration especially for this host. If yes, this channel will be used. If not, the module will
look if there exists for the hostgroup. If yes, this channel will be used. If not, the default_channel
channel will be used.
- hostgroups
This dictionary maps Icinga2 hostgroups to IRC-channels.
- explicit
This dictionary maps hostnames to IRC-channels.
When you want to create a new module, e.g. for the service 'Foo', follow these steps to get started:
- Add a section 'foo' to
cpthook_example.yml
. Everything belowcpthook.foo
will be provided to your module. - Add a case to the
main.createModuleObject
function - Create
foo.go
andfoo_test.go
files in theinput
folder - Implement the
Module
interface according toinput/helper.go
- Bonus task: Be a good programmer and write a test :)