From 783bb02b2c77e2c5b11f5095c9d99cb07f0d72f4 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Fri, 26 Jun 2015 13:14:04 +0100 Subject: [PATCH] Implement events logging feature Record events (i.e. pluginhook's calls) as syslog entries and provide a shortcut command to display the last part of the log file. A brief summary of the changes follows: dokku: - New DOKKU_EVENTS_LOGFILE envvar to hold logfile location. plugins/20_events/commands: - events output log entries, a tail's follow-like mode is provided too. - events:[on|off] enables/disables logging. - events:list lists events that are logged. plugins/20_events/hook: - Generic hook that writes log entries. All the events are registered via symlink to this script. plugins/common/functions: - dokku_log_event() writes log entries via logger. - dokku_log_pluginhook_call() formats log entries and writes them via dokku_log_event(). --- dokku | 2 + plugins/20_events/backup-check | 1 + plugins/20_events/backup-export | 1 + plugins/20_events/backup-import | 1 + plugins/20_events/bind-external-ip | 1 + plugins/20_events/check-deploy | 1 + plugins/20_events/commands | 54 +++++++++++++++++++++++ plugins/20_events/dependencies | 1 + plugins/20_events/docker-args-build | 1 + plugins/20_events/docker-args-deploy | 1 + plugins/20_events/docker-args-run | 1 + plugins/20_events/git-post-pull | 1 + plugins/20_events/git-pre-pull | 1 + plugins/20_events/hook | 5 +++ plugins/20_events/install | 20 +++++++++ plugins/20_events/nginx-hostname | 1 + plugins/20_events/nginx-pre-reload | 1 + plugins/20_events/post-build-buildstep | 1 + plugins/20_events/post-build-dockerfile | 1 + plugins/20_events/post-delete | 1 + plugins/20_events/post-deploy | 1 + plugins/20_events/post-domains-update | 1 + plugins/20_events/post-release-buildstep | 1 + plugins/20_events/post-release-dockerfile | 1 + plugins/20_events/pre-build-buildstep | 1 + plugins/20_events/pre-build-dockerfile | 1 + plugins/20_events/pre-delete | 1 + plugins/20_events/pre-deploy | 1 + plugins/20_events/pre-release-buildstep | 1 + plugins/20_events/pre-release-dockerfile | 1 + plugins/20_events/receive-app | 1 + plugins/20_events/update | 1 + plugins/common/functions | 11 +++++ 33 files changed, 120 insertions(+) create mode 120000 plugins/20_events/backup-check create mode 120000 plugins/20_events/backup-export create mode 120000 plugins/20_events/backup-import create mode 120000 plugins/20_events/bind-external-ip create mode 120000 plugins/20_events/check-deploy create mode 100755 plugins/20_events/commands create mode 120000 plugins/20_events/dependencies create mode 120000 plugins/20_events/docker-args-build create mode 120000 plugins/20_events/docker-args-deploy create mode 120000 plugins/20_events/docker-args-run create mode 120000 plugins/20_events/git-post-pull create mode 120000 plugins/20_events/git-pre-pull create mode 100755 plugins/20_events/hook create mode 100755 plugins/20_events/install create mode 120000 plugins/20_events/nginx-hostname create mode 120000 plugins/20_events/nginx-pre-reload create mode 120000 plugins/20_events/post-build-buildstep create mode 120000 plugins/20_events/post-build-dockerfile create mode 120000 plugins/20_events/post-delete create mode 120000 plugins/20_events/post-deploy create mode 120000 plugins/20_events/post-domains-update create mode 120000 plugins/20_events/post-release-buildstep create mode 120000 plugins/20_events/post-release-dockerfile create mode 120000 plugins/20_events/pre-build-buildstep create mode 120000 plugins/20_events/pre-build-dockerfile create mode 120000 plugins/20_events/pre-delete create mode 120000 plugins/20_events/pre-deploy create mode 120000 plugins/20_events/pre-release-buildstep create mode 120000 plugins/20_events/pre-release-dockerfile create mode 120000 plugins/20_events/receive-app create mode 120000 plugins/20_events/update diff --git a/dokku b/dokku index 6316a5a5e..b11e051ec 100755 --- a/dokku +++ b/dokku @@ -10,6 +10,8 @@ export PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"} export DOKKU_NOT_IMPLEMENTED_EXIT=10 export DOKKU_VALID_EXIT=0 +export DOKKU_EVENTS_LOGFILE=${DOKKU_EVENTS_LOGFILE:="/var/log/dokku.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 000000000..5178a749f --- /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 000000000..5178a749f --- /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 000000000..5178a749f --- /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 000000000..5178a749f --- /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 000000000..5178a749f --- /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 000000000..377fee86f --- /dev/null +++ b/plugins/20_events/commands @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$(dirname $0)/../common/functions" + +find "$l_plugin_dir" -type l -printf "%f " | sort + +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 + dokku_col_log_info2_quiet "Events currently logged" + for hook in $(find $(dirname $0) -type l -printf "%f " | sort) ; do + dokku_col_log_msg "$hook" + done + else + dokku_log_warn "Events logger disabled" + fi + ;; + + help | events:help) + cat && cat<"$DOKKU_RSYSLOG_FILTER" <