1 个不稳定版本
0.1.0 | 2024年1月7日 |
---|
#9 在 #streaming-json
73KB
1.5K SLoC
lpl
一款从基于行的输入中绘制图表的命令行工具。
功能
- 多种格式的数据源,作为轮询或流输入
- JSON(inotify + 定期重新加载)
- JSONLines(流输入)
- CSV(inotify + 定期重新加载)
- CSV(流输入)
- 交互式滚动
- 系列隐藏/颜色选择
示例用法
一些使用Bash的简单用例
设备温度计
Linux在/sys/class/thermal下公开了设备温度计。
例如,在我的笔记本电脑上
$ cat /sys/class/thermal/*/temp
47000
20000
39050
45000
47050
40000
47000
因此,我们可以将每个文件作为单独的 --csv-poll
参数传递给 lpl
$ lpl $(
> for file in /sys/class/thermal/*/temp; do
> echo "--csv-poll $(basename $(dirname $file))=$file"
> done
> )
滚动部署
当使用Kubernetes Deployment执行滚动更新时,它会逐渐缩小旧ReplicaSet并扩大新ReplicaSet。我们可以通过使用<()
过程替换与kubectl get --watch
以及一些使用jq
的转换来监视这个进度。
lpl --json <(kubectl get replicaset --watch -ojson | \
jq --unbuffered -c '{
(.metadata.name + " total"): .status.replicas,
(.metadata.name + " ready"): .status.readyReplicas,
}')
目前 lpl
仅支持JSONLines,请确保传递 -c
以确保每行打印一个JSON对象。同时使用 --unbuffered
确保jq可以立即发出新事件。
参考
输入源
JSON
JSON有两种模式——流和轮询。
流式JSON由--json PATH
指定,其中PATH
是一个特殊文件(通常来自<()
过程替换),它读取每行一个JSON对象。JSON对象可以包含任意字段,但仅处理顶级字段,其中数值被添加到以相应键命名的时序中,在读取行的时间。如果输入不是每行一个对象,请将其管道传输到| jq --c --unbuffered .
。
轮询JSON,另一方面,是一个通常为规则的文件,包含一个单独的JSON对象(紧凑或格式化),通过 --json-poll PATH
指定。类似于流JSON,只有具有单个数值的最顶层字段被处理。当文件被更改时(如果由inotify支持),或每隔 --poll-period
秒,文件将被重新加载。
CSV
类似于JSON,CSV也通过 --csv PATH
和 --csv-poll [HEADER=]PATH
支持流和轮询模式。
CSV文件默认使用 ,
分隔,但可以使用 --csv-poll-delimiter
进行自定义。
如果参数包含 =
,则 =
前的部分被视为CSV标题。否则,从 PATH
读取的第一行(流式的初始第一行,轮询的每次重新加载的第一行)被视为CSV标题。
只有可以解析为 f64 的数值被处理;其他值被静默忽略。对于轮询模式,如果单次轮询中有多个文件,则只处理第一个数值。
交互式CLI
lpl
提供了一个交互式TUI来浏览数据图。
按 ?
查看帮助。按 q
退出。
安装
下载开发构建
- Windows: x86_64 (64位), aarch64 (ARM 64位), i686 (Intel/AMD 32位)
- MacOS: x86_64 (Intel/AMD 64位) aarch64 (Silicon 64位)
- Linux
依赖项
~17–29MB
~406K SLoC