Skip to content

Commit

Permalink
mirrors: Add repo_stats.py
Browse files Browse the repository at this point in the history
  • Loading branch information
iBug committed Aug 14, 2024
1 parent 10f1bcd commit 161feb7
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
10 changes: 2 additions & 8 deletions docs/services/mirrors/repos.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ git -c user.name=你的名字 -c user.email=你的邮箱 commit -m "..."
修改了 `/etc/rsync-proxy/config.toml`,删除 mirrors2 中的 `".private"` 项,在 mirrors4 中新增 `"sb"` 项。

因为 rsync-proxy 最终还需要连接到后端的 rsyncd,因此 mirrors4 的 rsyncd 配置也需要修改。
`/etc/rsyncd` 下执行 `python common_generator.py --write` 写入配置,使用 `git diff` 检查无误后 `git commit`
`/etc/rsyncd` 下执行 `python3 generate_common.py --write` 写入配置,使用 `git diff` 检查无误后 `git commit`
rsyncd 配置中包含不公开 rsync 的内容(如 git 目录)不会导致问题,因为所有用户接触到的都是 rsync-proxy。

确认后重载 rsync-proxy:
Expand All @@ -116,14 +116,8 @@ Rsyncd 不需要重载:每个有效连接会启动新进程,而新进程会

### 删除 mirrors2 上的仓库与相关项

执行 `yukictl rm sb`,然后删除 Yuki 同步配置(`~mirror/repos-etc/sb.yaml`),同样也需要 git commit。
执行 `yukictl repo rm sb`,然后删除 Yuki 同步配置(`~mirror/repos-etc/sb.yaml`),同样也需要 git commit。

之后删除存储的内容:执行 `/sbin/zfs list` 确认要下手删除的存储池,然后 `sudo zfs destroy pool0/repo/对应的名字` 删除。

同样,`/srv/rsync-attrs/.private` 的内容也需要删除。

### 关于 git push

目前配置的 git push 比较麻烦:需要用户在 USTCLUG GitLab 上为自己创建一个 Access Token,然后每次 git push 时输入密码。

我们有计划改进这一点:为每个仓库创建一个 ssh key,修改 git config,然后为在 USTCLUG GitLab 上为对应仓库新增 deploy key,这样就不需要密码了。
17 changes: 17 additions & 0 deletions docs/services/mirrors/services.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,23 @@ Mirrors 使用 OpenResty(一个打包 Nginx 和一堆有用的 Lua 模块的

[限制策略](limiter.md)

### 每日流量统计 {#repo-stats}

访问路径:<https://mirrors.ustc.edu.cn/status/stats.json>

脚本位于 <https://git.lug.ustc.edu.cn/mirrors/sync/-/blob/scripts/repo_stats.py>

每天在 logrotate 滚完 nginx 日志后,通过分析刚滚出来的日志文件,统计每个仓库的访问量与输出流量(因此仅包含 HTTP 流量统计),然后输出到 json 文件,并且额外输出一份 json 到 `/var/log/nginx/stats` 作为归档存储,方便以后分析。

需要注意的是这个脚本是由 logrotate 在 nginx 的 postrotate script 里运行的,而不是由 cron 或者 systemd timer,因此调用入口在这里:

```shell title="/etc/logrotate.d/nginx"
postrotate
# [...]
sudo -iu mirror ~mirror/scripts/repo_stats.py
endscript
```

## Rsync 服务

未完待续。
Expand Down

0 comments on commit 161feb7

Please sign in to comment.