transmission.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:libhoney-py 作者: honeycombio 项目源码 文件源码
def _send(self, ev):
        '''_send should only be called from sender and sends an individual
            event to Honeycomb'''
        start = get_now()
        try:
            url = urljoin(urljoin(ev.api_host, "/1/events/"), ev.dataset)
            req = requests.Request('POST', url, data=str(ev))
            event_time = ev.created_at.isoformat()
            if ev.created_at.tzinfo is None:
                event_time += "Z"
            req.headers.update({
                "X-Event-Time": event_time,
                "X-Honeycomb-Team": ev.writekey,
                "X-Honeycomb-SampleRate": str(ev.sample_rate)})
            preq = self.session.prepare_request(req)
            resp = self.session.send(preq)
            if (resp.status_code == 200):
                sd.incr("messages_sent")
            else:
                sd.incr("send_errors")
            response = {
                "status_code": resp.status_code,
                "body": resp.text,
                "error": "",
            }
        except Exception as e:
            # Sometimes the ELB returns SSL issues for no good reason. Sometimes
            # Honeycomb will timeout. We shouldn't influence the calling app's
            # stack, so catch these and hand them to the responses queue.
            sd.incr("send_errors")
            response = {
                "status_code": 0,
                "body": "",
                "error": repr(e),
            }
        finally:
            dur = get_now() - start
            response["duration"] = dur.total_seconds() * 1000  # report in milliseconds
            response["metadata"] = ev.metadata
        if self.block_on_response:
            self.responses.put(response)
        else:
            try:
                self.responses.put_nowait(response)
            except queue.Full:
                pass
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号