本项目为 OpenSODA 挑战赛参赛项目。 旨在为 OpenDigger 提供的各类统计型和网络型的指标提供统一的 Terminal User Interface (TUI)。
- 🚀 基于 ChatGPT 的 自然语言化查询 功能
- 🚀 针对不同类型指标的 SQL 和 Cypher 查询操作
- 🚀 丰富的 交互式 UI 展示功能
- 🚀 基于 Rust 开发,支持单文件分发,无需安装依赖
本项目在 Github Release 提供二进制文件 [🚀链接]。
若期望手动构建,可采用,需要 Nightly 版本的 Rust。
cargo install --git https://github.com/DarkHighness/opendigger-cli
请保证 ~/.cargo/bin
在 PATH
环境变量中。
或手动克隆仓库并构建:
git clone https://github.com/DarkHighness/opendigger-cli
cd opendigger-cli
cargo build --release
构建完成后,可在 target/release
目录下找到可执行文件。
部分演示提供了基于 asciinema 转换得到的GIF 演示。 若图像无法正常加载,请尝试静态演示版本 README_STATIC.md。
本工具为底层的统计型和网络型的指标提供了统一的 SQL 和 Cypher 查询表示。 SQL 和 Cypher 为后续的查询和处理操作提供了极大的灵活性,但对于非专业人士来说,SQL 和 Cypher 查询语言的学习成本较高。 本工具提供了基于 ChatGPT 的自然语言化查询功能,用户可以通过自然语言的方式查询指标数据。
注: 使用该功能需要手动配置 OPENAI_API_KEY 环境变量,具体配置方法请参考 OpenAI API。
可能的示例如下:
- 对比
X-lab2017/open-digger
和vuejs/core
仓库的 star 数量变化
$ opendigger-cli chat "仓库‘X-lab2017/open-digger’,'vuejs/core' stars 数量的变化, 保留仓库名称" --ui
注: 本工具支持中文输入,但 asciinema 中录制中文字符存在乱码,故演示中使用英文输入。
X-lab2017/open-digger
在哪个月获得了最多的 star?
$ opendigger-cli chat "仓库‘X-lab2017/open-digger’ 在哪一个月获得了最多的 star" --ui
本工具提供了基于 SQL 和 Cypher 的查询功能,用户可以通过 SQL 和 Cypher 查询指标数据。 查询结果支持多种展示方式,并支持管道操作符。
支持的 SQL 操作包括:SELECT
, JOIN
, WHERE
, GROUPBY
, ORDERBY
, LIMIT
, OFFSET
等。 不支持任何形式的 DML 或 DDL 操作。
支持切换图表类型: Treading
(历史数据的前缀和) 和 Value
(原始数据)
一些可能的示例如下:
SQL 查询
- 查询所有可用的关系表
$ opendigger-cli sql "SHOW TABLES" --ui
- 查询
Issues
表中的所有列
$ opendigger-cli sql "SHOW COLUMNS FROM Issues"
- 查询
X-lab2017/open-digger
仓库在Openrank
指标上的数据
$ opendigger-cli sql "SELECT * FROM Openrank WHERE name = 'X-lab2017/open-digger'" --ui
- 查询
X-lab2017/open-digger
仓库在Openrank
指标上的数据,按OpenRank
值排序后,并将结果写入文件
$ opendigger-cli sql "SELECT * FROM Openrank WHERE name = 'X-lab2017/open-digger'" -o openrank.csv > /dev/null
- 查询
X-lab2017/open-digger
和vuejs/core
仓库在Stars
指标上的数据, 根据month
进行连接,筛选出 star 之和大于 100 的月份
$ opendigger-cli sql "SELECT * FROM Stars a LEFT JOIN Stars b ON a.month = b.month WHERE a.name = 'X-lab2017/open-digger' AND b.name = 'vuejs/core' AND a.value + b.value > 100" --ui
- 查询
X-lab2017/open-digger
,facebook/react
和vuejs/core
仓库在Stars
指标上的数据, 交互式 UI 展示
$ opendigger-cli sql "SELECT * FROM Stars WHERE name = 'X-lab2017/open-digger' OR name = 'facebook/react' OR name = 'vuejs/core'" --ui
Cypher 查询
- 图查询: 查询用户'will-ww'在repo='X-lab2017/open-digger'上的'Developer network'指标数据,使用TUI展示数据值。
$ opendigger-cli cypher "MATCH (n:Node {value: 'will-ww'}) WHERE n.owner = 'X-lab2017/open-digger' AND n.metric = 'Developer network' RETURN n"
- 图查询:查询用户'Zzzzzhuzhiwei'在repo='X-lab2017/open-digger'上的'Developer network'上的所有有合作关系或者是有相关性的用户。
$ opendigger-cli cypher "MATCH (n:Node {value: 'Zzzzzhuzhiwei'})-[]-(neighbor) where n.owner='X-lab2017/open-digger' and n.metric='Developer network' RETURN neighbor"
- 图查询: 查询用户'Zzzzzhuzhiwei'在repo='X-lab2017/open-digger'上的'Developer network'上的合作最紧密的用户。
$ opendigger-cli cypher "MATCH (n:Node {value: 'Zzzzzhuzhiwei'})-[]->(neighbor) WHERE n.owner='X-lab2017/open-digger' and n.metric='Developer network' WITH neighbor ORDER BY neighbor.metric DESC LIMIT 1 RETURN neighbor"
本工具提供了原始数据下载功能,用户可以通过本工具下载指标数据,并保存为 json 或 csv 格式的文件。
一种可能的示例如下:
下载 X-lab2017/open-digger
仓库在 Openrank
指标上的数据
$ opendigger-cli download "X-lab2017/open-digger" "openrank" -o openrank.json
本工具提供了整体报告功能,用户可以通过本工具查询仓库的整体报告。 报告将导出为单独的 HTML 文件。
一种可能的示例如下:
整体报告:查询仓库'X-lab2017/open-digger'的整体报告。
$ opendigger-cli report "X-lab2017/open-digger"
其他
其余特性请参考帮助命令:
$ opendigger-cli help
Usage: opendigger-cli <COMMAND>
Commands:
download Download data from the API
sql Query data with sql
cypher Query data with cypher
chat ChatGPT yes!
report Generate a report
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version