lib/update.logging
author Tero Marttila <terom@paivola.fi>
Fri, 10 May 2013 00:05:25 +0300
changeset 80 b58236f9ea7b
parent 60 b65ce9123039
permissions -rw-r--r--
process-zone: support AAAA/ip6.arpa for --reverse-zone, as well as implicit record names
60
b65ce9123039 lib/update: add shebangs to make sloccount work
Tero Marttila <terom@paivola.fi>
parents: 52
diff changeset
     1
#!/bin/bash
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
# vim: set ft=sh :
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
#
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
# Logging output
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
# Output message to stderr.
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
function log_msg {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
    echo "$*" >&2
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
# Output message to stderr, optionally with given color, if TTY.
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
function log_color {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
    local code=$1; shift
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
    if [ $IS_TTY ]; then
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
        echo $'\e['${code}'m'"$*"$'\e[00m' >&2
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
    else
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
        echo "$*" >&2
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    fi
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
## Log at various log-levels
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
function log_error {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
    [ $LOG_ERROR ] && log_color '31' "$*"
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
function log_warn {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
    [ $LOG_WARN ] && log_color '33' "$*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
# plain
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
function log {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
    [ $LOG ] && log_msg "$*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
function log_force {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    [ $LOG_FORCE ] && log_color '2;33' "  $*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
function log_update {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    [ $LOG_UPDATE ] && log_color '36' "  $*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
function log_noop {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
    [ $LOG_NOOP ] && log_color '2;34' "  $*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
function log_skip {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    [ $LOG_SKIP ] && log_color '1;34' "  $*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
function log_debug {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    [ $LOG_DEBUG ] && log_color 32 "    $*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
function log_cmd {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    [ $LOG_CMD ] && log_color 35 "        \$ $*" || true
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
# Output stacktrace, broken.
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
function log_stack {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
    local level=1
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
    while info=$(caller $level); do
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
        echo $info | read line sub file
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
        log_msg "$file:$lineno $sub()"
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
        level=$(($level + 1))
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
    done
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
# Output calling function's name.
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
function func_caller {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
    caller 1 | cut -d ' ' -f 2
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
### High-level logging output
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
# Log with func_caller at log_debug
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
function debug {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
    printf -v prefix "%s" $(func_caller)
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
    log_debug "$prefix: $*"
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
# Log with func_caller at log_error and exit, intended for internal errors...
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
function fail {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
    log_error "$(func_caller): $*"
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
    exit 2
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
# Log at log_error and exit
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
function die {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
    log_error "$*"
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
    exit 1
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100