From e54f9ca0d403d5dccab0bea6647c31b59d1eeaf1 Mon Sep 17 00:00:00 2001 From: yozhao101 <56170650+yozhao101@users.noreply.github.com> Date: Fri, 4 Dec 2020 11:22:17 -0800 Subject: [PATCH] [dataset] Add dataset "system uptime" into non-db client. (#52) Motivation of this PR: This PR aims to enable the streaming telemetry container to stream out the system uptime of SONiC Host. This dataset is added into non-database client since it is a kind of value which will be refreshed periodically. How can I do that? I follow the example of dataset in non-database client such as meminfo to do the implementation. The data source of system uptime is from the file /proc/uptime on the SONiC host. We can use the command ./gnmi_cli -client_types=gnmi -a :8080 -t OTHERS -logtostderr -insecure -qt p -pi 10s -q proc/uptime to query the system uptime every 10 seconds. admin@str-a7050-acs-3:~$ ./gnmi_cli -client_types=gnmi -a localhost:8080 -t OTHERS -logtostderr -insecure -qt p -pi 10s -q proc/uptime { "OTHERS": { "proc": { "uptime": "{"total":314.74,"idle":981.27}" } } } { "OTHERS": { "proc": { "uptime": "{"total":324.74,"idle":1016.85}" } } } --- sonic_data_client/non_db_client.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sonic_data_client/non_db_client.go b/sonic_data_client/non_db_client.go index a29fe354e..d7d2bb7ee 100644 --- a/sonic_data_client/non_db_client.go +++ b/sonic_data_client/non_db_client.go @@ -73,6 +73,10 @@ var ( path: []string{"OTHERS", "platform", "cpu"}, getFunc: dataGetFunc(getCpuUtil), }, + { // Get host uptime + path: []string{"OTHERS", "proc", "uptime"}, + getFunc: dataGetFunc(getSysUptime), + }, { // Get proc meminfo path: []string{"OTHERS", "proc", "meminfo"}, getFunc: dataGetFunc(getProcMeminfo), @@ -280,6 +284,18 @@ func getProcStat() ([]byte, error) { return b, nil } +func getSysUptime() ([]byte, error) { + uptime, _ := linuxproc.ReadUptime("/proc/uptime") + b, err := json.Marshal(uptime) + if err != nil { + log.V(2).Infof("%v", err) + return b, err + } + + log.V(4).Infof("getSysUptime, output %v", string(b)) + return b, nil +} + func getBuildVersion() ([]byte, error) { // Load and parse the content of version file