RubyGems 导航菜单

博客

返回博客文章

RubyGems.org 统计数据发布

自首次发布以来,Bundler 团队一直渴望了解使用我们代码的开发人员。哪些版本的 Ruby 仍在积极使用?哪些版本的 RubyGems 可以安全停止支持?我们应该专注于测试哪些操作系统?

自首次发布以来已过去近 10 年,但今天 RubyGems 和 Bundler 团队很高兴地宣布,每个人都可以在 stats.rubygems.org 上查看这些问题的答案。从 2013 年的首次提交 到今天的网站工作,这是一个漫长的过程,因此我将尽量坚持重点。

在阅读诸如 Instapaper 的 iOS 设备和操作系统版本统计数据更新Planet Argon 针对 Ruby on Rails 社区的长期调查 等报告后,我有感而发,尝试收集有关 Bundler 用户的类似统计数据。知道 Bundler 已经在每次执行 bundle install 时向 RubyGems.org 发送一些信息,于是以此为起点。在 User-Agent 头中发送 Bundler、RubyGems 和 Ruby 版本信息意味着我们想要跟踪的版本将在 RubyGems.org 服务器日志中提供。

短短 2 到 3 年后,我得以确保由 Ruby Together 赞助的 RubyGems.org 服务器日志的编辑版本将被保存到存储中。接下来,我只需要弄清楚如何获取 S3 上的文件并将其转换为有用的每日数字。

不幸的是,RubyGems.org 是一个非常受欢迎的网站,它产生了极其庞大的日志:每天大约有 500GB 的内容。当你需要每天都以低于 20GB/小时的速度廉价下载这些日志、对其进行解析以获取用户代理、尝试删除重复项然后保存结果时,这是一项非常艰巨的任务。

经过了几年时间,以及 针对 Ruby、Python、Apache Spark、AWS Glue、Rust 和 Amazon Lambda 进行的大量实验,我最终设法创建了一个可以在 2018 年下半年可靠处理 RubyGems.org 日志消防软管并提供每日数字的系统。

那时,André 开始开发一个可以展示数据的网络应用程序,但随后整个 2019 年都完全没有时间开展该项目了。幸运的是,那时候 @sidk 出手相助,英勇奋战,完成了网络应用程序,并将其扩展成了我们今天看到的网站。以下是由 Sid 总结的最终网站的设置方式:


展示网络应用程序包括以下组件:

  • 一项每日耙子任务,用于将 S3 中的数据下载到 Postgres。在处理日志数据后,Kirby(日志解析器)将数据上传到 S3。
  • 一个 JSON API,带有以下端点:
    • /versions/{thing}
    • /comparison/{thing1}/{thing2}

在 API 中,每个 thing 之一都是:ruby、bundler、rubygems、platform 或 ci。

在前端,我们当前使用的是 ApexCharts。页面上的每个图表都是一个局部图表,它向服务器发出请求以请求版本或比较数据,然后实例化一个 ApexChart。


最终,一切都进行得很顺利,我们非常兴奋和自豪地向 Ruby 社区提供如此有用的资源。我们很高兴与你方合作,让 日志解析器展示网络应用程序 都变得更好。

查看 stats.rubygems.org,并告诉我们你的想法!

André Arko and Sid Krishnan