应用程序度量收集器

AppMetrics的Python项目详细描述


开始

将appmetrics安装到python环境中:

pip install appmetrics

或者,如果不使用pip,请下载并解包,然后:

python setup.py install

一旦安装了appmetrics,就可以通过 metrics 模块访问它:

>>> from appmetrics import metrics
>>> histogram = metrics.new_histogram("test")
>>> histogram.notify(1.0)
True
>>> histogram.notify(2.0)
True
>>> histogram.notify(3.0)
True
>>> histogram.get()
{'arithmetic_mean': 2.0, 'kind': 'histogram', 'skewness': 0.0, 'harmonic_mean': 1.6363636363636365, 'min': 1.0, 'standard_deviation': 1.0, 'median': 2.0, 'histogram': [(3.0, 3), (5.0, 0)], 'percentile': [(50, 2.0), (75, 2.0), (90, 3.0), (95, 3.0), (99, 3.0), (99.9, 3.0)], 'n': 3, 'max': 3.0, 'variance': 1.0, 'geometric_mean': 1.8171205928321397, 'kurtosis': -2.3333333333333335}

基本上,您可以使用一个 metrics.new. 函数来创建一个新的度量。度量将存储到 一个内部注册表,因此您可以在应用程序的不同位置访问它:

>>> test_histogram = metrics.metric("test")
>>> test_histogram.notify(4.0)
True

metrics 注册表是线程安全的,您可以在多线程web服务器中安全地使用它。

使用带直方图的装饰符,我们可以计时函数:

>>> import time, random
>>> @metrics.with_histogram("test")
... def my_worker():
...     time.sleep(random.random())
...
>>> my_worker()
>>> my_worker()
>>> my_worker()

让我们看看结果:

>>> metrics.get("test")
{'arithmetic_mean': 0.41326093673706055, 'kind': 'histogram', 'skewness': 0.2739718270714368, 'harmonic_mean': 0.14326954591313346, 'min': 0.0613858699798584, 'standard_deviation': 0.4319169569113129, 'median': 0.2831099033355713, 'histogram': [(1.0613858699798584, 3), (2.0613858699798584, 0)], 'percentile': [(50, 0.2831099033355713), (75, 0.2831099033355713), (90, 0.895287036895752), (95, 0.895287036895752), (99, 0.895287036895752), (99.9, 0.895287036895752)], 'n': 3, 'max': 0.895287036895752, 'variance': 0.18655225766752892, 'geometric_mean': 0.24964828731906127, 'kurtosis': -2.3333333333333335}

还可以使用 计时器 上下文管理器来计时代码的特定部分:

>>> import time, random
... def my_worker():
...     with metrics.timer("test"):
...         time.sleep(random.random())
...

让我们每隔5秒在屏幕上打印一次度量数据:

>>> from appmetrics import reporter
>>> def stdout_report(metrics):
...     print metrics
...
>>> reporter.register(stdout_report, reporter.fixed_interval_scheduler(5))
'5680173c-0279-46ec-bd88-b318f8058ef4'
>>> {'test': {'arithmetic_mean': 0.0, 'kind': 'histogram', 'skewness': 0.0, 'harmonic_mean': 0.0, 'min': 0, 'standard_deviation': 0.0, 'median': 0.0, 'histogram': [(0, 0)], 'percentile': [(50, 0.0), (75, 0.0), (90, 0.0), (95, 0.0), (99, 0.0), (99.9, 0.0)], 'n': 0, 'max': 0, 'variance': 0.0, 'geometric_mean': 0.0, 'kurtosis': 0.0}}
>>> my_worker()
>>> my_worker()
>>> {'test': {'arithmetic_mean': 0.5028266906738281, 'kind': 'histogram', 'skewness': 0.0, 'harmonic_mean': 0.2534044030939462, 'min': 0.14868521690368652, 'standard_deviation': 0.50083167520453, 'median': 0.5028266906738281, 'histogram': [(1.1486852169036865, 2), (2.1486852169036865, 0)], 'percentile': [(50, 0.14868521690368652), (75, 0.8569681644439697), (90, 0.8569681644439697), (95, 0.8569681644439697), (99, 0.8569681644439697), (99.9, 0.8569681644439697)], 'n': 2, 'max': 0.8569681644439697, 'variance': 0.2508323668881758, 'geometric_mean': 0.35695727672917066, 'kurtosis': -2.75}}
>>> reporter.remove('5680173c-0279-46ec-bd88-b318f8058ef4')
<Timer(Thread-1, started daemon 4555313152)>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何刷新gradle任务的目标   java JavaFX折线图在高值时显示为空   如何在java中使用http put请求向云组织发送本地文件?   java如何将Spring Security BadCredentialsException映射到HTTP 401代码   java JasperReports:UTF8中的一些符号在导出为PDF后丢失   java使用正则表达式替换不在括号中的逗号   使用Jackson库编辑JsonArray   在Java中解析逗号分隔的文本   java寻求正确的代码   action Java如何在actionperform中调用paint   java Hibernate分离条件和   java Spring:如何针对多个数据源测试同一个类?   java onAccessibilityEvent操作\u单击不工作   找不到java Android WebView程序包R/程序包Android。支持v7。应用程序   java在自定义ArrayList中仅添加一次项   Java多部分RSA解密   java当使用生成器模式时,我们如何添加额外的构造函数