def handle(self, client):
        itrans = self.inputTransportFactory.getTransport(client)
        otrans = self.outputTransportFactory.getTransport(client)
        iprot = self.inputProtocolFactory.getProtocol(itrans)
        oprot = self.outputProtocolFactory.getProtocol(otrans)

        try:
            while True:
                start_time = time.time() * 1000000
                self.processor.process(iprot, oprot)
                end_time = time.time() * 1000000

                tctx = thread_storage.getTraceContext()
                if tctx.isEnabled():
                    name = span_util.createSpanName(self.service_name, \
                                                    tctx.getRPCMethod())
                    span = span_util.createSpan(name, tctx.getTraceID(), \
                                                tctx.getSpanID(), tctx.getSpanParentID())
                    span.server_host = self.server_ip
                    span.events = [span_util.createEvent(start_time, EventType.SERVER_RECV), \
                                   span_util.createEvent(end_time, EventType.SERVER_SEND)]

                    if self.debug:
                        logging.debug(span)

                    tctx.addSpan(span)
                    self.logSpans(tctx)

        except TTransport.TTransportException, tx:
            pass
    def logSpan(self, rpc_method, start_time, end_time):
        trace_id = self.trace_context.getTraceID()
        span_id = self.trace_context.getSpanID()
        span_parent_id = self.trace_context.getSpanParentID()
        name = span_util.createSpanName(self.service_name, rpc_method)
        span = span_util.createSpan(name=name,
                                     trace_id=trace_id,
                                     span_id=span_id,
                                     span_parent_id=span_parent_id)

        span.client_host = self.client_ip
        span.events = [span_util.createEvent(long(start_time), EventType.CLIENT_RECV), \
                       span_util.createEvent(long(end_time), EventType.CLIENT_SEND)]
        self.trace_context.addSpan(span)