telemetry: add default callback commands
authorCiara Power <ciara.power@intel.com>
Thu, 30 Apr 2020 16:01:27 +0000 (17:01 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 10 May 2020 21:56:33 +0000 (23:56 +0200)
The default commands are now added to provide the list of commands
available, help text for a specified command, and also information
about DPDK and telemetry.

Signed-off-by: Ciara Power <ciara.power@intel.com>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Keith Wiles <keith.wiles@intel.com>
lib/librte_telemetry/telemetry.c

index d1e9234..9f4234c 100644 (file)
@@ -73,6 +73,51 @@ rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help)
        return 0;
 }
 
+static int
+list_commands(const char *cmd __rte_unused, const char *params __rte_unused,
+               struct rte_tel_data *d)
+{
+       int i;
+
+       rte_tel_data_start_array(d, RTE_TEL_STRING_VAL);
+       for (i = 0; i < num_callbacks; i++)
+               rte_tel_data_add_array_string(d, callbacks[i].cmd);
+       return 0;
+}
+
+static int
+json_info(const char *cmd __rte_unused, const char *params __rte_unused,
+               struct rte_tel_data *d)
+{
+       rte_tel_data_start_dict(d);
+       rte_tel_data_add_dict_string(d, "version", rte_version());
+       rte_tel_data_add_dict_int(d, "pid", getpid());
+       rte_tel_data_add_dict_int(d, "max_output_len", MAX_OUTPUT_LEN);
+       return 0;
+}
+
+static int
+command_help(const char *cmd __rte_unused, const char *params,
+               struct rte_tel_data *d)
+{
+       int i;
+
+       if (!params)
+               return -1;
+       rte_tel_data_start_dict(d);
+       rte_spinlock_lock(&callback_sl);
+       for (i = 0; i < num_callbacks; i++)
+               if (strcmp(params, callbacks[i].cmd) == 0) {
+                       rte_tel_data_add_dict_string(d, params,
+                                       callbacks[i].help);
+                       break;
+               }
+       rte_spinlock_unlock(&callback_sl);
+       if (i == num_callbacks)
+               return -1;
+       return 0;
+}
+
 static void
 output_json(const char *cmd, const struct rte_tel_data *d, int s)
 {
@@ -296,6 +341,12 @@ telemetry_v2_init(const char *runtime_dir)
 {
        pthread_t t_new;
 
+       rte_telemetry_register_cmd("/", list_commands,
+                       "Returns list of available commands, Takes no parameters");
+       rte_telemetry_register_cmd("/info", json_info,
+                       "Returns DPDK Telemetry information. Takes no parameters");
+       rte_telemetry_register_cmd("/help", command_help,
+                       "Returns help text for a command. Parameters: string command");
        v2_socket.fn = client_handler;
        if (strlcpy(v2_socket.path, get_socket_path(runtime_dir, 2),
                        sizeof(v2_socket.path)) >= sizeof(v2_socket.path)) {