#!/usr/bin/env python
"""
file: sqlimport
author: Stephen Bunn 
description: daemon to monitor directories for compressed log data and
             import that into a database
"""
import os, sys, time, logging, logging.handlers, threading
from datetime import datetime
from optparse import OptionParser, OptionGroup
from daemon.maindaemon import MainDaemon


# Initialize the logging system
#---------------------------------------------------------------------------- 
def init_logging(logger):
  '''
  Initialize the logging system
  '''
  # set the logging level
  logger.setLevel(logging.DEBUG)

  # create logging handlers
  ch = logging.StreamHandler() # console messages
  sh = logging.handlers.SysLogHandler(address='/dev/log', 
                                      facility=logging.handlers.SysLogHandler.LOG_DAEMON) # syslog handler

  # create formatter
  ch_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  sh_formatter = logging.Formatter('%(name)s: %(message)s')

  # add formatter to ch
  ch.setFormatter(ch_formatter)
  sh.setFormatter(sh_formatter)
  

  # add handlers to logger
  # Note: once daemonized the console handler goes to /dev/null
  logger.addHandler(sh)
  logger.addHandler(ch)
   
# main entry point
if __name__ == "__main__":

  # parse options and arguments that were passed in
  usage = "usage %prog [options] monitor_directory"
  parser = OptionParser(usage)

  # create our parser groups
  group = OptionGroup(parser, "Daemon options")
  group.add_option("-d","--daemon", dest="daemon_options", type="choice", choices=['start','stop','restart','status'], default=None, help="start|stop|restart|status")
  group.add_option("--pid", action="store", dest="pidfile", help="location of pidfile")
  parser.add_option_group(group)
  
  (options, arguments) = parser.parse_args()

  # make sure we have required options and arguments
  if ( 
      ( (options.daemon_options == "start") or (options.daemon_options == None) ) and
      ( (len(arguments) != 1) )
     ):
    sys.stderr.write("Error: you must specify a directory to monitor\n")
    parser.print_help()
    sys.exit(1)

  # make sure we have a pidfile
  if not options.pidfile:
    pidfile = "/var/run/{0}.pid".format(os.path.splitext(os.path.basename(__file__))[0])
  else:
    pidfile = options.pidfile

  sys.stderr.write(pidfile)

  # Initialize our logging system
  log = logging.getLogger(os.path.splitext(os.path.basename(sys.argv[0]))[0])
  init_logging(log)

  # create our main daemon
  daemon = MainDaemon(pidfile, log)
  daemon.set_options(options,arguments)
  if options.daemon_options:
    log.info("command received: {0}".format(options.daemon_options))
    if options.daemon_options == 'start':
      daemon.start()
    elif options.daemon_options == 'stop':
      daemon.stop()
    else:
      log.error("unknown command")
      sys.exit(2)
  else: 
    log.info("running in foreground")
    daemon.run()

  sys.exit(0)
