diff --git a/frameworks/native/include/hilog_common.h b/frameworks/native/include/hilog_common.h index c223c74d7ac137674eddf8f3beca7c4af2768a5b..e6e365f0c88870160a842d68021b93ecfd8a1bc6 100644 --- a/frameworks/native/include/hilog_common.h +++ b/frameworks/native/include/hilog_common.h @@ -99,7 +99,6 @@ typedef enum { ERR_QUERY_TAG_INVALID = -6, ERR_QUERY_PID_INVALID = -7, ERR_QUERY_TYPE_INVALID = -8, - ERR_BUFF_SIZE_INVALID = -8, ERR_BUFF_SIZE_EXP = -9, ERR_LOG_CONTENT_NULL = -10, ERR_LOG_PERSIST_FILE_SIZE_INVALID = -11, @@ -121,5 +120,7 @@ typedef enum { ERR_FLOWCONTROL_CONF_OPEN_FAIL = -27, ERR_LOG_PERSIST_JOBID_INVALID = -28, ERR_FLOWCTRL_SWITCH_VALUE_INVALID = -29, + ERR_BUFF_SIZE_INVALID = -30, + ERR_COMMAND_INVALID = -31, } ErrorCode; #endif /* HILOG_COMMON_H */ diff --git a/services/hilogtool/include/log_controller.h b/services/hilogtool/include/log_controller.h index 2030eac95e9073b91117bcaf9622ecb625694a62..1b7085ceda7a6c3d66bfa5e820b3cf92eee5d7d2 100644 --- a/services/hilogtool/include/log_controller.h +++ b/services/hilogtool/include/log_controller.h @@ -36,10 +36,10 @@ void LogQueryRequestOp(SeqPacketSocketClient& controller, const HilogArgs* conte void LogQueryResponseOp(SeqPacketSocketClient& controller, char* recvBuffer, uint32_t bufLen, HilogArgs* context, HilogShowFormat format); int32_t BufferSizeOp(SeqPacketSocketClient& controller, uint8_t msgCmd, - std::string logTypeStr, std::string buffSizeStr); + const std::string& logTypeStr, const std::string& buffSizeStr); int32_t StatisticInfoOp(SeqPacketSocketClient& controller, uint8_t msgCmd, - std::string logTypeStr, std::string domainStr); -int32_t LogClearOp(SeqPacketSocketClient& controller, uint8_t msgCmd, std::string logTypeStr); + const std::string& logTypeStr, const std::string& domainStr); +int32_t LogClearOp(SeqPacketSocketClient& controller, uint8_t msgCmd, const std::string& logTypeStr); int32_t LogPersistOp(SeqPacketSocketClient& controller, uint8_t msgCmd, LogPersistParam* logPersistParam); int32_t SetPropertiesOp(SeqPacketSocketClient& controller, uint8_t operationType, SetPropertyParam* propertyParm); } // namespace HiviewDFX diff --git a/services/hilogtool/log_controller.cpp b/services/hilogtool/log_controller.cpp index ccb836486483b4325d557432d5270f8ccfb221e6..17f1e8102065c9709a2510fd02afb31c828e9ec4 100644 --- a/services/hilogtool/log_controller.cpp +++ b/services/hilogtool/log_controller.cpp @@ -22,7 +22,7 @@ #include #include #include - +#include #include "hilog/log.h" #include "hilog_common.h" #include "hilogtool_msg.h" @@ -92,6 +92,11 @@ uint64_t GetBuffSize(const string& buffSizeStr) { uint64_t index = buffSizeStr.size() - 1; uint64_t buffSize; + std::regex reg("[0-9]+[bBkKmMgGtT]?"); + if (!std::regex_match(buffSizeStr, reg)) { + std::cout << ParseErrorCode(ERR_BUFF_SIZE_INVALID) << std::endl; + exit(-1); + } if (buffSizeStr[index] == 'b' || buffSizeStr[index] == 'B') { buffSize = stol(buffSizeStr.substr(0, index)); } else if (buffSizeStr[index] == 'k' || buffSizeStr[index] == 'K') { @@ -248,7 +253,8 @@ void LogQueryResponseOp(SeqPacketSocketClient& controller, char* recvBuffer, uin } } } -int32_t BufferSizeOp(SeqPacketSocketClient& controller, uint8_t msgCmd, std::string logTypeStr, std::string buffSizeStr) +int32_t BufferSizeOp(SeqPacketSocketClient& controller, uint8_t msgCmd, const std::string& logTypeStr, + const std::string& buffSizeStr) { char msgToSend[MSG_MAX_LEN] = {0}; vector vecLogType; @@ -304,7 +310,7 @@ int32_t BufferSizeOp(SeqPacketSocketClient& controller, uint8_t msgCmd, std::str } int32_t StatisticInfoOp(SeqPacketSocketClient& controller, uint8_t msgCmd, - std::string logTypeStr, std::string domainStr) + const std::string& logTypeStr, const std::string& domainStr) { if ((logTypeStr != "" && domainStr != "") || (logTypeStr == "" && domainStr == "")) { return RET_FAIL; @@ -347,7 +353,7 @@ int32_t StatisticInfoOp(SeqPacketSocketClient& controller, uint8_t msgCmd, return RET_SUCCESS; } -int32_t LogClearOp(SeqPacketSocketClient& controller, uint8_t msgCmd, std::string logTypeStr) +int32_t LogClearOp(SeqPacketSocketClient& controller, uint8_t msgCmd, const std::string& logTypeStr) { char msgToSend[MSG_MAX_LEN] = {0}; vector vecLogType; diff --git a/services/hilogtool/log_display.cpp b/services/hilogtool/log_display.cpp index 26ea4776a34466320604a3470eefec1e194a4da2..1b19a39bda8611af5fef544e2fbd4a40c25016c4 100644 --- a/services/hilogtool/log_display.cpp +++ b/services/hilogtool/log_display.cpp @@ -45,8 +45,6 @@ unordered_map errorMsg {ERR_QUERY_DOMAIN_INVALID, "Invalid domain format, a hexadecimal number is needed"}, {ERR_QUERY_TAG_INVALID, "Query condition on both tags and excluded tags is undefined"}, {ERR_QUERY_PID_INVALID, "Query condition on both pid and excluded pid is undefined"}, - {ERR_BUFF_SIZE_INVALID, "Invalid buffer size, buffer size should be more than 0 and less than " - + to_string(MAX_BUFFER_SIZE)}, {ERR_BUFF_SIZE_EXP, "Buffer resize exception"}, {ERR_LOG_PERSIST_FILE_SIZE_INVALID, "Invalid log persist file size, file size should be not less than " + to_string(MAX_PERSISTER_BUFFER_SIZE)}, @@ -67,8 +65,11 @@ unordered_map errorMsg {ERR_LOG_PERSIST_JOBID_INVALID, "Invalid jobid, jobid should be more than 0"}, {ERR_LOG_CONTENT_NULL, "Log content NULL"}, {ERR_COMMAND_NOT_FOUND, "Command not found"}, - {ERR_FORMAT_INVALID, "Invalid format parameter"} -}; + {ERR_FORMAT_INVALID, "Invalid format parameter"}, + {ERR_BUFF_SIZE_INVALID, "Invalid buffer size, buffer size should be more than 0 and less than " + + to_string(MAX_BUFFER_SIZE)}, + {ERR_COMMAND_INVALID, "Invalid command, only one control command can be executed each time"} +}; string ParseErrorCode(ErrorCode errorCode) { diff --git a/services/hilogtool/main.cpp b/services/hilogtool/main.cpp index 5830b2aa169deeb943c3bae32a9a7566da288f35..9d3c0eb4e9449ab7790e8417aa7170a93e6df68d 100644 --- a/services/hilogtool/main.cpp +++ b/services/hilogtool/main.cpp @@ -175,6 +175,7 @@ int HilogEntry(int argc, char* argv[]) context.noBlockMode = 0; int32_t ret = 0; HilogShowFormat showFormat = OFF_SHOWFORMAT; + int controlCount = 0; for (int argsCount = 0; argsCount < argc; argsCount++) { args.push_back(argv[argsCount]); } @@ -299,14 +300,17 @@ int HilogEntry(int argc, char* argv[]) case 'g': context.buffSizeArgs = "query"; noLogOption = true; + controlCount++; break; case 'G': context.buffSizeArgs = optarg; noLogOption = true; + controlCount++; break; case 'w': context.logFileCtrlArgs = optarg; noLogOption = true; + controlCount++; break; case 'l': context.fileSizeArgs = optarg; @@ -323,10 +327,12 @@ int HilogEntry(int argc, char* argv[]) case 'p': context.personalArgs = optarg; noLogOption = true; + controlCount++; break; case 'r': context.logClearArgs = "clear"; noLogOption = true; + controlCount++; break; case 'D': indexDomain = optind - 1; @@ -370,10 +376,12 @@ int HilogEntry(int argc, char* argv[]) case 's': context.statisticArgs = "query"; noLogOption = true; + controlCount++; break; case 'S': context.statisticArgs = "clear"; noLogOption = true; + controlCount++; break; case 'T': indexTag = optind - 1; @@ -410,10 +418,12 @@ int HilogEntry(int argc, char* argv[]) case 'b': context.logLevelArgs = optarg; noLogOption = true; + controlCount++; break; case 'Q': context.flowSwitchArgs = optarg; noLogOption = true; + controlCount++; break; case 'P': indexPid = optind - 1; @@ -471,6 +481,10 @@ int HilogEntry(int argc, char* argv[]) context.levels = DEFAULT_LOG_LEVEL; } if (noLogOption) { + if (controlCount != 1) { + std::cout << ParseErrorCode(ERR_COMMAND_INVALID) << std::endl; + exit(-1); + } if (context.buffSizeArgs != "") { if (context.buffSizeArgs == "query") { ret = BufferSizeOp(controller, MC_REQ_BUFFER_SIZE, context.logTypeArgs, ""); @@ -491,12 +505,12 @@ int HilogEntry(int argc, char* argv[]) logPersistParam.jobIdStr = context.jobIdArgs; if (context.logFileCtrlArgs == "start") { ret = LogPersistOp(controller, MC_REQ_LOG_PERSIST_START, &logPersistParam); - } - if (context.logFileCtrlArgs == "stop") { + } else if (context.logFileCtrlArgs == "stop") { ret = LogPersistOp(controller, MC_REQ_LOG_PERSIST_STOP, &logPersistParam); - } - if (context.logFileCtrlArgs == "query") { + } else if (context.logFileCtrlArgs == "query") { ret = LogPersistOp(controller, MC_REQ_LOG_PERSIST_QUERY, &logPersistParam); + } else { + exit(-1); } if (ret == RET_FAIL) { cout << "log file task operation error!" << endl; @@ -550,6 +564,8 @@ int HilogEntry(int argc, char* argv[]) exit(-1); } exit(0); + } else { + exit(-1); } } else { LogQueryRequestOp(controller, &context);