LCOV - code coverage report
Current view: top level - lib/event - log_rpc.c (source / functions) Hit Total Coverage
Test: ut_cov_unit.info Lines: 0 144 0.0 %
Date: 2024-12-02 08:27:57 Functions: 0 21 0.0 %

          Line data    Source code
       1             : /*   SPDX-License-Identifier: BSD-3-Clause
       2             :  *   Copyright (C) 2016 Intel Corporation.
       3             :  *   All rights reserved.
       4             :  */
       5             : 
       6             : #include "spdk/rpc.h"
       7             : #include "spdk/util.h"
       8             : 
       9             : #include "spdk/log.h"
      10             : 
      11             : struct rpc_log_flag {
      12             :         char *flag;
      13             : };
      14             : 
      15             : struct rpc_log_level {
      16             :         char *level;
      17             : };
      18             : 
      19             : static void
      20           0 : free_rpc_log_flag(struct rpc_log_flag *p)
      21             : {
      22           0 :         free(p->flag);
      23           0 : }
      24             : 
      25             : static void
      26           0 : free_rpc_log_level(struct rpc_log_level *p)
      27             : {
      28           0 :         free(p->level);
      29           0 : }
      30             : 
      31             : static const struct spdk_json_object_decoder rpc_log_flag_decoders[] = {
      32             :         {"flag", offsetof(struct rpc_log_flag, flag), spdk_json_decode_string},
      33             : };
      34             : 
      35             : static const struct spdk_json_object_decoder rpc_log_level_decoders[] = {
      36             :         {"level", offsetof(struct rpc_log_level, level), spdk_json_decode_string},
      37             : };
      38             : 
      39             : static int
      40           0 : _parse_log_level(char *level)
      41             : {
      42           0 :         if (!strcasecmp(level, "ERROR")) {
      43           0 :                 return SPDK_LOG_ERROR;
      44           0 :         } else if (!strcasecmp(level, "WARNING")) {
      45           0 :                 return SPDK_LOG_WARN;
      46           0 :         } else if (!strcasecmp(level, "NOTICE")) {
      47           0 :                 return SPDK_LOG_NOTICE;
      48           0 :         } else if (!strcasecmp(level, "INFO")) {
      49           0 :                 return SPDK_LOG_INFO;
      50           0 :         } else if (!strcasecmp(level, "DEBUG")) {
      51           0 :                 return SPDK_LOG_DEBUG;
      52             :         }
      53           0 :         return -1;
      54             : }
      55             : 
      56             : static const char *
      57           0 : _log_get_level_name(int level)
      58             : {
      59           0 :         if (level == SPDK_LOG_ERROR) {
      60           0 :                 return "ERROR";
      61           0 :         } else if (level == SPDK_LOG_WARN) {
      62           0 :                 return "WARNING";
      63           0 :         } else if (level == SPDK_LOG_NOTICE) {
      64           0 :                 return "NOTICE";
      65           0 :         } else if (level == SPDK_LOG_INFO) {
      66           0 :                 return "INFO";
      67           0 :         } else if (level == SPDK_LOG_DEBUG) {
      68           0 :                 return "DEBUG";
      69             :         }
      70           0 :         return NULL;
      71             : }
      72             : 
      73             : static void
      74           0 : rpc_log_set_print_level(struct spdk_jsonrpc_request *request,
      75             :                         const struct spdk_json_val *params)
      76             : {
      77           0 :         struct rpc_log_level req = {};
      78             :         int level;
      79             : 
      80           0 :         if (spdk_json_decode_object(params, rpc_log_level_decoders,
      81             :                                     SPDK_COUNTOF(rpc_log_level_decoders), &req)) {
      82           0 :                 SPDK_DEBUGLOG(log_rpc, "spdk_json_decode_object failed\n");
      83           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
      84             :                                                  "spdk_json_decode_object failed");
      85           0 :                 goto end;
      86             :         }
      87             : 
      88           0 :         level = _parse_log_level(req.level);
      89           0 :         if (level == -1) {
      90           0 :                 SPDK_DEBUGLOG(log_rpc, "tried to set invalid log level\n");
      91           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
      92             :                                                  "invalid log level");
      93           0 :                 goto end;
      94             :         }
      95             : 
      96           0 :         spdk_log_set_print_level(level);
      97           0 :         spdk_jsonrpc_send_bool_response(request, true);
      98           0 : end:
      99           0 :         free_rpc_log_level(&req);
     100           0 : }
     101           0 : SPDK_RPC_REGISTER("log_set_print_level", rpc_log_set_print_level,
     102             :                   SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
     103             : 
     104             : static void
     105           0 : rpc_log_get_print_level(struct spdk_jsonrpc_request *request,
     106             :                         const struct spdk_json_val *params)
     107             : {
     108             :         struct spdk_json_write_ctx *w;
     109             :         int level;
     110             :         const char *name;
     111             : 
     112           0 :         if (params != NULL) {
     113           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
     114             :                                                  "log_get_print_level requires no parameters");
     115           0 :                 return;
     116             :         }
     117             : 
     118           0 :         level = spdk_log_get_print_level();
     119           0 :         name = _log_get_level_name(level);
     120           0 :         if (name == NULL) {
     121           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
     122             :                                                  "invalid log level");
     123           0 :                 return;
     124             :         }
     125             : 
     126           0 :         w = spdk_jsonrpc_begin_result(request);
     127           0 :         spdk_json_write_string(w, name);
     128             : 
     129           0 :         spdk_jsonrpc_end_result(request, w);
     130             : }
     131           0 : SPDK_RPC_REGISTER("log_get_print_level", rpc_log_get_print_level,
     132             :                   SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
     133             : 
     134             : static void
     135           0 : rpc_log_set_level(struct spdk_jsonrpc_request *request,
     136             :                   const struct spdk_json_val *params)
     137             : {
     138           0 :         struct rpc_log_level req = {};
     139             :         int level;
     140             : 
     141           0 :         if (spdk_json_decode_object(params, rpc_log_level_decoders,
     142             :                                     SPDK_COUNTOF(rpc_log_level_decoders), &req)) {
     143           0 :                 SPDK_DEBUGLOG(log_rpc, "spdk_json_decode_object failed\n");
     144           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
     145             :                                                  "spdk_json_decode_object failed");
     146           0 :                 goto end;
     147             :         }
     148             : 
     149           0 :         level = _parse_log_level(req.level);
     150           0 :         if (level == -1) {
     151           0 :                 SPDK_DEBUGLOG(log_rpc, "tried to set invalid log level\n");
     152           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
     153             :                                                  "invalid log level");
     154           0 :                 goto end;
     155             :         }
     156             : 
     157             : 
     158           0 :         spdk_log_set_level(level);
     159           0 :         spdk_jsonrpc_send_bool_response(request, true);
     160           0 : end:
     161           0 :         free_rpc_log_level(&req);
     162           0 : }
     163           0 : SPDK_RPC_REGISTER("log_set_level", rpc_log_set_level, SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
     164             : 
     165             : static void
     166           0 : rpc_log_get_level(struct spdk_jsonrpc_request *request,
     167             :                   const struct spdk_json_val *params)
     168             : {
     169             :         struct spdk_json_write_ctx *w;
     170             :         int level;
     171             :         const char *name;
     172             : 
     173           0 :         if (params != NULL) {
     174           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
     175             :                                                  "log_get_level requires no parameters");
     176           0 :                 return;
     177             :         }
     178             : 
     179           0 :         level = spdk_log_get_level();
     180           0 :         name = _log_get_level_name(level);
     181           0 :         if (name == NULL) {
     182           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
     183             :                                                  "invalid log level");
     184           0 :                 return;
     185             :         }
     186             : 
     187           0 :         w = spdk_jsonrpc_begin_result(request);
     188           0 :         spdk_json_write_string(w, name);
     189             : 
     190           0 :         spdk_jsonrpc_end_result(request, w);
     191             : }
     192           0 : SPDK_RPC_REGISTER("log_get_level", rpc_log_get_level, SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
     193             : 
     194             : static void
     195           0 : rpc_log_set_flag(struct spdk_jsonrpc_request *request,
     196             :                  const struct spdk_json_val *params)
     197             : {
     198           0 :         struct rpc_log_flag req = {};
     199             : 
     200           0 :         if (spdk_json_decode_object(params, rpc_log_flag_decoders,
     201             :                                     SPDK_COUNTOF(rpc_log_flag_decoders), &req)) {
     202           0 :                 SPDK_DEBUGLOG(log_rpc, "spdk_json_decode_object failed\n");
     203           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
     204             :                                                  "spdk_json_decode_object failed");
     205           0 :                 goto end;
     206             :         }
     207             : 
     208           0 :         if (spdk_log_set_flag(req.flag) != 0) {
     209           0 :                 SPDK_DEBUGLOG(log_rpc, "tried to set invalid log flag\n");
     210           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
     211             :                                                  "invalid log flag");
     212           0 :                 goto end;
     213             :         }
     214             : 
     215           0 :         spdk_jsonrpc_send_bool_response(request, true);
     216           0 : end:
     217           0 :         free_rpc_log_flag(&req);
     218           0 : }
     219           0 : SPDK_RPC_REGISTER("log_set_flag", rpc_log_set_flag, SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
     220             : 
     221             : static void
     222           0 : rpc_log_clear_flag(struct spdk_jsonrpc_request *request,
     223             :                    const struct spdk_json_val *params)
     224             : {
     225           0 :         struct rpc_log_flag req = {};
     226             : 
     227           0 :         if (spdk_json_decode_object(params, rpc_log_flag_decoders,
     228             :                                     SPDK_COUNTOF(rpc_log_flag_decoders), &req)) {
     229           0 :                 SPDK_DEBUGLOG(log_rpc, "spdk_json_decode_object failed\n");
     230           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
     231             :                                                  "spdk_json_decode_object failed");
     232           0 :                 goto end;
     233             :         }
     234             : 
     235           0 :         if (spdk_log_clear_flag(req.flag) != 0) {
     236           0 :                 SPDK_DEBUGLOG(log_rpc, "tried to clear invalid log flag\n");
     237           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
     238             :                                                  "invalid log flag");
     239           0 :                 goto end;
     240             :         }
     241             : 
     242           0 :         spdk_jsonrpc_send_bool_response(request, true);
     243           0 : end:
     244           0 :         free_rpc_log_flag(&req);
     245           0 : }
     246           0 : SPDK_RPC_REGISTER("log_clear_flag", rpc_log_clear_flag,
     247             :                   SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
     248             : 
     249             : static void
     250           0 : rpc_log_get_flags(struct spdk_jsonrpc_request *request,
     251             :                   const struct spdk_json_val *params)
     252             : {
     253             :         struct spdk_json_write_ctx *w;
     254             :         struct spdk_log_flag *flag;
     255             : 
     256           0 :         if (params != NULL) {
     257           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
     258             :                                                  "log_get_flags requires no parameters");
     259           0 :                 return;
     260             :         }
     261             : 
     262           0 :         w = spdk_jsonrpc_begin_result(request);
     263           0 :         spdk_json_write_object_begin(w);
     264           0 :         flag = spdk_log_get_first_flag();
     265           0 :         while (flag) {
     266           0 :                 spdk_json_write_name(w, flag->name);
     267           0 :                 spdk_json_write_bool(w, flag->enabled);
     268           0 :                 flag = spdk_log_get_next_flag(flag);
     269             :         }
     270           0 :         spdk_json_write_object_end(w);
     271           0 :         spdk_jsonrpc_end_result(request, w);
     272             : }
     273           0 : SPDK_RPC_REGISTER("log_get_flags", rpc_log_get_flags, SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
     274             : 
     275             : struct rpc_log_enable_timestamps {
     276             :         bool enabled;
     277             : };
     278             : 
     279             : static const struct spdk_json_object_decoder rpc_log_enable_timestamps_decoders[] = {
     280             :         {"enabled", offsetof(struct rpc_log_enable_timestamps, enabled), spdk_json_decode_bool},
     281             : };
     282             : 
     283             : static void
     284           0 : rpc_log_enable_timestamps(struct spdk_jsonrpc_request *request,
     285             :                           const struct spdk_json_val *params)
     286             : {
     287           0 :         struct rpc_log_enable_timestamps req = {};
     288             : 
     289           0 :         if (spdk_json_decode_object(params, rpc_log_enable_timestamps_decoders,
     290             :                                     SPDK_COUNTOF(rpc_log_enable_timestamps_decoders),
     291             :                                     &req)) {
     292           0 :                 SPDK_ERRLOG("spdk_json_decode_object failed\n");
     293           0 :                 spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
     294             :                                                  "spdk_json_decode_object failed");
     295           0 :                 return;
     296             :         }
     297             : 
     298           0 :         spdk_log_enable_timestamps(req.enabled);
     299             : 
     300           0 :         spdk_jsonrpc_send_bool_response(request, true);
     301             : }
     302           0 : SPDK_RPC_REGISTER("log_enable_timestamps", rpc_log_enable_timestamps, SPDK_RPC_RUNTIME)
     303           0 : SPDK_LOG_REGISTER_COMPONENT(log_rpc)

Generated by: LCOV version 1.15