diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 490fbc29..63c6d633 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -233,6 +233,7 @@ list(APPEND GEN_SRCS default-config.h default-config.cc) set(BUILTIN_LNAV_SCRIPTS scripts/dhclient-summary.lnav scripts/docker-url-handler.lnav + scripts/journald-url-handler.lnav scripts/lnav-pop-view.lnav scripts/partition-by-boot.lnav scripts/piper-url-handler.lnav diff --git a/src/root-config.json b/src/root-config.json index 02ab53fa..43f69327 100644 --- a/src/root-config.json +++ b/src/root-config.json @@ -96,14 +96,17 @@ "docker": { "handler": "docker-url-handler" }, - "podman": { - "handler": "docker-url-handler" - }, "docker-compose": { "handler": "docker-compose-url-handler" }, + "journald": { + "handler": "journald-url-handler" + }, "piper": { "handler": "piper-url-handler" + }, + "podman": { + "handler": "docker-url-handler" } } } diff --git a/src/scripts/journald-url-handler.lnav b/src/scripts/journald-url-handler.lnav new file mode 100644 index 00000000..34f7b91f --- /dev/null +++ b/src/scripts/journald-url-handler.lnav @@ -0,0 +1,32 @@ +# +# @synopsis: journald-url-handler +# @description: Internal script to handle opening journald URLs +# + +;SELECT + jget(url, '/scheme') AS jscheme, + jget(url, '/host') AS jhost, + jget(url, '/parameters') as jparams + FROM (SELECT parse_url( + CASE WHEN regexp('^journald://(?:\?|$)', $1) THEN + 'journald://localhost/' || substr($1, 11) + END) AS url + ) + +;SELECT + printf(':sh journalctl --output=json -f %s', ( + SELECT group_concat( + CASE length(key) + WHEN 1 THEN + '-' + ELSE + '--' + END || + key || + '=' || value, + ' ') + FROM json_each($jparams) + ) + ) AS cmds + +:eval ${cmds} diff --git a/src/scripts/scripts.am b/src/scripts/scripts.am index 0c06ff2b..17981e6d 100644 --- a/src/scripts/scripts.am +++ b/src/scripts/scripts.am @@ -2,6 +2,7 @@ BUILTIN_LNAVSCRIPTS = \ $(srcdir)/scripts/dhclient-summary.lnav \ $(srcdir)/scripts/docker-url-handler.lnav \ + $(srcdir)/scripts/journald-url-handler.lnav \ $(srcdir)/scripts/lnav-pop-view.lnav \ $(srcdir)/scripts/partition-by-boot.lnav \ $(srcdir)/scripts/piper-url-handler.lnav \