Crates.io | jsonwatch |
lib.rs | jsonwatch |
version | 0.6.0 |
source | src |
created_at | 2023-07-13 10:55:11.809056 |
updated_at | 2023-07-13 10:55:11.809056 |
description | Track changes in JSON data from the command line |
homepage | https://github.com/dbohdan/jsonwatch |
repository | https://github.com/dbohdan/jsonwatch |
max_upload_size | |
id | 915224 |
size | 96,719 |
jsonwatch
is a command line utility with which you can track changes in JSON data delivered by a shell command or a web (HTTP/HTTPS) API. jsonwatch
requests data from the designated source repeatedly at a set interval and displays the differences when the data changes. It is similar but not isomorphic in its behavior to how watch(1) with the -d
switch works for plain-text data.
It has been tested on Debian 10, Ubuntu 18.04, and Windows 7.
The two previous versions of jsonwatch
are preserved in the branch python
and haskell
.
Prebuilt Linux and Windows binaries are available. They are attached to releases on the Releases page.
cargo install jsonwatch
Follow the instructions to build a static Linux binary of jsonwatch
from source on recent Debian and Ubuntu.
1. Install Rustup. Through Rustup add the stable MUSL target for your CPU.
rustup target add x86_64-unknown-linux-musl
2. Install the build and testing dependencies.
sudo apt install build-essential expect musl-tools
3. Clone this repository. Build the binary.
git clone https://github.com/dbohdan/jsonwatch
cd jsonwatch
make test
make release-linux
Follow the instructions to build a 32-bit Windows binary of jsonwatch
on recent Debian and Ubuntu.
1. Install Rustup. Through Rustup add the i686 GNU ABI Windows target.
rustup target add i686-pc-windows-gnu
2. Install the build dependencies.
sudo apt install build-essential mingw-w64
3. Configure Cargo for cross-compilation. Put the following in ~/.cargo/config
.
[target.i686-pc-windows-gnu]
linker = "/usr/bin/i686-w64-mingw32-gcc"
4. Clone this repository. Build the binary.
git clone https://github.com/dbohdan/jsonwatch
cd jsonwatch
make release-windows
Testing jsonwatch
.
$ jsonwatch -n 1 -c "echo '{ \"filename\": \"'\$(mktemp -u)'\"}'"
{
"filename": "/tmp/tmp.dh3Y7LJTaK"
}
2020-01-19T18:52:19+0000 .filename: "/tmp/tmp.dh3Y7LJTaK" -> "/tmp/tmp.i4s56VENEJ"
2020-01-19T18:52:20+0000 .filename: "/tmp/tmp.i4s56VENEJ" -> "/tmp/tmp.zzMUSn45Fc"
2020-01-19T18:52:21+0000 .filename: "/tmp/tmp.zzMUSn45Fc" -> "/tmp/tmp.Jj1cKt6VLr"
2020-01-19T18:52:22+0000 .filename: "/tmp/tmp.Jj1cKt6VLr" -> "/tmp/tmp.1LGk4ok8O2"
2020-01-19T18:52:23+0000 .filename: "/tmp/tmp.1LGk4ok8O2" -> "/tmp/tmp.wWulyho8Qj"
Docker process information.
$ jsonwatch -c 'docker ps -a "--format={{json .}}"' -n 1
2020-01-19T18:57:20+0000
+ .Command: "\"bash\""
+ .CreatedAt: "2020-01-19 18:57:20 +0000 UTC"
+ .ID: "dce7fb2194ed"
+ .Image: "i386/ubuntu:latest"
+ .Labels: ""
+ .LocalVolumes: "0"
+ .Mounts: ""
+ .Names: "dreamy_edison"
+ .Networks: "bridge"
+ .Ports: ""
+ .RunningFor: "Less than a second ago"
+ .Size: "0B"
+ .Status: "Created"
2020-01-19T18:57:21+0000 .RunningFor: "Less than a second ago" -> "1 second ago"
2020-01-19T18:57:23+0000
.RunningFor: "1 second ago" -> "3 seconds ago"
.Status: "Created" -> "Up 1 second"
2020-01-19T18:57:24+0000
.RunningFor: "3 seconds ago" -> "4 seconds ago"
.Status: "Up 1 second" -> "Up 2 seconds"
2020-01-19T18:57:25+0000
.RunningFor: "4 seconds ago" -> "5 seconds ago"
.Status: "Up 2 seconds" -> "Up 3 seconds"
On Windows -c
executes cmd.exe
commands.
> jsonwatch -c "type tests\weather1.json"
{
"clouds": {
"all": 92
},
"name": "Kiev",
"coord": {
"lat": 50.43,
"lon": 30.52
},
"sys": {
"country": "UA",
"message": 0.0051,
"sunset": 1394985874,
"sunrise": 1394942901
},
"weather": [
{
"main": "Snow",
"id": 612,
"icon": "13d",
"description": "light shower sleet"
},
{
"main": "Rain",
"id": 520,
"icon": "09d",
"description": "light intensity shower rain"
}
],
"rain": {
"3h": 2
},
"base": "cmc stations",
"dt": 1394979003,
"main": {
"pressure": 974.8229,
"humidity": 91,
"temp_max": 277.45,
"temp": 276.45,
"temp_min": 276.15
},
"id": 703448,
"wind": {
"speed": 10.27,
"deg": 245.507
},
"cod": 200
}
2020-01-19T18:51:04+0000 + .test: true
2020-01-19T18:51:10+0000 .test: true -> false
2020-01-19T18:51:23+0000 - .test: false
Watching a URL works identically on *nix and on Windows.
Weather tracking.
$ jsonwatch -u http://api.openweathermap.org/data/2.5/weather\?q\=Kiev,ua --no-initial-values -n 300
2014-03-17T23:06:19.073790
+ .rain.1h: 0.76
- .rain.3h: 0.5
.dt: 1395086402 -> 1395089402
.main.temp: 279.07 -> 278.66
.main.temp_max: 279.82 -> 280.15
.main.temp_min: 277.95 -> 276.05
.sys.message: 0.0353 -> 0.0083
Geolocation. (Try this on a mobile device.)
$ jsonwatch -u https://ipinfo.io/ --no-initial-values -n 300
jsonwatch
is distributed under the MIT license. See the file LICENSE
for details. Wapp is copyright (c) 2017 D. Richard Hipp and is distributed under the Simplified BSD License.