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')
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()
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()
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()