def subscribe(channel, options, log, prog): try: import grpc import gnmi_pb2 except ImportError as err: log.error(str(err)) quit() log.debug("Create gNMI stub") stub = gnmi_pb2.gNMIStub(channel) req_iterator = gen_request( options, log ) metadata = [('username',options.username), ('password', options.password)] msgs = 0 upds = 0 secs = 0 start = 0 try: responses = stub.Subscribe(req_iterator, options.timeout, metadata=metadata) for response in responses: if response.HasField('sync_response'): log.debug('Sync Response received\n'+str(response)) secs += time.time() - start start = 0 if options.stats: log.info("%d updates and %d messages within %1.2f seconds", upds, msgs, secs) log.info("Statistics: %5.0f upd/sec, %5.0f msg/sec", upds/secs, msgs/secs) elif response.HasField('error'): log.error('gNMI Error '+str(response.error.code)+' received\n'+str(response.error.message)) elif response.HasField('update'): if start==0: start=time.time() msgs += 1 upds += len(response.update.update) if not options.stats: if options.logstash: log.info(response.update.update) if options.output == "xpath": log.info(grpc_support.xpath_output(response.update)) else: log.info('Update received\n'+str(response)) else: log.error('Unknown response received:\n'+str(response)) except KeyboardInterrupt: log.info("%s stopped by user", prog) except grpc.RpcError as x: log.error("grpc.RpcError received:\n%s", x.details) except Exception as err: log.error(err) if (msgs>1): log.info("%d update messages received", msgs) return msgs
def get(channel, options, log, prog): try: import grpc import gnmi_pb2 except ImportError as err: log.error(str(err)) quit() log.debug("Create gNMI stub") stub = gnmi_pb2.gNMIStub(channel) req_iterator = gen_request(options, log) metadata = [('username', options.username), ('password', options.password)] msgs = 0 upds = 0 secs = 0 start = 0 try: response = gnmi_pb2.GetResponse() response = stub.Get(req_iterator, options.timeout, metadata=metadata) # if response.HasField('notification'): # log.debug('Sync Response received\n'+str(response)) # secs += time.time() - start # start = 0 # if options.stats: # log.info("%d updates and %d messages within %1.2f seconds", upds, msgs, secs) # log.info("Statistics: %5.0f upd/sec, %5.0f msg/sec", upds/secs, msgs/secs) # elif response.HasField('error'): # log.error('gNMI Error '+str(response.error.code)+' received\n'+str(response.error.message)) # elif response.HasField('update'): # if start==0: # start=time.time() # msgs += 1 # upds += len(response.update.update) # if not options.stats: # log.info('Update received\n'+str(response)) # else: # log.error('Unknown response received:\n'+str(response)) except KeyboardInterrupt: log.info("%s stopped by user", prog) except grpc.RpcError as x: log.error("grpc.RpcError received:\n%s", x.details) except Exception as err: log.error(err) if (msgs > 1): log.info("%d update messages received", msgs) return msgs return response
def get_capabilities(channel, options, log): try: import grpc import gnmi_pb2 except ImportError as err: log.error(str(err)) quit() stub = gnmi_pb2.gNMIStub(channel) metadata = [('username', options.username), ('password', options.password)] responses = gnmi_pb2.CapabilityResponse() log.info("Obtaining capabilities from " + options.server) responses = stub.Capabilities(gnmi_pb2.CapabilityRequest(), 5, metadata=metadata) return responses
log.error( 'Disable cert validation against root certificate (InsecureSkipVerify) is not yet supported!' ) # TODO: Clarify how to setup gRPC with SSLContext using verify_mode:=CERT_NONE cred = grpc.ssl_channel_credentials(root_certificates=None, private_key=None, certificate_chain=None) channel = grpc.secure_channel(options.server, cred) else: log.info("Create insecure Channel") channel = grpc.insecure_channel(options.server) log.debug("Create gNMI stub") stub = gnmi_pb2.gNMIStub(channel) req_iterator = gen_request(options) metadata = [('username', options.username), ('password', options.password)] msgs = 0 upds = 0 secs = 0 start = 0 try: responses = stub.Subscribe(req_iterator, options.timeout, metadata=metadata) for response in responses: if response.HasField('sync_response'):