ZIO
Python and C++ interface to ZeroMQ and Zyre
domo.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 import json
3 from .. import jsonnet
4 import click
5 from .. import rules
6 
7 import logging
8 log = logging.getLogger("zio")
9 
10 import zmq
11 
12 @click.group("domo")
13 @click.pass_context
14 def cli(ctx):
15  '''
16  ZIO DOMO command line interface
17  '''
18 
19 
20 sock_name2type = dict(router=zmq.ROUTER,
21  dealer=zmq.DEALER,
22  server=zmq.SERVER,
23  client=zmq.CLIENT)
24 
25 
26 @cli.command('domo-tripping')
27 @click.option("--verbose/--no-verbose", default=False,
28  help="Provide extra output")
29 @click.option("-n", "--number", default=10000,
30  help="Number of requests")
31 @click.option("-f", "--frontend",
32  type=click.Choice(["router", "server"], case_sensitive=False),
33  default="router",
34  help="Type name for the front-end socket")
35 @click.option("-b", "--backend",
36  type=click.Choice(["router", "server"], case_sensitive=False),
37  default="router",
38  help="Type name for the back-end socket")
39 def tripping(verbose, number, frontend, backend):
40  '''
41  Run the tripping example. The two optinal
42  '''
43  from zio.domo.tripping import main
44 
45  fes_type = sock_name2type[frontend.lower()]
46  bes_type = sock_name2type[backend.lower()]
47  main(fes_type, bes_type, number, verbose)
48 
49 
50 @cli.command('domo-broker')
51 @click.option("--verbose/--no-verbose", default=False,
52  help="Provide extra output")
53 @click.option("-s", "--socket",
54  type=click.Choice(["router", "server"], case_sensitive=False),
55  default="router",
56  help="Type name for socket")
57 @click.option("-a","--address", default="tcp://127.0.0.1:5555")
58 def broker(verbose, socket, address):
59  '''
60  Run the domo broker
61  '''
62  from zio.domo.broker import Broker
63  broker = Broker(sock_name2type[socket], verbose)
64  broker.bind(address)
65  broker.mediate()
66 
67 @cli.command('domo-echo-worker')
68 @click.option("--verbose/--no-verbose", default=False,
69  help="Provide extra output")
70 @click.option("-s", "--socket",
71  type=click.Choice(["dealer", "client"], case_sensitive=False),
72  default="dealer",
73  help="Type name for socket")
74 @click.option("-a","--address", default="tcp://127.0.0.1:5555")
75 def echo(verbose, socket, address):
76  '''
77  Run a worker providing an echo service
78  '''
79  from zio.domo.worker import Worker
80  worker = Worker(address, b"echo", sock_name2type[socket], verbose)
81  reply = None
82  while True:
83  request = worker.recv(reply)
84  if request is None:
85  break
86  reply = request # Echo is complex... :D
87 
88 @cli.command('domo-echo-client')
89 @click.option("--verbose/--no-verbose", default=False,
90  help="Provide extra output")
91 @click.option("-s", "--socket",
92  type=click.Choice(["dealer", "client"], case_sensitive=False),
93  default="dealer",
94  help="Type name for socket")
95 @click.option("-n", "--number", default=1,
96  help="Number of times to repeat the service request")
97 @click.option("-a","--address", default="tcp://127.0.0.1:5555")
98 @click.argument("service")
99 @click.argument("args", nargs=-1)
100 def client(verbose, socket, number, address, service, args):
101  '''
102  Run a client exercising an echo service
103  '''
104  from zio.domo.client import Client
105  client = Client(address, sock_name2type[socket], verbose)
106 
107  service = service.encode('utf-8')
108  request = [one.encode('utf-8') for one in args]
109  for scount in range(number):
110  try:
111  if verbose:
112  print("send",service,request)
113  client.send(service, request)
114  except KeyboardInterrupt:
115  break
116  for rcount in range(number):
117  try:
118  reply = client.recv()
119  except KeyboardInterrupt:
120  break
121  if reply is None:
122  break
123  if verbose:
124  print("recv",reply)
125 
126  print(f'{scount+1} sent, {rcount+1} recv')
127 
def broker(verbose, socket, address)
Definition: domo.py:58
def cli(ctx)
Definition: domo.py:14
def echo(verbose, socket, address)
Definition: domo.py:75
def main()
Definition: __main__.py:16
def client(verbose, socket, number, address, service, args)
Definition: domo.py:100
def tripping(verbose, number, frontend, backend)
Definition: domo.py:39