2 Commits
0.1.0 ... main

Author SHA1 Message Date
9be03f61ea Updates to work under Nim 1.x 2025-12-16 15:12:49 -06:00
3a745ac98f Add -h, --version, and --help options. 2017-08-23 15:19:11 -05:00
4 changed files with 22 additions and 17 deletions

View File

@@ -35,7 +35,7 @@ when isMainModule:
var outFile: File var outFile: File
try: try:
let VERSION = "0.1.0" let VERSION = "0.2.0"
let usage = """ let usage = """
Usage: Usage:
log_happy [options] log_happy [options]
@@ -44,7 +44,8 @@ Usage:
Options: Options:
-v Print version information and exit. -h --help Print this usage information and exit.
-v --version Print version information and exit.
-e<label>;<pattern> Add something to expect to see in the log stream. -e<label>;<pattern> Add something to expect to see in the log stream.
-E<label>;<patterh> Add something to expect not to see in the log stream. -E<label>;<patterh> Add something to expect not to see in the log stream.
-d<def-file> Read expectations from a JSON definitions file. -d<def-file> Read expectations from a JSON definitions file.
@@ -75,7 +76,7 @@ Expectations JSON definitions follow this format:
let args = commandLineParams() let args = commandLineParams()
var expectations: seq[Expectation] = @[] var expectations: seq[Expectation] = @[]
var follow = false var follow = false
var cmd = "NOCMD" var cmd = "NOCMD"
if args.len == 0: if args.len == 0:
@@ -127,7 +128,7 @@ Expectations JSON definitions follow this format:
except: except:
exitErr "could not open output file in write mode (" & filename & exitErr "could not open output file in write mode (" & filename &
"):\n\t" & getCurrentExceptionMsg() "):\n\t" & getCurrentExceptionMsg()
elif arg.match(expPattern).isSome: elif arg.match(expPattern).isSome:
var m = arg.match(expPattern).get().captures() var m = arg.match(expPattern).get().captures()
expectations.add(Expectation( expectations.add(Expectation(
@@ -136,14 +137,18 @@ Expectations JSON definitions follow this format:
expected: m[0] == "e", expected: m[0] == "e",
found: false)) found: false))
elif arg == "-v": elif arg == "-v" or arg == "--version":
stdout.writeLine "log_happy v" & VERSION stdout.writeLine "log_happy v" & VERSION
quit(QuitSuccess) quit(QuitSuccess)
elif arg == "-h" or arg == "--help":
stdout.writeLine usage
quit(QuitSuccess)
elif arg == "-f": follow = true elif arg == "-f": follow = true
elif arg == "--": cmd = "" elif arg == "--": cmd = ""
else: exitErr "unrecognized argument: " & arg else: exitErr "unrecognized argument: " & arg
if cmd == "NOCMD" and inStream.isNil: if cmd == "NOCMD" and inStream.isNil:
exitErr "no input file or command to execute." exitErr "no input file or command to execute."
@@ -156,7 +161,7 @@ Expectations JSON definitions follow this format:
# Init ncurses # Init ncurses
let stdscr = initscr() let stdscr = initscr()
var height, width: int var height, width: cint
getmaxyx(stdscr, height, width) getmaxyx(stdscr, height, width)
startColor() startColor()
@@ -225,7 +230,7 @@ Expectations JSON definitions follow this format:
dispwin.wrefresh() dispwin.wrefresh()
firstPass = false firstPass = false
logwin.wprintw("\n" & line) logwin.wprintw("\n" & line)
logwin.wrefresh() logwin.wrefresh()

View File

@@ -1,6 +1,6 @@
# Package # Package
version = "0.1.0" version = "0.2.0"
author = "Jonathan Bernard" author = "Jonathan Bernard"
description = "Scan logs for regex-defined events and report on what was found." description = "Scan logs for regex-defined events and report on what was found."
license = "MIT" license = "MIT"

2
mise.toml Normal file
View File

@@ -0,0 +1,2 @@
[tools]
nim = "1"

View File

@@ -1,21 +1,21 @@
import ncurses import ncurses
export ncurses export ncurses
proc keypad*(win: ptr window, enable: bool): int {.cdecl, discardable, importc: "keypad", dynlib: libncurses.} #proc keypad*(win: ptr window, enable: bool): int {.cdecl, discardable, importc: "keypad", dynlib: libncurses.}
proc scrollok*(win: ptr window, enable: bool): int {.cdecl, discardable, importc: "scrollok", dynlib: libncurses.} #proc scrollok*(win: ptr window, enable: bool): int {.cdecl, discardable, importc: "scrollok", dynlib: libncurses.}
proc nodelay*(win: ptr window, enable: bool): int {.cdecl, discardable, importc: "nodelay", dynlib: libncurses.} #proc nodelay*(win: ptr window, enable: bool): int {.cdecl, discardable, importc: "nodelay", dynlib: libncurses.}
proc nonl*(): int {.cdecl, discardable, importc: "nonl", dynlib: libncurses.} #proc nonl*(): int {.cdecl, discardable, importc: "nonl", dynlib: libncurses.}
proc newwin*(num_rows, num_cols, begin_x, begin_y: int): ptr window {.cdecl, discardable, importc: "newwin", dynlib: libncurses.} proc newwin*(num_rows, num_cols, begin_x, begin_y: int): ptr window {.cdecl, discardable, importc: "newwin", dynlib: libncurses.}
proc delwin*(win: ptr window): int {.cdecl, discardable, importc: "delwin", dynlib: libncurses.} proc delwin*(win: ptr window): int {.cdecl, discardable, importc: "delwin", dynlib: libncurses.}
#proc newwin(num_rows, num_cols, begin_x, begin_y: int): ptr window {.cdecl, discardable, importc: "newwin", dynlib: libncurses.} #proc newwin(num_rows, num_cols, begin_x, begin_y: int): ptr window {.cdecl, discardable, importc: "newwin", dynlib: libncurses.}
#proc wgetch*(win: ptr window): int {.cdecl, discardable, importc: "wgetch", dynlib: libncurses.} #proc wgetch*(win: ptr window): int {.cdecl, discardable, importc: "wgetch", dynlib: libncurses.}
proc wrefresh*(win: ptr window): int {.cdecl, discardable, importc: "wrefresh", dynlib: libncurses.} #proc wrefresh*(win: ptr window): int {.cdecl, discardable, importc: "wrefresh", dynlib: libncurses.}
proc wclear*(win: ptr window): int {.cdecl, discardable, importc: "wclear", dynlib: libncurses.} proc wclear*(win: ptr window): int {.cdecl, discardable, importc: "wclear", dynlib: libncurses.}
proc mvwhline*(win: ptr window, rol, col: int, chType: char, n: int): int {.cdecl, discardable, importc: "whline", dynlib: libncurses.} proc mvwhline*(win: ptr window, rol, col: int, chType: char, n: int): int {.cdecl, discardable, importc: "whline", dynlib: libncurses.}
proc wmove*(win: ptr window, rol, col: int): int {.cdecl, discardable, importc: "wmove", dynlib: libncurses.} proc wmove*(win: ptr window, rol, col: int): int {.cdecl, discardable, importc: "wmove", dynlib: libncurses.}
proc wprintw*(win: ptr window, str: cstring): int {.cdecl, discardable, importc: "wprintw", dynlib: libncurses.} #proc wprintw*(win: ptr window, str: cstring): int {.cdecl, discardable, importc: "wprintw", dynlib: libncurses.}
#proc mvwprintw*(win: ptr window, row, col: int, str: cstring): int {.cdecl, discardable, importc: "mvwprintw", dynlib: libncurses.} #proc mvwprintw*(win: ptr window, row, col: int, str: cstring): int {.cdecl, discardable, importc: "mvwprintw", dynlib: libncurses.}
proc box*(win: ptr window, vert_border, horiz_border: char): int {.cdecl, discardable, importc: "box", dynlib: libncurses.} proc box*(win: ptr window, vert_border, horiz_border: char): int {.cdecl, discardable, importc: "box", dynlib: libncurses.}
@@ -35,5 +35,3 @@ const BLUE* = 4
const MAGENTA* = 5 const MAGENTA* = 5
const CYAN* = 6 const CYAN* = 6
const WHITE* = 7 const WHITE* = 7