[PATCH v3] procd: add procd json output to init

Florian Eckert fe at dev.tdt.de
Thu Dec 17 03:40:08 EST 2020


By adding the extra command `procd` 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 to get the information with the
following command.

`ubus call service list '{"name":"<xxx>","verbose":true}'`

With this change, the init script is now extend with the command to get
this information easier.

`/etc/init.d/<xxx> procd`

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

v3:
- Change init call from `info` to `procd`
- Update PKG_RELEASE for base-files and procd package

 package/base-files/Makefile            |  2 +-
 package/base-files/files/etc/rc.common |  5 +++++
 package/system/procd/Makefile          |  2 +-
 package/system/procd/files/procd.sh    | 14 ++++++++++++++
 4 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 0c612b73ca..fbcb694592 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=239
+PKG_RELEASE:=240
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
diff --git a/package/base-files/files/etc/rc.common b/package/base-files/files/etc/rc.common
index f39b69464e..1a4ee2929b 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 "procd" "Show procd 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
 	}
+
+	procd() {
+		_procd_info "$(basename ${basescript:-$initscript})"
+	}
 }
 
 ALL_COMMANDS="${ALL_COMMANDS} ${EXTRA_COMMANDS}"
diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile
index ed73587056..ad0ead2346 100644
--- a/package/system/procd/Makefile
+++ b/package/system/procd/Makefile
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=procd
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git
diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh
index d86b7219da..1969cdf973 100644
--- a/package/system/procd/files/procd.sh
+++ b/package/system/procd/files/procd.sh
@@ -474,6 +474,20 @@ _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"
+	json_add_string name "$service"
+	_procd_ubus_call list
+}
+
 procd_open_data() {
 	local name="$1"
 	json_set_namespace procd __procd_old_cb
-- 
2.20.1




More information about the openwrt-devel mailing list