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)