Compare commits

..

No commits in common. "0.2.1" and "master" have entirely different histories.

4 changed files with 32 additions and 28 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
.*.sw?
log_happy log_happy
nimcache/ nimcache/

View File

@ -2,11 +2,13 @@
## ========= ## =========
## ##
## Little tool to extract expected information from log streams. ## Little tool to extract expected information from log streams.
import json, ncurses, os, osproc, sequtils, streams, strutils, threadpool import json, logging, ncurses, os, osproc, sequtils, streams, strutils, threadpool
import nre except toSeq import nre except toSeq
import private/ncurses_ext import private/ncurses_ext
from posix import signal
type type
Expectation* = ref object Expectation* = ref object
label: string label: string
@ -33,7 +35,7 @@ when isMainModule:
var outFile: File var outFile: File
try: try:
let VERSION = "0.2.1" let VERSION = "0.2.0"
let usage = """ let usage = """
Usage: Usage:
log_happy [options] log_happy [options]
@ -74,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:
@ -111,7 +113,7 @@ Expectations JSON definitions follow this format:
elif arg.startsWith("-i"): elif arg.startsWith("-i"):
let filename = arg[2..^1] let filename = arg[2..^1]
try: try:
if not fileExists(filename): if not existsFile(filename):
exitErr "no such file (" & filename & ")" exitErr "no such file (" & filename & ")"
inStream = newFileStream(filename) inStream = newFileStream(filename)
@ -126,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(
@ -146,7 +148,7 @@ Expectations JSON definitions follow this format:
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."
@ -159,7 +161,7 @@ Expectations JSON definitions follow this format:
# Init ncurses # Init ncurses
let stdscr = initscr() let stdscr = initscr()
var height, width: cint var height, width: int
getmaxyx(stdscr, height, width) getmaxyx(stdscr, height, width)
startColor() startColor()
@ -228,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.2.1" 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"
@ -9,3 +9,4 @@ bin = @["log_happy"]
# Dependencies # Dependencies
requires @["nim >= 0.16.1", "docopt >= 0.6.4", "ncurses"] requires @["nim >= 0.16.1", "docopt >= 0.6.4", "ncurses"]

View File

@ -1,31 +1,31 @@
import ncurses import ncurses
export ncurses export ncurses
#proc keypad*(win: PWindow, 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: PWindow, 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: PWindow, 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): PWindow {.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: PWindow): 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): PWindow {.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: PWindow): int {.cdecl, discardable, importc: "wgetch", dynlib: libncurses.} #proc wgetch*(win: ptr window): int {.cdecl, discardable, importc: "wgetch", dynlib: libncurses.}
#proc wrefresh*(win: PWindow): int {.cdecl, discardable, importc: "wrefresh", dynlib: libncurses.} proc wrefresh*(win: ptr window): int {.cdecl, discardable, importc: "wrefresh", dynlib: libncurses.}
proc wclear*(win: PWindow): int {.cdecl, discardable, importc: "wclear", dynlib: libncurses.} proc wclear*(win: ptr window): int {.cdecl, discardable, importc: "wclear", dynlib: libncurses.}
proc mvwhline*(win: PWindow, 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: PWindow, 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: PWindow, 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: PWindow, 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: PWindow, 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.}
proc wborder*(win: PWindow, ls,rs,ts,bs,tl,tr,bl,br: char): int {.cdecl, discardable, importc: "wborder", dynlib: libncurses.} proc wborder*(win: ptr window, ls,rs,ts,bs,tl,tr,bl,br: char): int {.cdecl, discardable, importc: "wborder", dynlib: libncurses.}
proc init_pair*(n, f, b: int): int {.cdecl, discardable, importc: "init_pair", dynlib: libncurses.} proc init_pair*(n, f, b: int): int {.cdecl, discardable, importc: "init_pair", dynlib: libncurses.}
proc COLOR_PAIR*(n: int): int {.cdecl, discardable, importc: "COLOR_PAIR", dynlib: libncurses.} proc COLOR_PAIR*(n: int): int {.cdecl, discardable, importc: "COLOR_PAIR", dynlib: libncurses.}
proc wattron*(win: PWindow, attrs: int): int {.cdecl, discardable, importc: "wattron", dynlib: libncurses.} proc wattron*(win: ptr window, attrs: int): int {.cdecl, discardable, importc: "wattron", dynlib: libncurses.}
proc wattroff*(win: PWindow, attrs: int): int {.cdecl, discardable, importc: "wattron", dynlib: libncurses.} proc wattroff*(win: ptr window, attrs: int): int {.cdecl, discardable, importc: "wattron", dynlib: libncurses.}
const BLACK* = 0 const BLACK* = 0
const RED* = 1 const RED* = 1
@ -35,3 +35,5 @@ const BLUE* = 4
const MAGENTA* = 5 const MAGENTA* = 5
const CYAN* = 6 const CYAN* = 6
const WHITE* = 7 const WHITE* = 7