diff mbox series

[v2] procd: add info json output

Message ID 20201214125603.26529-1-fe@dev.tdt.de
State Superseded
Headers show
Series [v2] procd: add info json output | expand

Commit Message

Florian Eckert Dec. 14, 2020, 12:56 p.m. UTC
By adding the extra command `info` it is now possible to retrieve all
relevant data from a procd started service directly via the init script.

Until now, you have to query the ubus with the command:
ubus call service list '{"name":"<xxx>","verbose":true}'

With this change, the init script is now used with the command:
/etc/init.d/<xxx> info

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
---
v2:
- Remove duplicate json service string

 package/base-files/files/etc/rc.common |  5 +++++
 package/system/procd/files/procd.sh    | 13 +++++++++++++
 2 files changed, 18 insertions(+)

Comments

Petr Štetiar Dec. 14, 2020, 1:02 p.m. UTC | #1
Florian Eckert <fe@dev.tdt.de> [2020-12-14 13:56:03]:

Hi,

> By adding the extra command `info` it is now possible to retrieve all
> relevant data from a procd started service directly via the init script.

whats the use case, how is this useful?

> Until now, you have to query the ubus with the command:
> ubus call service list '{"name":"<xxx>","verbose":true}'
> 
> With this change, the init script is now used with the command:
> /etc/init.d/<xxx> info

I find the `info` name ambiguous and misleading.

Cheers,

Petr
Florian Eckert Dec. 14, 2020, 1:17 p.m. UTC | #2
Hi Petr,

>> By adding the extra command `info` it is now possible to retrieve all
>> relevant data from a procd started service directly via the init 
>> script.
> 
> whats the use case, how is this useful?

As already mentioned, it is a improvement to get the information of the 
procd service objects faster.
Until now, you always had to enter the whole string with valid json.
I just don't want to type so much.
And It's always easy to make a typo.

So I thought why not give the procd an extra command for this task.

>> Until now, you have to query the ubus with the command:
>> ubus call service list '{"name":"<xxx>","verbose":true}'
>> 
>> With this change, the init script is now used with the command:
>> /etc/init.d/<xxx> info
> 
> I find the `info` name ambiguous and misleading.

I am open about that. I can also imagine `json`.
It should just be short.

Best Regards

Florian
diff mbox series

Patch

diff --git a/package/base-files/files/etc/rc.common b/package/base-files/files/etc/rc.common
index f39b69464e..c7fde31d41 100755
--- a/package/base-files/files/etc/rc.common
+++ b/package/base-files/files/etc/rc.common
@@ -121,6 +121,7 @@  extra_command "enabled" "Check if service is started on boot"
 	extra_command "running" "Check if service is running"
 	extra_command "status" "Service status"
 	extra_command "trace" "Start with syscall trace"
+	extra_command "info" "Dump service info as json"
 
 	. $IPKG_INSTROOT/lib/functions/procd.sh
 	basescript=$(readlink "$initscript")
@@ -173,6 +174,10 @@  extra_command "enabled" "Check if service is started on boot"
 			_procd_status "$(basename ${basescript:-$initscript})" "$1"
 		fi
 	}
+
+	info() {
+		_procd_info "$(basename ${basescript:-$initscript})"
+	}
 }
 
 ALL_COMMANDS="${ALL_COMMANDS} ${EXTRA_COMMANDS}"
diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh
index d86b7219da..07d5bff8b6 100644
--- a/package/system/procd/files/procd.sh
+++ b/package/system/procd/files/procd.sh
@@ -474,6 +474,19 @@  _procd_status() {
 	fi
 }
 
+_procd_info() {
+	local service="$1"
+	local data
+
+	data=$(_procd_ubus_call list | jsonfilter -e '@["'"$service"'"]')
+	[ -z "$data" ] && { echo "not found"; return 3; }
+
+	json_init
+	json_add_string name "$service"
+	json_add_boolean verbose "1"
+	_procd_ubus_call list
+}
+
 procd_open_data() {
 	local name="$1"
 	json_set_namespace procd __procd_old_cb