博客
2020 年 3 月 9 日
RubyGems.org 统计数据发布
André Arko 和 Sid Krishnan 撰写
自首次发布以来,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,并告诉我们你的想法!