#plot #input #command-line #csv #streaming #command-line-tool #streaming-json

app lpl

一款从基于行的输入中绘制图表的命令行工具

1 个不稳定版本

0.1.0 2024年1月7日

#9#streaming-json

AGPL-3.0

73KB
1.5K SLoC

lpl

一款从基于行的输入中绘制图表的命令行工具。

Sinusoidal plot example

功能

  • 多种格式的数据源,作为轮询或流输入
    • 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 退出。

安装

下载开发构建

依赖项

~17–29MB
~406K SLoC