示例#1
0
def test_websocket_mechanics():
    """
    Shows that we can put our protocol (hey_joe._WayDownSouth) and factory (hey_joe.WebSocketService)
    together, along with a transport, and properly open a websocket connection.
    """
    transport = StringTransportWithDisconnection()
    service = hey_joe.WebSocketService("127.0.0.1", 9000)
    protocol = service.buildProtocol(service._hey_joe_addr)
    protocol.transport = transport
    transport.protocol = protocol
    protocol.connectionMade()
    data_to_send = b'GET / HTTP/1.1\r\nHost: somewhere_in_the_world:9000\r\nConnection: keep-alive, Upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: F76ObkF/aCKX8WkmAgx2OQ==\r\n\r\n'
    protocol.dataReceived(data_to_send)
    assert transport.value().startswith(b'HTTP/1.1 101 Switching Protocols\r\nServer: hendrix')
示例#2
0
    def start(self, ws_port: int, http_port: int, dry_run: bool = False):

        #
        # Websocket Service
        #

        def send_states(subscriber):
            message = ["states", self.known_nodes.abridged_states_dict()]
            subscriber.sendMessage(json.dumps(message).encode())

        def send_nodes(subscriber):
            message = ["nodes", self.known_nodes.abridged_nodes_dict()]
            subscriber.sendMessage(json.dumps(message).encode())

        websocket_service = hey_joe.WebSocketService("127.0.0.1", ws_port)
        websocket_service.register_followup("states", send_states)
        websocket_service.register_followup("nodes", send_nodes)

        #
        # WSGI Service
        #

        self.rest_app = Flask("fleet-monitor", template_folder=TEMPLATES_DIR)
        rest_app = self.rest_app

        @rest_app.route("/")
        def status():
            try:
                return render_template('monitor.html')
            except Exception as e:
                self.log.debug(str(e))

        #
        # Server
        #

        deployer = HendrixDeploy(action="start",
                                 options={
                                     "wsgi": rest_app,
                                     "http_port": http_port
                                 })
        deployer.add_non_tls_websocket_service(websocket_service)

        click.secho(f"Running Moe on 127.0.0.1:{http_port}")

        if not dry_run:
            deployer.run()
示例#3
0
from hendrix.deploy.base import HendrixDeploy
from hendrix.experience import hey_joe

deployer = HendrixDeploy(options={
    'wsgi': 'example_app.wsgi.application',
    'http_port': 7575
})

websocket_service = hey_joe.WebSocketService("127.0.0.1", 9000)
deployer.add_non_tls_websocket_service(websocket_service)

deployer.run()
示例#4
0
def moe(teacher_uri, min_stake, network, ws_port, dry_run, http_port,
        learn_on_launch):
    """
    "Moe" NuCypher node monitor CLI.
    """

    click.secho(MOE_BANNER)

    #
    # Teacher
    #

    teacher_nodes = list()
    if teacher_uri:
        teacher_node = Ursula.from_seed_and_stake_info(seed_uri=teacher_uri,
                                                       federated_only=True,
                                                       minimum_stake=min_stake)
        teacher_nodes.append(teacher_node)

    # Deserialize network domain name if override passed
    if network:
        domain_constant = getattr(constants, network.upper())
        domains = {domain_constant}
    else:
        domains = None

    monitor = Moe(
        domains=domains,
        network_middleware=RestMiddleware(),
        known_nodes=teacher_nodes,
        federated_only=True,
    )

    monitor.start_learning_loop(now=learn_on_launch)

    #
    # Websocket Service
    #

    def send_states(subscriber):
        message = ["states", monitor.known_nodes.abridged_states_dict()]
        subscriber.sendMessage(json.dumps(message).encode())

    def send_nodes(subscriber):
        message = ["nodes", monitor.known_nodes.abridged_nodes_dict()]
        subscriber.sendMessage(json.dumps(message).encode())

    websocket_service = hey_joe.WebSocketService("127.0.0.1", ws_port)
    websocket_service.register_followup("states", send_states)
    websocket_service.register_followup("nodes", send_nodes)

    #
    # Flask App
    #

    rest_app = Flask("fleet-monitor", root_path=os.path.dirname(__file__))

    @rest_app.route("/")
    def status():
        template_path = os.path.join('monitor.html')
        return render_template(template_path)

    #
    # Server
    #

    deployer = HendrixDeploy(action="start",
                             options={
                                 "wsgi": rest_app,
                                 "http_port": http_port
                             })
    deployer.add_non_tls_websocket_service(websocket_service)

    click.secho(f"Running Moe on 127.0.0.1:{http_port}")

    if not dry_run:
        deployer.run()