def main(serve_bootstrap=True, host="*", port=10000, reg_sturdy_ref=None):

    config = {
        "port": port,
        "host": host,
        "reg_sturdy_ref": reg_sturdy_ref,
        "serve_bootstrap": str(serve_bootstrap),
        "reg_category": "climate",
    }
    # read commandline args only if script is invoked directly from commandline
    if len(sys.argv) > 1 and __name__ == "__main__":
        for arg in sys.argv[1:]:
            k, v = arg.split("=")
            if k in config:
                config[k] = v
    print(config)

    conMan = common.ConnectionManager()

    service = Factory()
    admin = serv.Admin(service)
    service.admin = admin
    restorer = common.Restorer()

    if config["reg_sturdy_ref"]:
        registrator = conMan.try_connect(config["reg_sturdy_ref"],
                                         cast_as=reg_capnp.Registrator)
        if registrator:
            unreg = registrator.register(
                ref=service, categoryId=config["reg_category"]).wait()
            print("Registered ", config["name"], "climate service.")
            #await unreg.unregister.unregister().a_wait()
        else:
            print("Couldn't connect to registrator at sturdy_ref:",
                  config["reg_sturdy_ref"])

    addr = config["host"] + (
        (":" + str(config["port"])) if config["port"] else "")
    if config["serve_bootstrap"].lower() == "true":
        server = capnp.TwoPartyServer(addr, bootstrap=restorer)
        restorer.port = port if port else server.port
        admin_sr = restorer.save(admin)
        service_sr = restorer.save(service)
        print("admin_sr:", admin_sr)
        print("service_sr:", service_sr)
        print("restorer_sr:", restorer.sturdy_ref())
    else:
        capnp.wait_forever()
    server.run_forever()
Esempio n. 2
0
def main():
    subworker_id = get_environ_int("RAIN_SUBWORKER_ID")

    print("Initalizing subworker {} ...".format(subworker_id))
    print("Working directory: ".format(os.getcwd()))
    sys.stdout.flush()

    os.makedirs("task")
    os.makedirs("stage")

    stage_path = os.path.abspath("stage")
    task_path = os.path.abspath("task")

    Subworker(get_environ("RAIN_SUBWORKER_SOCKET"), subworker_id, task_path,
              stage_path)

    print("Subworker initialized")
    sys.stdout.flush()
    capnp.wait_forever()
Esempio n. 3
0
 def run_server():
     _ = capnp.TwoPartyServer(write, bootstrap=Server())
     capnp.wait_forever()
Esempio n. 4
0
def init_and_run_fbp_component(component_cap,
                               name_to_in_ports={},
                               name_to_out_ports={},
                               host="*",
                               port=None,
                               serve_bootstrap=True,
                               restorer=None,
                               conman=None,
                               run_before_enter_eventloop=None,
                               eventloop_wait_forever=True):

    host = host if host else "*"

    if not conman:
        conman = common.ConnectionManager()
    if not restorer:
        restorer = common.Restorer()

    def connect_ports(side, name_to_ports, port_type):
        for name, data in name_to_ports.items():
            # only connect via sr if port is not already containing a capability
            if "sr" in data and data["port"] is None:
                try:
                    print("trying to connect", side, "port:", name, " via sr:",
                          data["sr"])
                    data["port"] = conman.try_connect(data["sr"],
                                                      cast_as=port_type,
                                                      retry_secs=1)
                except Exception as e:
                    print("Error connecting to", side, "port:", name,
                          ". Exception:", e)

    addr = host + ((":" + str(port)) if port else "")
    if serve_bootstrap:
        server = capnp.TwoPartyServer(addr, bootstrap=restorer)
        restorer.port = port if port else server.port

        connect_ports("in", name_to_in_ports, common_capnp.Reader)
        connect_ports("out", name_to_out_ports, common_capnp.Writer)
    else:
        connect_ports("in", name_to_in_ports, common_capnp.Reader)
        connect_ports("out", name_to_out_ports, common_capnp.Writer)

        if run_before_enter_eventloop:
            run_before_enter_eventloop()
        if eventloop_wait_forever:
            capnp.wait_forever()

    ips = []
    for name, pd in name_to_in_ports.items():
        ops.append({"name": name, "port": pd["port"]})
    ops = []
    for name, pd in name_to_out_ports.items():
        ops.append({"name": name, "port": pd["port"]})

    component_cap.setupPorts(inPorts=ips, outPorts=ops).wait()

    if run_before_enter_eventloop:
        run_before_enter_eventloop()
    if eventloop_wait_forever:
        server.run_forever()
Esempio n. 5
0
 def run_server():
     restorer = SimpleRestorer()
     server = capnp.TwoPartyServer(write, restorer)
     capnp.wait_forever()
Esempio n. 6
0
def init_and_run_service(name_to_service,
                         host="*",
                         port=None,
                         serve_bootstrap=True,
                         restorer=None,
                         conman=None,
                         name_to_service_srs={},
                         run_before_enter_eventloop=None,
                         **kwargs):

    host = host if host else "*"

    # check for sturdy ref inputs
    if not sys.stdin.isatty():
        try:
            reg_config = json.loads(sys.stdin.read())
            #print("read from stdin:", reg_config)
        except Exception as e:
            print("service.py: Error reading from sys.stdin. Exception:", e)
            pass
    else:
        reg_config = {}

    if not conman:
        conman = common.ConnectionManager()
    if not restorer:
        restorer = common.Restorer()

    #create and register admin with services
    admin = Admin(list(name_to_service.values()))
    for s in name_to_service.values():
        if isinstance(s, AdministrableService):
            s.admin = admin
    if "admin" not in name_to_service and admin not in name_to_service.values(
    ):
        name_to_service["admin"] = admin

    def register_services(conman, admin, reg_config):
        for name, data in reg_config.items():
            try:
                if isinstance(data, dict):
                    reg_sr = data["reg_sr"]
                    reg_name = data.get("reg_name", "")
                    reg_cat_id = data.get("cat_id", "")
                elif isinstance(data, str):
                    reg_sr = data
                    reg_name = ""
                    reg_cat_id = ""
                else:
                    continue
                print("trying to register name:", name, "data:", data)
                registrar = conman.try_connect(reg_sr,
                                               cast_as=reg_capnp.Registrar)
                if registrar and name in name_to_service:
                    r = registrar.register(cap=name_to_service[name],
                                           regName=reg_name,
                                           categoryId=reg_cat_id).wait()
                    unreg_action = r.unreg
                    rereg_sr = r.reregSR
                    admin.store_unreg_data(name, unreg_action, rereg_sr)
                    print("Registered", name, "in category '", reg_cat_id,
                          "' as '", reg_name, "'.")
                else:
                    print("Couldn't connect to registrar at sturdy_ref:",
                          reg_sr)
            except Exception as e:
                print("Error registering service name:", name, ". Exception:",
                      e)

    addr = host + ((":" + str(port)) if port else "")
    if serve_bootstrap:
        server = capnp.TwoPartyServer(addr, bootstrap=restorer)
        restorer.port = port if port else server.port

        for name, s in name_to_service.items():
            service_sr, service_unsave_sr = restorer.save(
                s, name_to_service_srs.get(name, None))
            name_to_service_srs[name] = service_sr
            print("service:", name, "sr:", service_sr)
        print("restorer_sr:", restorer.sturdy_ref())

        register_services(conman, admin, reg_config)
    else:
        register_services(conman, admin, reg_config)
        if run_before_enter_eventloop:
            run_before_enter_eventloop()
        capnp.wait_forever()

    if run_before_enter_eventloop:
        run_before_enter_eventloop()
    server.run_forever()
 def run_server():
     restorer = SimpleRestorer()
     server = capnp.TwoPartyServer(write, restorer)
     capnp.wait_forever()