add a bash log library alilog4bash.sh
[u/mrichter/AliRoot.git] / PWGPP / scripts / alilog4bash.sh
1 #!/usr/bin/env bash
2 #
3 #adopted for ALICE from:
4 #--------------------------------------------------------------------------------------------------
5 # log4bash - Makes logging in Bash scripting suck less
6 # Copyright (c) Fred Palmer
7 # Licensed under the MIT license
8 # http://github.com/fredpalmer/log4bash
9 #--------------------------------------------------------------------------------------------------
10
11 # Useful global variables that users may wish to reference
12 ALILOG_SCRIPT_ARGS="$@"
13 ALILOG_SCRIPT_NAME="$0"
14 ALILOG_SCRIPT_NAME="${SCRIPT_NAME#\./}"
15 ALILOG_SCRIPT_NAME="${SCRIPT_NAME##/*/}"
16 ALILOG_SCRIPT_BASE_DIR="$(cd "$( dirname "$0")" && pwd )"
17
18 # This should probably be the right way - didn't have time to experiment though
19 # declare -r ALILOG_INTERACTIVE_MODE="$([ tty --silent ] && echo on || echo off)"
20 # declare -r ALILOG_INTERACTIVE_MODE=$([ "$(uname)" == "Darwin" ] && echo "on" || echo "off")
21 declare -r ALILOG_INTERACTIVE_MODE="off"
22
23 #--------------------------------------------------------------------------------------------------
24 # Begin Help Section
25
26 ALILOG_HELP_TEXT=""
27
28 # This function is called in the event of an error.
29 # Scripts which source this script may override by defining their own "alilog_usage" function
30 alilog_usage() {
31     echo -e "${HELP_TEXT}";
32     return 1;
33 }
34
35 # End Help Section
36 #--------------------------------------------------------------------------------------------------
37
38 #--------------------------------------------------------------------------------------------------
39 # Begin Logging Section
40 if [[ "${ALILOG_INTERACTIVE_MODE}" == "off" ]]
41 then
42     # Then we don't care about alilog colors
43     declare -r ALILOG_DEFAULT_COLOR=""
44     declare -r ALILOG_ERROR_COLOR=""
45     declare -r ALILOG_INFO_COLOR=""
46     declare -r ALILOG_SUCCESS_COLOR=""
47     declare -r ALILOG_WARN_COLOR=""
48     declare -r ALILOG_DEBUG_COLOR=""
49 else
50     declare -r ALILOG_DEFAULT_COLOR="\033[0m"
51     declare -r ALILOG_ERROR_COLOR="\033[1;31m"
52     declare -r ALILOG_INFO_COLOR="\033[1m"
53     declare -r ALILOG_SUCCESS_COLOR="\033[1;32m"
54     declare -r ALILOG_WARN_COLOR="\033[1;33m"
55     declare -r ALILOG_DEBUG_COLOR="\033[1;34m"
56 fi
57
58 # This function scrubs the output of any control characters used in colorized output
59 # It's designed to be piped through with text that needs scrubbing.  The scrubbed
60 # text will come out the other side!
61 prepare_alilog_for_nonterminal() {
62     # Essentially this strips all the control characters for alilog colors
63     sed "s/[[:cntrl:]]\[[0-9;]*m//g"
64 }
65
66 alilog() {
67     local alilog_text="$1"
68     local alilog_level="$2"
69     local alilog_color="$3"
70
71     # Default level to "info"
72     [[ -z ${alilog_level} ]] && alilog_level="INFO";
73     [[ -z ${alilog_color} ]] && alilog_color="${ALILOG_INFO_COLOR}";
74
75     echo -e "${alilog_color}[$(date +"%Y-%m-%d %H:%M:%S %Z")] [${alilog_level}] ${alilog_text} ${ALILOG_DEFAULT_COLOR}";
76     return 0;
77 }
78
79 alilog_info()      { alilog "$@"; }
80
81 alilog_speak()     {
82     if type -P say >/dev/null
83     then
84         local easier_to_say="$1";
85         case "${easier_to_say}" in
86             studionowdev*)
87                 easier_to_say="studio now dev ${easier_to_say#studionowdev}";
88                 ;;
89             studionow*)
90                 easier_to_say="studio now ${easier_to_say#studionow}";
91                 ;;
92         esac
93         say "${easier_to_say}";
94     fi
95     return 0;
96 }
97
98 alilog_success()   { alilog "$1" "SUCCESS" "${ALILOG_SUCCESS_COLOR}"; }
99 alilog_error()     { alilog "$1" "ERROR" "${ALILOG_ERROR_COLOR}"; alilog_speak "$1"; }
100 alilog_warning()   { alilog "$1" "WARNING" "${ALILOG_WARN_COLOR}"; }
101 alilog_debug()     { alilog "$1" "DEBUG" "${ALILOG_DEBUG_COLOR}"; }
102 alilog_captains()  {
103     if type -P figlet >/dev/null;
104     then
105         figlet -f computer -w 120 "$1";
106     else
107         alilog "$1";
108     fi
109     
110     alilog_speak "$1";
111
112     return 0;
113 }
114
115 alilog_campfire() {
116     # This function performs a campfire notification with the arguments passed to it
117     if [[ -z ${CAMPFIRE_API_AUTH_TOKEN} || -z ${CAMPFIRE_NOTIFICATION_URL} ]]
118     then
119         alilog_warning "CAMPFIRE_API_AUTH_TOKEN and CAMPFIRE_NOTIFICATION_URL must be set in order alilog to campfire."
120         return 1;
121     fi
122
123     local campfire_message="
124     {
125         \"message\": {
126             \"type\":\"TextMessage\",
127             \"body\":\"$@\"
128         }
129     }"
130
131     curl                                                            \
132         --write-out "\r\n"                                          \
133         --user ${CAMPFIRE_API_AUTH_TOKEN}:X                         \
134         --header 'Content-Type: application/json'                   \
135         --data "${campfire_message}"                                \
136         ${CAMPFIRE_NOTIFICATION_URL}
137
138     return $?;
139 }
140
141 # End Logging Section
142 #--------------------------------------------------------------------------------------------------
143