#!/usr/bin/env python
"""
Format a NetLogger log as a comma-separated values file.
"""
__rcsid__ = "$Id$"

from netlogger.parsers.base import NLSimpleParser
from optparse import OptionParser
import sys

def run(infile, outfile, fields):
    parser = NLSimpleParser(None)
    # write header
    for i, field in enumerate(fields):
        outfile.write(field)
        if i < len(fields) - 1:
            outfile.write(",")
    outfile.write("\n")
    # write rows
    for line in infile:
        event = parser.parseLine(line)
        for i, field in enumerate(fields):
            if event.has_key(field):
                value = event[field]
                if isinstance(value, float):
                    column = "%f" % value
                else:
                    column = "%s" % value
                outfile.write(column)
            if i < len(fields) - 1:
                outfile.write(",")
        outfile.write("\n")

def main():
    desc = ' '.join(__doc__.split())
    parser = OptionParser("%prog [options] fields..", description=desc)
    parser.add_option("-i", "--input", metavar="FILE", dest="infile",
                      help="Input file (stdin)", default=None)
    parser.add_option("-o", "--output", metavar="FILE", dest="outfile",
                      help="Output file (stdout)", default=None)
    options, args = parser.parse_args()
    if len(args) == 0:
        parser.error("At least one field is required")
    if options.infile is None:
        infile = sys.stdin
    else:
        infile = file(options.infile)
    if options.outfile is None:
        outfile = sys.stdout
    else:
        outfile = file(options.outfile, 'w')
    run(infile, outfile, args)
    return(0)

if __name__ == '__main__':
    sys.exit(main())

