Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: infra_libs/instrumented_requests.py

Issue 2213143002: Add infra_libs as a bootstrap dependency. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Removed the ugly import hack Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: infra_libs/instrumented_requests.py
diff --git a/infra_libs/instrumented_requests.py b/infra_libs/instrumented_requests.py
deleted file mode 100644
index c04c20343fc1c4e35692329a596d88712d70925c..0000000000000000000000000000000000000000
--- a/infra_libs/instrumented_requests.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Report ts_mon metrics for HTTP requests made by the `requests` library.
-
-This module provides get(), post(), etc. methods that wrap the corresponding
-methods in the requests module. They take an additional first 'name' argument
-which is an identifier for the type of request being made.
-
-Example::
-
- from infra_libs import instrumented_requests
- r = instrumented_requests.get('myapi', 'https://example.com/api')
-
-Alternatively you can add the hook manually::
-
- import requests
- from infra_libs import instrumented_requests
- r = requests.get(
- 'https://example.com/api',
- hooks={'response': instrumented_requests.instrumentation_hook('myapi')})
-"""
-
-import functools
-
-import requests
-
-from infra_libs.ts_mon.common import http_metrics
-
-
-def instrumentation_hook(name):
- """Returns a hook function that records ts_mon metrics about the request.
-
- Usage::
-
- r = requests.get(
- 'https://example.com/api',
- hooks={'response': instrumented_requests.instrumentation_hook('myapi')})
-
- Args:
- name: An identifier for the HTTP requests made by this object.
- """
-
- def _content_length(headers):
- if headers is None or 'content-length' not in headers:
- return 0
- return int(headers['content-length'])
-
- def hook(response, *_args, **_kwargs):
- request_bytes = _content_length(response.request.headers)
- response_bytes = _content_length(response.headers)
- duration_msec = response.elapsed.total_seconds() * 1000
-
- fields = {'name': name, 'client': 'requests'}
- http_metrics.request_bytes.add(request_bytes, fields=fields)
- http_metrics.response_bytes.add(response_bytes, fields=fields)
- http_metrics.durations.add(duration_msec, fields=fields)
-
- _update_status(name, response.status_code)
-
- return hook
-
-
-def _update_status(name, status):
- fields = {'status': status, 'name': name, 'client': 'requests'}
- http_metrics.response_status.increment(fields=fields)
-
-
-def _wrap(method, name, url, *args, **kwargs):
- hooks = {'response': instrumentation_hook(name)}
- if 'hooks' in kwargs:
- hooks.update(kwargs['hooks'])
- kwargs['hooks'] = hooks
-
- try:
- return getattr(requests, method)(url, *args, **kwargs)
- except requests.exceptions.ReadTimeout:
- _update_status(name, http_metrics.STATUS_TIMEOUT)
- raise
- except requests.exceptions.ConnectionError:
- _update_status(name, http_metrics.STATUS_ERROR)
- raise
- except requests.exceptions.RequestException:
- _update_status(name, http_metrics.STATUS_EXCEPTION)
- raise
-
-
-request = functools.partial(_wrap, 'request')
-get = functools.partial(_wrap, 'get')
-head = functools.partial(_wrap, 'head')
-post = functools.partial(_wrap, 'post')
-patch = functools.partial(_wrap, 'patch')
-put = functools.partial(_wrap, 'put')
-delete = functools.partial(_wrap, 'delete')
-options = functools.partial(_wrap, 'options')

Powered by Google App Engine
This is Rietveld 408576698