Пример #1
0
def create_service(reactor, options):
    """Based on options provided by the user create a service that
    will provide whatever it is that Nesoi do.
    """
    service = MultiService()

    listen_address = options['listen-address']

    storage = shelve.open(options['data-file'], writeback=True)
    cluster_node = ClusterNode(reactor, storage)
    service.addService(cluster_node)

    model = ResourceModel(reactor, cluster_node.keystore)

    gossiper = Gossiper(reactor, cluster_node, listen_address)
    if options['seed']:
        gossiper.seed([options['seed']])

    service.addService(UDPServer(int(options['listen-port']), gossiper,
        interface=listen_address))

    router = rest.Router()
    router.addController('app', api.ApplicationCollectionResource(model))
    router.addController('app/{appname}/web-hooks', api.WebhookCollectionResource(model, 'appname', 'app'))
    router.addController('app/{appname}/web-hooks/{hookname}', api.WebhookResource(model, 'appname', 'app'))
    router.addController('app/{appname}', api.ApplicationResource(model))
    router.addController('srv', api.ServiceCollectionResource(model))
    router.addController('srv/{srvname}', api.ServiceHostCollectionResource(model))
    router.addController('srv/{srvname}/web-hooks', api.WebhookCollectionResource(model, 'srvname', 'service'))
    router.addController('srv/{srvname}/web-hooks/{hookname}', api.WebhookResource(model, 'srvname', 'service'))
    router.addController('srv/{srvname}/{hostname}', api.ServiceHostResource(model))

    service.addService(TCPServer(int(options['listen-port']), Site(router),
        interface=listen_address))

    #gossiper.set(cluster_node.election.PRIO_KEY, 0)
    #cluster_node.keystore.load_from(storage)

    return service