从只提供当前数字的api中记录历史统计数据。

api_stats的Python项目详细描述


api_stats是一个python工具,旨在从api端点记录统计信息。例如,github api为每个版本提供了单个下载次数;通过运行此工具,您可以轻松地绘制滚动平均值和历史数据。

快速启动

api_stats加载一个“配置文件”,告诉它要获取什么以及要记录哪些字段。这个文件是一个python脚本,将由api_stats加载,它有一个单独的全局stats作为与程序的接口。此接口当前提供两个函数:record(key, value)get_json(url)

下面是一个配置文件示例,它记录了从github版本下载每个文件的次数:

releases=stats.get_json("https://api.github.com/repos/remram44/api_stats/releases")forreleaseinreleases:relname=release.get('tag_name')orrelease['name']forassetinrelease['assets']:stats.record('%s/%s'%(relname,asset['name']),asset['download_count'])

然后可以绘制数据,例如使用matplotlib:

python -m api_stats.plot -m '^(.+)$''api_stats:\g<1>' data.jsonl

更复杂的例子

您可能希望使用函数将从特定源检索数据点的操作考虑在内:

defgithub(repo):releases=stats.get_json("https://api.github.com/repos/%s/releases"%repo)forreleaseinreleases:ifrelease['draft']:continuerelname=release.get('tag_name')orrelease['name']forassetinrelease['assets']:stats.record('github/%s/%s/%s'%(repo,relname,asset['name']),asset['download_count'])github('VisTrails/VisTrails')github('remram44/api_stats')defpypi(pkg):releases=stats.get_json("https://pypi.python.org/pypi/%s/json"%pkg)['releases']forrelname,releaseinreleases.items():forassetinrelease:stats.record('pypi/%s/%s/%s'%(pkg,relname,asset['filename']),asset['downloads'])pypi('VisTrails')pypi('api_stats')

这将在pypi/<pkg_name>/<version>/<filename>github/<owner>/<repo>/<version>/<filename>下记录数据。然后,您可以绘制数据,每个项目一个数字,按版本聚合,但同时添加pypi和github,使用:

python -m api_stats.plot \
    -m '^pypi/([^/]+)/([^/]+)/.+$''\g<1>:\g<2>'\
    -m '^github/[^/]+/([^/]+)/v([^/]+)/.+$''\g<1>:\g<2>'\
    releases.jsonl
Example Plot with matplotlib

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

推荐PyPI第三方库


热门话题
在shell中执行java并等待,直到我得到返回代码   java空安全检查和if条件优先   java Android:使用属性时出现空指针异常   有没有办法将JAVA代码转换成汇编语言(机器语言)。因此,它可以在IC上燃烧(如微控制器8051或其他)   java Azure AD和带有Oauth 2的Spring安全性   安卓解析文件数据下载导致java。lang.OutOfMemoryError   多线程使用Executors服务在Java中创建固定大小线程池的最佳方法   sql从Java调用PostgreSQL中的存储过程   来自Kafka连接器容器的java Access Redis容器获取RedisConnectionException   java如何编写自定义通缩字典并实现它   java使用线程从列表中复制文件   java Hibernate NClob属性   java如何检测在XML中配置的未使用的Springbean?   java Freemarker日期分配到看似有效的日期失败   java解决方案如何在solrconfig中使用<lib>标记的“dir”属性。xml   在多个docker实例(Spring JPA@Lock、Java synchronized、scheduled jobs等)上运行应用程序时,如何处理代码同步?   而循环Java将程序正在读取的PDU存储在ArrayList中