lib/pvl/log.sh
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 23:31:13 +0200
changeset 738 3104fdf7ea26
parent 718 f1c352644c2a
permissions -rw-r--r--
pvl.hosts.hosts: drop support for instanced ip.* in favor of improved interface:ip.* =
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
# Logging output
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
627
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
     3
log_GETOPTS="qvDV"
624
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
     4
627
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
     5
LOG=y
624
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
     6
LOG_ERROR=y
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
     7
LOG_WARN=y
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
     8
LOG_FORCE=y
627
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
     9
LOG_APPLY=y
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 631
diff changeset
    10
LOG_CHECK=
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 703
diff changeset
    11
LOG_CHANGED=
624
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    12
LOG_NOOP=y
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    13
LOG_SKIP=
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    14
LOG_DEBUG=
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    15
LOG_CMD=
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    16
LOG_DIFF=y
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    17
627
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    18
# use color output?
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    19
IS_TTY=
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    20
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    21
function log_help {
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    22
    cat <<END
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    23
Logging:    
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    24
    -q      quiet
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    25
    -v      verbose
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    26
    -D      debug
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    27
    -V      debug commands
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    28
END
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    29
}
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    30
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    31
function log_opt {
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    32
    local opt=$1
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    33
    local optarg="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    34
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    35
    case $opt in
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    36
        q)  
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    37
            LOG= 
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    38
            LOG_WARN=
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    39
            LOG_APPLY=
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    40
            LOG_FORCE=
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    41
            LOG_NOOP=
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    42
            LOG_DIFF=
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    43
            ;;
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 631
diff changeset
    44
        v)  
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 703
diff changeset
    45
            LOG_CHANGED=y
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 631
diff changeset
    46
            LOG_CHECK=y
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 631
diff changeset
    47
            LOG_SKIP=y
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 631
diff changeset
    48
            ;;
627
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    49
        D)  
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    50
            LOG_DEBUG=y
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    51
            LOG_INFO=y
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    52
            ;;
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    53
        V)  LOG_CMD=y ;;
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    54
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    55
        n)  LOG_NOOP=y ;;
627
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    56
        *)  return 1
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    57
    esac
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    58
}
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
    59
624
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    60
function log_init {
703
6fb97fcf0999 update: pvl/log: fix no-tty execution
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
    61
    if [ -t 1 ]; then
6fb97fcf0999 update: pvl/log: fix no-tty execution
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
    62
        IS_TTY=y
6fb97fcf0999 update: pvl/log: fix no-tty execution
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
    63
    fi
624
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    64
}
889ecd6dcb4e split LOG_* and UPDATE_* from lib/update.args into lib/update.*; fixup check_link and do_link for relative targets
Tero Marttila <terom@paivola.fi>
parents: 613
diff changeset
    65
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
# Output message to stderr.
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
function log_msg {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
    echo "$*" >&2
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
# Output message to stderr, optionally with given color, if TTY.
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
function log_color {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
    local code=$1; shift
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
    if [ $IS_TTY ]; then
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
        echo $'\e['${code}'m'"$*"$'\e[00m' >&2
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
    else
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
        echo "$*" >&2
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
    fi
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
## Log at various log-levels
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
# plain
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
function log {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
    [ $LOG          ] && log_msg            "$*"            || true
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
function log_error {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
    [ $LOG_ERROR    ] && log_color '31'     "$*"            || true
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
function log_warn {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    [ $LOG_WARN     ] && log_color '33'     "$*"            || true
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
function log_force {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
    [ $LOG_FORCE    ] && log_color '2;33'   "  $*"          || true
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
627
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
   100
function log_apply {
Tero Marttila <tero.marttila@aalto.fi>
parents: 624
diff changeset
   101
    [ $LOG_APPLY    ] && log_color '36'     "  $*"          || true
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
613
5b33ccac38ad update_zone --include-path, log_check
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
   104
function log_check {
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 631
diff changeset
   105
    [ $LOG_CHECK    ] && log_color '32'     "  $*"          || true
613
5b33ccac38ad update_zone --include-path, log_check
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
   106
}
5b33ccac38ad update_zone --include-path, log_check
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
   107
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 703
diff changeset
   108
function log_changed {
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 703
diff changeset
   109
    [ $LOG_CHANGED  ] && log_color '1;32'   "  $*"          || true
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 703
diff changeset
   110
}
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 703
diff changeset
   111
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
function log_noop {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
    [ $LOG_NOOP     ] && log_color '2;34'   "  $*"          || true
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
function log_skip {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
    [ $LOG_SKIP     ] && log_color '1;34'   "  $*"          || true
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
function log_debug {
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 631
diff changeset
   121
    [ $LOG_DEBUG    ] && log_color '34'     "    $*"        || true
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
function log_cmd {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
    [ $LOG_CMD      ] && log_color '35'     "        \$ $*" || true
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
# Output stacktrace, broken.
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
function log_stack {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
    local level=1
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
    while info=$(caller $level); do
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
        echo $info | read line sub file
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
        log_msg "$file:$lineno $sub()"
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
        level=$(($level + 1))
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
    done
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
### High-level logging output
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
# Log with func_caller at log_debug
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
function debug {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
    printf -v prefix "%s" $(func_caller)
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
    log_debug "$prefix: $*"
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
   149
function warn {
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
   150
    log_warn "$(func_caller): $*"
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
   151
}
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
   152
631
5eebbda7be91 lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
   153
function error {
5eebbda7be91 lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
   154
    log_error "$(func_caller): $*"
5eebbda7be91 lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
   155
}
5eebbda7be91 lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
   156
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
# Log with func_caller at log_error and exit, intended for internal errors...
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
function fail {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
    log_error "$(func_caller): $*"
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
    exit 2
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
# Log at log_error and exit
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
function die {
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
    log_error "$*"
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
    exit 1
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
}