示例#1
0
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()
示例#2
0
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
示例#3
0
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
示例#4
0
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()