github.com/google/fleetspeak@v0.1.15-0.20240426164851-4f31f62c1aea/frr_python/frr_server.py (about)

     1  """FRR Fleetspeak server
     2  
     3  Receives messages from a client, prints them and forwards them to master server
     4  """
     5  
     6  import logging
     7  import time
     8  from absl import app
     9  from absl import flags
    10  from fleetspeak.server_connector.connector import InsecureGRPCServiceClient
    11  from fleetspeak.src.inttesting.frr.proto.fleetspeak_frr.frr_pb2 import MessageInfo
    12  from fleetspeak.src.inttesting.frr.proto.fleetspeak_frr.frr_pb2 import TrafficResponseData
    13  from fleetspeak.src.inttesting.frr.proto.fleetspeak_frr.frr_pb2_grpc import MasterStub
    14  import grpc
    15  
    16  
    17  FLAGS = flags.FLAGS
    18  
    19  flags.DEFINE_string(
    20      name="master_server_address",
    21      default="localhost:6059",
    22      help="Address of master server to forward clients' messages",
    23  )
    24  
    25  
    26  class Listener:
    27    """Connects to master server and processes messages from clients"""
    28  
    29    def __init__(self):
    30      channel = grpc.insecure_channel(FLAGS.master_server_address)
    31      self.stub = MasterStub(channel)
    32  
    33    def __call__(self, message, context):
    34      del context  # Unused
    35  
    36      if message.message_type != "TrafficResponse":
    37        logging.info("Unknown message type: %s", message.message_type)
    38        return
    39  
    40      response_data = TrafficResponseData()
    41      message.data.Unpack(response_data)
    42      logging.info(
    43          "RESPONSE - master_id: %d, "
    44          "request_id: %d, "
    45          "response_index: %d, "
    46          "text: %s",
    47          response_data.master_id,
    48          response_data.request_id,
    49          response_data.response_index,
    50          response_data.data,
    51      )
    52  
    53      self.stub.RecordTrafficResponse(
    54          MessageInfo(client_id=message.source.client_id, data=response_data)
    55      )
    56  
    57  
    58  def main(argv=None):
    59    del argv  # Unused.
    60  
    61    service_client = InsecureGRPCServiceClient("FRR")
    62    service_client.Listen(Listener())
    63  
    64    while True:
    65      time.sleep(1)
    66  
    67  
    68  if __name__ == "__main__":
    69    app.run(main)