Django的统计存储

django-trackstats的Python项目详细描述


https://badge.fury.io/py/django-trackstats.pnghttps://travis-ci.org/pennersr/django-trackstats.pnghttps://img.shields.io/pypi/v/django-trackstats.svgCoverage Statushttps://pennersr.github.io/img/bitcoin-badge.svg

记录你的统计数据。在

源代码
http://github.com/pennersr/django-trackstats

用例

  • 您需要一个优雅的解决方案来以通用和结构化的方式存储统计信息。在
  • 您需要对各种聚合查询的结果进行非规范化。在
  • 您需要访问应用程序层中存储的统计信息。在

因此,重点是存储统计信息,以便以后在应用程序中使用 打开。其他功能,如图表、报表、OLAP、查询生成器、切片&; dicing、与Datadog的集成等都超出了范围。在

概念

使用了以下概念:

公制
要跟踪的一条信息。例如,“订单计数”, 或“注册用户数”。
度量按组组织,每个组称为一个域。为 示例您可以有一个“购物”域,其中包含诸如“订单”之类的指标 “count”、“Items selled”、“Products view”和“users”域 “登录数”,“注册数”。或者,如果你在跟踪外部 社交网络的统计数据,你可以介绍一个“推特” 域和指标“关注者计数”。
统计
用于按日期存储特定度量的实际值。
周期
存储值保存的时间段。例如,你 可以随时跟踪累计的数字(周期.寿命), 每天存储增量值(周期.天或保留 跟踪过去7天的滚动计数(周期.周)。
参考ID
必须为域和指标分配唯一的引用ID(类型 字符串)。理由:具有人类可读、非PK的参考文献 一旦您要导出统计数据,就必须立即执行。

使用

首先,设置域:

from trackstats.models import Domain

Domain.objects.SHOPPING = Domain.objects.register(
    ref='shopping',
    name='Shopping')
Domain.objects.USERS = Domain.objects.register(
    ref='users',
    name='Users')
Domain.objects.TWITTER = Domain.objects.register(
    ref='twitter',
    name='Twitter')

定义几个指标:

^{pr2}$

现在,让我们存储一些一次性统计数据:

from trackstats.models import StatisticByDate, Domain, Metric, Period

# All-time, cumulative, statistic
n = Order.objects.all().count()
StatisticByDate.objects.record(
    metric=Metric.objects.SHOPPING_ORDER_COUNT,
    value=n,
    Period=Period.LIFETIME)

# Users signed up, at a specific date
dt = date.today()
n = User.objects.filter(
    date_joined__day=dt.day,
    date_joined__month=dt.month,
    date_joined__year=dt.year).count()
StatisticByDate.objects.record(
    metric=Metric.objects.USERS_USER_COUNT,
    value=n,
    Period=Period.DAY)

自己创建存储统计信息的代码可能是一项乏味的工作。 幸运的是,有一些捷径可以用来跟踪统计数据而不需要 必须自己编写代码。在

假设您希望跟踪在 每日基础:

from trackstats.trackers import CountObjectsByDateTracker

CountObjectsByDateTracker(
    period=Period.DAY,
    metric=Metric.objects.COMMENT_COUNT,
    date_field='timestamp').track(Comment.objects.all())

或者,如果你想跟踪每天每个用户的评论数量 依据:

CountObjectsByDateAndObjectTracker(
    period=Period.DAY,
    metric=Metric.objects.COMMENT_COUNT,
    # comment.user points to a User
    object_model=User,
    object_field='user',
    # Comment.timestamp is used for grouping
    date_field='timestamp').track(Comment.objects.all())

模型

StatisticByDate模型表示按日期分组的统计数据- 最常见的用例。在

另一个常见的用例是按日期和其他对象分组 (例如用户、类别、站点)。为此,请使用 按日期和对象统计。它使用通用外键。在

如果您需要以不同的方式分组,例如按国家、省 而date,您可以使用AbstractStatistic基类来构建 那个。在

交叉销售

如果你喜欢这样,你也可能喜欢:

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

推荐PyPI第三方库


热门话题
使用liblinear(java)进行机器学习概率预测,在代码中直接使用分类器   java唯一回文的总和略大于预期值   java JaxRS:从REST调用获取错误消息?   swing如果使用java满足特定条件,如何设置特定行的颜色?   HTML部署中的java LibGDX未捕获运行时异常   mysql在Java中触发事件   java在WebFlux WebClient中测试状态代码时如何获取响应体?   面向协作流消费者的java设计思想?   使用hibernate条件的多条件java Case语句   java查询选择了错误的布尔值   java如何使用assert编写selenium webdriver脚本来验证登录凭据是否正确?   java禁用JFrame中的触摸指示灯   java Querydsl:如何编写“复杂”查询   什么时候Java API中会添加新的东西   用于检查数组是否为null或空的java If语句不起作用   java如何在jstl中为(inti=0,i<=collection.size()+1,i++)创建等价项   java jsp scriplet使用具有bean值的函数