用于生成和保留fedmsg统计信息的守护进程
statscache的Python项目详细描述
用于生成和保存fedmsg统计信息的守护进程。
motivation:我们有一个名为datagrepper的整洁服务,您可以使用它查询 fedmsg总线的历史记录。很酷,但不够 我们想做一些更高级的报告和分析。拿着, 例如,releng-dash。 为了呈现页面,它必须向 datagrepper尝试从 结果。因此,加载需要很长时间。
进去吧,斯塔查奇。它是fedmsg hub的一个插件,位于 基础设施。当新消息到达时,它将把它们传递给plugins,后者将计算并 存储各种统计数据。如果我们想保留一种新的统计数据,我们 为它编写一个新插件。它的前端有一个小瓶子,很像 datagrepper,它允许您查询这个或那个 格式(csv、json,也可能是html或svg,但这可能是过分了)。这个想法 因为我们可以建造更整洁、更智能的前端, 基于fedmsg的活动非常快..也许以后会深入到 details保存在datagrepper中。
它有点像data mart。
如何运行它
创建一个virtualenv,git克隆这个目录和statcache_插件 回购。
先在statscache目录中运行python setup.py develop,然后运行它 在statscache_plugins中。
在statcache repo主目录中,运行fedmsg-hub启动 守护进程。你应该会看到很多有趣的数据存储在stdout中。发射 web接口(目前只提供json和csv响应)运行 python statscache/app.py在同一目录中。现在您可以查看 通过访问json中的可用插件 localhost:5000/api/,您可以检索 通过将给定插件的标识符附加到该插件上而记录的统计信息 网址。
您可以使用python setup.py test运行测试。
工作原理
当消息到达时,fedmsg consumer将收到该消息并将副本交给 每个加载的插件进行处理。每个插件在内部缓存结果 直到polling producer指示它更新 它的数据库模型并清空它的缓存。投票的频率 producer可以在应用程序级别配置,并设置为1 默认为第二个。
每个插件都应该使用基本的sqlalchemy模型来存储 他们的结果(我们可以在发现新的 需求)。但是了解基本模型的重要一点是 负责知道如何将自己序列化为 rest api(例如,呈现.to_csv()和.to_json())。
尽管statscache是一个长期运行的服务,但是 重启是不可避免的。但是,在 fedmsg数据可能会导致一些插件产生不准确的统计数据。幸运的是, statscache内置了一个透明处理机制。打开 启动时,statcache检查每个插件最新数据库的时间戳 更新并查询datagrepper以获取填补任何空白所需的fedmsg数据。 另一方面,如果插件不需要 fedmsg历史记录,然后它可以指定一个“backlog delta”,即 对它有用的FEDSMSG数据的最大积压。