You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.2 KiB
Cheetah

{{ if and .hellotech (lookPath "jq") -}}
import "colors" as colors;
def clean_multierror:
if . == null then empty
else sub("1 error occurred:\n\t\\* "; ""; "mg")
| sub("\n+$"; ""; "gm") | sub("\t\\*"; " →"; "g")
end;
def _local_time:
sub("\\.\\d+Z$"; "Z"; "g")
| fromdate
| strflocaltime("%b %m %I:%M:%S %Z");
def gcp_clean_log:
map(
(.severity | ascii_downcase) as $level
| .timestamp as $ts
| .jsonPayload
| setpath(["level"]; $level)
| setpath(["timestamp"]; $ts | _local_time)
| .error?.Error |= clean_multierror
);
def lift_payload: map(.jsonPayload);
def lift_error: lift_payload | .[]?.error?.Error |= clean_multierror;
def level_color: {
debug: colors::black,
info: colors::blue,
warning: colors::yellow,
error: colors::red,
};
def _show_op: "[" +.Package + " " + .Op + "]";
def _show_stack: .Stack | map(" → " + _show_op + "\t" + .Message) | join("\n");
def _show_error:
.error
| if .Error
then _show_op + " " + .Error + "\n" + _show_stack
else . end;
def _show_level:
( if .level == "debug" then level_color.debug
elif .level == "info" then level_color.info
elif .level == "warning" then level_color.warning
elif .level == "error" then level_color.error
else colors::reset end
) as $color
| colors::reset + "[" + $color + (.level | ascii_upcase) + colors::reset + "]";
def _show_props($ignore):
( ["timestamp", "message", "level", "error", "admin_id", "client_id",
"service", "source", $ignore]
| flatten(1)
| join("|")
) as $regex
| to_entries
| sort_by(.key)
| [.[]
| select(false == (.key | test("(" + $regex + ")")))
| select(.value)
| select(.value != 0)
| colors::blue + "\(.key)" + colors::black + "=" + colors::yellow + "\(.value)" + colors::reset
]
| join(" ");
def show:
["githash", "request_id", "path", "package"] as $ignore
| gcp_clean_log
| .[]
| colors::magenta + .timestamp + colors::reset +
" [" + _show_props($ignore) + "]\n" +
_show_level + " " + colors::white + .message + (
if .error then
"\n" + colors::red + "ERROR" + colors::reset + ": " + _show_error
else "" end
) + colors::reset;
{{- end }}