(mirror) personal dotfiles github.com/crescentrose/dotfiles
at main 101 lines 2.1 kB view raw
1export def "info" [message: string] { 2 log info $message 3} 4 5export def "done" [message: string] { 6 log done $message 7} 8 9export def "debug" [message: string] { 10 log debug $message 11} 12 13export def "warn" [message: string] { 14 log warn $message 15} 16 17export def "error" [message: string] { 18 log error $message 19} 20 21export def "fatal" [message: string, exitValue: int = 1] { 22 log error $message 23 log error "💔 Previous error was fatal; terminating!" 24 exit $exitValue 25} 26 27export def "timed" [name: string, block: closure] { 28 let start = date now 29 30 try { 31 do $block 32 } catch { |err| 33 log error $err.msg 34 print -e $err.rendered 35 log error $"🌧️ ($name) failed in (time-since $start)." 36 return 37 } 38 39 log done $"($name) completed in (time-since $start)!" 40} 41 42def time-since [start: datetime] { 43 let end = date now 44 45 let diff = ($end - $start) 46 if $diff >= 1min { 47 $diff | format duration "min" 48 } else { 49 $diff | format duration "sec" 50 } 51} 52 53def log [level: string, message: string] { 54 let desiredLogLevel = ($env.VLOG_LEVEL? | default "info") 55 if (log-level $level) < (log-level $desiredLogLevel) { 56 return 57 } 58 59 let message = $"(ansi default_bold)($message)(ansi reset)" 60 61 let parts = [ 62 (current-timestamp) 63 # (current-script) 64 (log-badge $level) 65 ($message) 66 ] 67 68 print -e ($parts | str join ' ') 69} 70 71def current-timestamp [] { 72 $"(ansi dark_gray)(date now | format date '%Y-%m-%d %H:%M:%S')(ansi reset)" 73} 74 75def current-script [] { 76 $env.CURRENT_FILE 77 $"(ansi light_gray)($env.CURRENT_FILE)(ansi reset)" 78} 79 80def log-badge [level: string] { 81 match $level { 82 "debug" => $"(ansi black_reverse) DEBG (ansi reset)", 83 "done" => $"(ansi purple_reverse) DONE (ansi reset)", 84 "info" => $"(ansi green_reverse) INFO (ansi reset)", 85 "warn" => $"(ansi warn_reverse) WARN (ansi reset)", 86 "error" => $"(ansi red_reverse) OOPS (ansi reset)", 87 _ => $"(ansi black_reverse) UNKN (ansi reset)", 88 } 89} 90 91def log-level [level: string] { 92 match $level { 93 "debug" => -1, 94 "done" => 0, 95 "info" => 0, 96 "warn" => 1, 97 "error" => 2, 98 _ => 0 99 } 100} 101