#!/usr/bin/env python2.7
# Copyright (c) 2014 Alcatel-Lucent Enterprise
# All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

import sys, os, signal, time
from logging import getLogger

from nw.core import NwConfiguration
from nw.core import TaskManager
from nw.core import Log

shutdown = False

def sig_int_handler(signal, frame):
    global shutdown
    shutdown = True

signal.signal(signal.SIGINT, sig_int_handler)
signal.signal(signal.SIGTERM, sig_int_handler)

# Night Watch main function
if __name__ == "__main__":
    # Initialize logger
    Log.init()
    
    # By default, read the Night Watch main config file from /etc/night-watch/night-watch.yml
    config_file = '/etc/night-watch/night-watch.yml'
    
    # if we have a filename coming from the command-line, use it instead of the default location
    args = list(sys.argv)
    if (len(args) > 1 and args[1]):
        if os.path.isfile(args[1]):
            config_file = args[1]
        else:
            getLogger(__name__).error("Provided argument config file does not exist or is not accessible, read config file from " + config_file)
    
    # Read the config file
    config = NwConfiguration.getNwConfiguration()
    config.read(config_file)
    
    # Reconfigure the logger now that the logging section from night-watch config file has been loaded
    Log.reconfigure(config.logging)
    
    # Start TaskManager
    TaskManager.getTaskManager().start()
    
    while not shutdown:
        time.sleep(1)

    # Stop TaskManager before exiting
    TaskManager.getTaskManager().stop()
    sys.exit(2)
