#!/usr/bin/env python

# Copyright (C) 2012 Science and Technology Facilities Council.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import cherrypy

from crab.service.monitor import CrabMonitor
from crab.service.notify import CrabNotifyService
from crab.web.rss import CrabRSS
from crab.server import CrabServer
from crab.server.config import read_crabd_config, construct_store
from crab.web.web import CrabWeb

def main():
    config = read_crabd_config()

    if 'outputstore' in config:
        outputstore = construct_store(config['outputstore'])
    else:
        outputstore = None

    store = construct_store(config['store'], outputstore)

    monitor = CrabMonitor(store)
    monitor.daemon = True
    monitor.start()

    notify = CrabNotifyService(config, store)
    notify.daemon = True
    notify.start()

    cherrypy.config.update(config)
    cherrypy.tree.mount(CrabWeb(config, store, monitor, {
                            'Monitor' : monitor,
                            'Notification' : notify
                        }), '/', config)
    cherrypy.tree.mount(CrabServer(store), '/api/0', {})
    cherrypy.tree.mount(CrabRSS(store, config['crab']['base_url']), '/rss', {})

    cherrypy.engine.start()
    cherrypy.engine.block()

if __name__ == "__main__":
    main()
