diff --git a/dokku b/dokku index 6316a5a5e3a..4252f831f28 100755 --- a/dokku +++ b/dokku @@ -10,6 +10,9 @@ export PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"} export DOKKU_NOT_IMPLEMENTED_EXIT=10 export DOKKU_VALID_EXIT=0 +export DOKKU_LOGS_DIR=${DOKKU_LOGS_DIR:="/var/log/dokku"} +export DOKKU_EVENTS_LOGFILE=${DOKKU_EVENTS_LOGFILE:="$DOKKU_LOGS_DIR/events.log"} + source "$PLUGIN_PATH/common/functions" [[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc diff --git a/plugins/20_events/backup-check b/plugins/20_events/backup-check new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/backup-check @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/backup-export b/plugins/20_events/backup-export new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/backup-export @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/backup-import b/plugins/20_events/backup-import new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/backup-import @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/bind-external-ip b/plugins/20_events/bind-external-ip new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/bind-external-ip @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/check-deploy b/plugins/20_events/check-deploy new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/check-deploy @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/commands b/plugins/20_events/commands new file mode 100755 index 00000000000..62f0ea47594 --- /dev/null +++ b/plugins/20_events/commands @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$(dirname $0)/../common/functions" + +PLUGIN_DIR="$(dirname $0)" + +case "$1" in + events) + if [[ -f $DOKKU_EVENTS_LOGFILE ]] ; then + if [[ $2 == "-t" ]]; then + tail -f $DOKKU_EVENTS_LOGFILE + else + tail -n 100 $DOKKU_EVENTS_LOGFILE + fi + fi + ;; + + events:on) + echo "Enabling dokku events logger" + [[ -d $DOKKU_ROOT/.dokkurc ]] || mkdir -p $DOKKU_ROOT/.dokkurc + echo "export DOKKU_EVENTS=1" > $DOKKU_ROOT/.dokkurc/DOKKU_EVENTS + ;; + + events:off) + echo "Disabling dokku events logger" + rm -f $DOKKU_ROOT/.dokkurc/DOKKU_EVENTS + ;; + + events:list) + if [[ "$DOKKU_EVENTS" ]]; then + logged="$(find $PLUGIN_DIR -type l -printf '%f ' | sort)" + dokku_col_log_info2_quiet "Events currently logged" + for hook in $logged ; do + dokku_col_log_msg "$hook" + done + else + dokku_log_warn "Events logger disabled" + fi + ;; + + help | events:help) + cat && cat<"$DOKKU_RSYSLOG_FILTER" <"$DOKKU_LOGROTATE_FILE" </dev/null 2>&1 || true + endscript + create 664 syslog dokku +} +EOF + flag_rsyslog_needs_restart=y +fi + +if [[ "$flag_rsyslog_needs_restart" == "y" ]]; then + service rsyslog restart +fi + +[[ ! "$DOKKU_EVENTS" ]] || dokku_log_pluginhook_call "$(basename $0)" "$@" + +exit 0 diff --git a/plugins/20_events/nginx-hostname b/plugins/20_events/nginx-hostname new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/nginx-hostname @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/nginx-pre-reload b/plugins/20_events/nginx-pre-reload new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/nginx-pre-reload @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/post-build-buildstep b/plugins/20_events/post-build-buildstep new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/post-build-buildstep @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/post-build-dockerfile b/plugins/20_events/post-build-dockerfile new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/post-build-dockerfile @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/post-delete b/plugins/20_events/post-delete new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/post-delete @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/post-deploy b/plugins/20_events/post-deploy new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/post-deploy @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/post-domains-update b/plugins/20_events/post-domains-update new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/post-domains-update @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/post-release-buildstep b/plugins/20_events/post-release-buildstep new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/post-release-buildstep @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/post-release-dockerfile b/plugins/20_events/post-release-dockerfile new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/post-release-dockerfile @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/pre-build-buildstep b/plugins/20_events/pre-build-buildstep new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/pre-build-buildstep @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/pre-build-dockerfile b/plugins/20_events/pre-build-dockerfile new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/pre-build-dockerfile @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/pre-delete b/plugins/20_events/pre-delete new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/pre-delete @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/pre-deploy b/plugins/20_events/pre-deploy new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/pre-deploy @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/pre-release-buildstep b/plugins/20_events/pre-release-buildstep new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/pre-release-buildstep @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/pre-release-dockerfile b/plugins/20_events/pre-release-dockerfile new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/pre-release-dockerfile @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/receive-app b/plugins/20_events/receive-app new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/receive-app @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/update b/plugins/20_events/update new file mode 120000 index 00000000000..5178a749ff6 --- /dev/null +++ b/plugins/20_events/update @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/common/functions b/plugins/common/functions index 7bc26b0ce3f..c7afd2bc190 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -90,6 +90,17 @@ dokku_log_fail() { exit 1 } +dokku_log_event() { + logger -t dokku -i -- "$@" +} + +dokku_log_pluginhook_call() { + local l_hook + + l_hook="$1" ; shift + dokku_log_event "INVOKED: ${l_hook}( $@ )" +} + dokku_container_log_verbose_quiet() { CID=$1; shift diff --git a/tests/unit/events.bats b/tests/unit/events.bats new file mode 100644 index 00000000000..e54e3833999 --- /dev/null +++ b/tests/unit/events.bats @@ -0,0 +1,40 @@ +#!/usr/bin/env bats + +load test_helper + +setup() { + create_app +} + +teardown() { + destroy_app +} + +@test "(events) check conffiles" { + run bash -c "test -f /etc/logrotate.d/dokku" + echo "output: "$output + echo "status: "$status + assert_success + run bash -c "test -f /etc/rsyslog.d/99-dokku.conf" + echo "output: "$output + echo "status: "$status + assert_success + run bash -c "stat -c '%U:%G:%a' /var/log/dokku/" + echo "output: "$output + echo "status: "$status + assert_output "syslog:dokku:775" + run bash -c "stat -c '%U:%G:%a' /var/log/dokku/events.log" + echo "output: "$output + echo "status: "$status + assert_output "syslog:dokku:664" +} + +@test "(events) log commands" { + run dokku events:on + deploy_app + run dokku events + echo "output: "$output + echo "status: "$status + assert_success + run dokku events:off +}