def main(): parser = OptionParser(usage="%prog FILE (or DIR)") (opts, args) = parser.parse_args() logs = [] if len(args) == 0: logs.append("-") else: for arg in args: if os.path.isdir(arg): for (dirpath, dirnames, filenames) in os.walk(arg): for filename in filenames: # assume that only files ending with '.log' are meant to be # processed if filename.endswith(".log"): filepath = os.path.join(dirpath, filename) logs.append(filepath) else: # arg is a logfile logs.append(arg) bad_lines = [] def print_it(line): print line for log in logs: if log is "-": fi = sys.stdin else: fi = open(log, "r") for entry in argoslog.parse(fi, errh=print_it): if entry.source != "wifi_ol": print str(entry) continue (head, _, tail) = entry.data.partition(" ") if tail == "": print str(entry) continue if head not in ["SEND-DETAILS", "NET-USAGE"]: print str(entry) continue parts = tail.split("|") for part in parts: newdata = head + " " + part newentry = argoslog.LogEntry(entry.datetime, entry.source, entry.logleveldesc, newdata, entry.linenum) print str(newentry) if fi != sys.stdin: fi.close()
def main(): parser = OptionParser(usage="%prog [options] USERNAME PASSWORD DBNAME") parser.add_option("-v", "--verbose", action="count", default=0) (opts, args) = parser.parse_args() if len(args) != 3: parser.error("wrong number of arguments") (username, password, dbname) = args db = ArgosDB(username, password, dbname, debug=(opts.verbose > 0)) parser = Parser(db) c = 0 for entry in argoslog.parse(sys.stdin, window=0): if parser.parse_entry(entry): c += 1 if opts.verbose > 0: print "accepted: %s" % str(entry) else: if opts.verbose > 1: print "rejected: %s" % str(entry) print "%d entries accepted" % c
def main(): parser = OptionParser(usage="%prog [options] [FILE] ...") parser.add_option("--hosts", help="filter by hosts") parser.add_option("-o", "--outfile", action="store", default=None, help="Output file name") parser.add_option("--png", action="store_const", dest="format", const="png") parser.add_option("--eps", action="store_const", dest="format", const="eps") parser.add_option("--ps", action="store_const", dest="format", const="ps") parser.add_option("--pdf", action="store_const", dest="format", const="pdf") parser.add_option("--size", action="store", default="3.4x2.4", help="Specify image size as NxM (in inches)") parser.add_option("--metric", action="store", type="choice", choices=AVAIL_METRICS.keys(), default=None, help="Which metric to parse and plot") parser.add_option("--list", action="store_true", default=False, help="List all available metrics and quit") (opts, args) = parser.parse_args() if opts.list: for metric in sorted(AVAIL_METRICS.keys()): desc = get_description(metric) print "%s: %s" % (metric, desc) sys.exit(0) if opts.format is None: opts.format = "png" if opts.outfile is None: opts.outfile = "out.%s" % opts.format if opts.metric is None: parser.error("no metric selected") host_filter = None if opts.hosts: host_filter = set() for host in opts.hosts.split(","): host_filter.add(host) size = [float(x) for x in opts.size.split("x")] if len(size) != 2: parser.error("invalid size option (should be NxM)") print size plotter = Plotter(opts.metric, host_filter=host_filter) def print_err(e): print "parsing error: %s" % e if len(args) == 0: for entry in argoslog.parse(sys.stdin, errh=print_err): plotter.parse_entry(entry) else: for arg in args: fi = open(arg, "r") for entry in argoslog.parse(fi, errh=print_err): plotter.parse_entry(entry) fi.close() if plotter.metric in ["net", "net-links"]: created = gen_bar_plot(plotter, opts.outfile, opts.format, size) else: created = gen_timeseries_plot(plotter, opts.outfile, opts.format, size) if created: print "created %s" % opts.outfile else: print "failed to create %s" % opts.outfile
def main(): signal.signal(signal.SIGINT, signal.SIG_DFL) signal.signal(signal.SIGPIPE, signal.SIG_DFL) parser = OptionParser(usage="%prog [options]") parser.add_option("-l", "--level", type="choice", default="DEBUG", choices=["DEBUG", "DATA", "INFO", "WARN", "ERR", "CRIT"]) parser.add_option("--grep", action="store", default=None, help="specify a regexp; matching lines are highlighted") parser.add_option("--pager", action="store_true", default=False) parser.add_option("-s", "--sources", default="", help="comma delimited list of sources to highlight") parser.add_option("--window", type="int", action="store", default=0) (opts, args) = parser.parse_args() minlvl = argoslog.parse_loglevel(opts.level) sources = [] for elt in opts.sources.split(","): sources.append(elt.strip()) view_rows = 0 streams = [] if len(args) > 0: for arg in args: fi = open(arg, "r") streams.append(fi) else: streams.append(sys.stdin) entries = [] if opts.pager: proc = subprocess.Popen(["less", "-R"], stdin=subprocess.PIPE) out = proc.stdin else: proc = None out = sys.stdout pat = None if opts.grep is not None: pat = re.compile(opts.grep) # malformed lines are printed like WARN entries unless they match the GREP # option def bad_line_handler(line): if (pat is not None) and (pat.search(line) is not None): print >>out, ansi.format(line, ['bold', 'yellow']) else: print >>out, ansi.format(line, ['bold', 'cyan']) for stream in streams: for entry in argoslog.parse(stream, window=opts.window, errh=bad_line_handler): if entry.source in sources: txt = format_line(entry, minlvl, True) elif (pat is not None) and (pat.search(str(entry)) is not None): txt = format_line(entry, minlvl, True) else: txt = format_line(entry, minlvl) if txt is not None: print >>out, txt out.close() if proc is not None: proc.wait()