!24 [sync] PR-21: fix systemd service, load error and args parsing

From: @openeuler-sync-bot 
Reviewed-by: @Lostwayzxc 
Signed-off-by: @Lostwayzxc
This commit is contained in:
openeuler-ci-bot 2024-05-11 02:41:30 +00:00 committed by Gitee
commit 58e51f6b14
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 264 additions and 1 deletions

View File

@ -0,0 +1,252 @@
From c35c26e51d93b0eb5b0aecdf08c338178079e02a Mon Sep 17 00:00:00 2001
From: fly_1997 <flylove7@outlook.com>
Date: Fri, 10 May 2024 12:01:08 +0800
Subject: [PATCH] fix load error and args parsing error printing
---
src/client/arg_parse.cpp | 28 +++++++++++++++++++++++++---
src/client/arg_parse.h | 3 +++
src/client/cmd_handler.cpp | 28 +++++++++++-----------------
src/plugin_mgr/config.cpp | 11 +++++------
src/plugin_mgr/config.h | 2 +-
src/plugin_mgr/dep_handler.cpp | 2 +-
src/plugin_mgr/plugin_manager.cpp | 2 +-
7 files changed, 47 insertions(+), 29 deletions(-)
diff --git a/src/client/arg_parse.cpp b/src/client/arg_parse.cpp
index 70fcd4a..805f5a7 100644
--- a/src/client/arg_parse.cpp
+++ b/src/client/arg_parse.cpp
@@ -62,10 +62,23 @@ void ArgParse::print_help() {
" --help show this help message.\n";
}
+void ArgParse::init_opts() {
+ opts.insert('l');
+ opts.insert('r');
+ opts.insert('q');
+ opts.insert('Q');
+ opts.insert('e');
+ opts.insert('d');
+ opts.insert('L');
+ opts.insert('i');
+ opts.insert('t');
+}
+
int ArgParse::init(int argc, char *argv[]) {
int cmd = -1;
int opt;
bool help = false;
+ init_opts();
opterr = 0;
while((opt = getopt_long(argc, argv, OPT_STRING.c_str(), long_options, nullptr)) != -1) {
std::string full_opt;
@@ -76,9 +89,15 @@ int ArgParse::init(int argc, char *argv[]) {
case 'h':
help = true;
break;
- case '?':
- arg_error("unknown option.");
- return -1;
+ case '?': {
+ std::string err;
+ err += optopt;
+ if (!opts.count(optopt)) {
+ arg_error("unknown option '-" + err + "'.");
+ } else{
+ arg_error("option -" + err + " requires an argument.");
+ }
+ }
default: {
if (opt == 'l' || opt == 'r' || opt == 'q' || opt == 'Q' || opt == 'e' || opt == 'd' || opt == 'L' || opt == 'i') {
if (cmd != -1) {
@@ -94,6 +113,9 @@ int ArgParse::init(int argc, char *argv[]) {
}
}
+ if (cmd == 'l' && type.empty()) {
+ arg_error("option '-t' is required.");
+ }
if (help) {
print_help();
exit(EXIT_SUCCESS);
diff --git a/src/client/arg_parse.h b/src/client/arg_parse.h
index 8535e9c..682f0e5 100644
--- a/src/client/arg_parse.h
+++ b/src/client/arg_parse.h
@@ -12,12 +12,14 @@
#ifndef CLIENT_ARG_PARSE_H
#define CLIENT_ARG_PARSE_H
#include <string>
+#include <unordered_set>
class ArgParse {
public:
static void arg_error(const std::string &msg);
static void print_help();
int init(int argc, char *argv[]);
+ void init_opts();
void set_type(char* _type);
void set_arg(char* _arg);
std::string get_type() const {
@@ -29,6 +31,7 @@ public:
private:
std::string arg;
std::string type;
+ std::unordered_set<char> opts;
static const std::string OPT_STRING;
static const int MAX_OPT_SIZE = 20;
static const struct option long_options[MAX_OPT_SIZE];
diff --git a/src/client/cmd_handler.cpp b/src/client/cmd_handler.cpp
index 4fec95b..b410968 100644
--- a/src/client/cmd_handler.cpp
+++ b/src/client/cmd_handler.cpp
@@ -16,14 +16,8 @@
std::unordered_set<std::string> LoadHandler::types = {"collector", "scenario", "tune"};
void LoadHandler::check(const std::string &arg, const std::string &type) {
- if (arg.empty()) {
- ArgParse::arg_error("plugin name empty.");
- }
- if (type.empty()) {
- ArgParse::arg_error("type empty.");
- }
if (!types.count(type)) {
- ArgParse::arg_error("this type is not supported.");
+ ArgParse::arg_error("type '" + type + "' is not supported.");
}
}
@@ -94,9 +88,9 @@ void RemoveHandler::handler(const ArgParse &arg_parse, Msg &msg) {
void RemoveHandler::res_handler(Msg &msg) {
if (msg.get_opt() == Opt::RESPONSE_OK) {
- std::cout << "plugin remove successfully.\n";
+ std::cout << "Plugin remove successfully.\n";
} else {
- std::cout << "plugin remove failed, because " << msg.payload(0) << ".\n";
+ std::cout << "Plugin remove failed, because " << msg.payload(0) << ".\n";
}
}
@@ -141,9 +135,9 @@ void EnabledHandler::handler(const ArgParse &arg_parse, Msg &msg) {
void EnabledHandler::res_handler(Msg &msg) {
if (msg.get_opt() == Opt::RESPONSE_OK) {
- std::cout << "instance enabled successfully.\n";
+ std::cout << "Instance enabled successfully.\n";
} else {
- std::cout << "instance enabled failed, because "<< msg.payload(0) << ".\n";
+ std::cout << "Instance enabled failed, because "<< msg.payload(0) << ".\n";
}
}
@@ -155,9 +149,9 @@ void DisabledHandler::handler(const ArgParse &arg_parse, Msg &msg) {
void DisabledHandler::res_handler(Msg &msg) {
if (msg.get_opt() == Opt::RESPONSE_OK) {
- std::cout << "instance disabled successfully.\n";
+ std::cout << "Instance disabled successfully.\n";
} else {
- std::cout << "instance disabled failed, because "<< msg.payload(0) << ".\n";
+ std::cout << "Instance disabled failed, because "<< msg.payload(0) << ".\n";
}
}
@@ -167,10 +161,10 @@ void ListHandler::handler(const ArgParse &arg_parse, Msg &msg) {
void ListHandler::res_handler(Msg &msg) {
if (msg.get_opt() == Opt::RESPONSE_ERROR) {
- std::cerr << "query list failed, because "<< msg.payload(0) << ".\n";
+ std::cerr << "Query list failed, because "<< msg.payload(0) << ".\n";
return;
}
- std::cout << "plugin list as follows.\n";
+ std::cout << "Plugin list as follows.\n";
std::cout << "------------------------------------------------------------\n";
for (int i = 0; i < msg.payload_size(); ++i) {
std::cout << msg.payload(i);
@@ -186,13 +180,13 @@ void InstallHandler::handler(const ArgParse &arg_parse, Msg &msg) {
void InstallHandler::res_handler(Msg &msg) {
if (msg.get_opt() == Opt::RESPONSE_ERROR) {
- std::cout << "download failed, because " << msg.payload(0) <<": " << this->arg.c_str() << '\n';
+ std::cout << "Download failed, because " << msg.payload(0) <<": " << this->arg.c_str() << '\n';
return;
}
std::string path = this->arg;
std::string url = msg.payload(0);
if (!download(url, path)) {
- std::cout << "download failed, please check url or your network.\n";
+ std::cout << "Download failed, please check url or your network.\n";
return;
}
std::string command = "rpm -ivh " + path;
diff --git a/src/plugin_mgr/config.cpp b/src/plugin_mgr/config.cpp
index 3c76e8e..f50399b 100644
--- a/src/plugin_mgr/config.cpp
+++ b/src/plugin_mgr/config.cpp
@@ -84,16 +84,15 @@ bool Config::load(const std::string path) {
for (int i = 0; i < enable_list.size(); ++i) {
YAML::Node plugin = enable_list[i]["name"];
std::string name = enable_list[i]["name"].as<std::string>();
+ YAML::Node instances = enable_list[i]["instances"];
EnableItem enable_item(name);
- if (plugin.IsScalar()) {
+ if (instances.IsNull()) {
enable_item.set_enabled(true);
- } else if (plugin.IsSequence()) {
- for (int j = 0; j < plugin.size(); ++j) {
- std::string i_name = plugin[j].as<std::string>();
+ } else {
+ for (int j = 0; j < instances.size(); ++j) {
+ std::string i_name = instances[j].as<std::string>();
enable_item.add_instance(i_name);
}
- } else {
- continue;
}
this->enable_list.emplace_back(enable_item);
}
diff --git a/src/plugin_mgr/config.h b/src/plugin_mgr/config.h
index 5ab7672..6d0ee4d 100644
--- a/src/plugin_mgr/config.h
+++ b/src/plugin_mgr/config.h
@@ -52,7 +52,7 @@ namespace std {
class EnableItem {
public:
- EnableItem(std::string name) : name(name) { }
+ EnableItem(std::string name) : name(name), enabled(false) { }
void set_enabled(bool enabled) {
this->enabled = enabled;
}
diff --git a/src/plugin_mgr/dep_handler.cpp b/src/plugin_mgr/dep_handler.cpp
index 652fdce..816056d 100644
--- a/src/plugin_mgr/dep_handler.cpp
+++ b/src/plugin_mgr/dep_handler.cpp
@@ -132,7 +132,7 @@ void DepHandler::query_node(const std::string &name, std::vector<std::vector<std
query.emplace_back(std::vector<std::string>{node->name});
for (auto cur = node->head->next; cur != nullptr; cur = cur->next) {
query.emplace_back(std::vector<std::string>{node->name, cur->arc_name});
- if (!vis.count(cur->arc_name)) {
+ if (!vis.count(cur->arc_name) && nodes.count(cur->arc_name)) {
vis.insert(cur->arc_name);
q.push(cur->arc_name);
}
diff --git a/src/plugin_mgr/plugin_manager.cpp b/src/plugin_mgr/plugin_manager.cpp
index 5ef395c..77acc40 100644
--- a/src/plugin_mgr/plugin_manager.cpp
+++ b/src/plugin_mgr/plugin_manager.cpp
@@ -461,7 +461,7 @@ int PluginManager::run() {
PluginType type = plugin_types[msg.get_payload(1)];
ErrorCode ret_code = load_plugin(plugin_name, type);
if(ret_code == ErrorCode::OK) {
- INFO("[PluginManager] " << plugin_name << "plugin loaded.");
+ INFO("[PluginManager] " << plugin_name << " plugin loaded.");
res.set_opt(Opt::RESPONSE_OK);
std::string lack_dep = instance_dep_check(plugin_name);
if (!lack_dep.empty()) {
--
2.33.0

View File

@ -1,6 +1,6 @@
Name: oeAware-manager
Version: v1.0.0
Release: 4
Release: 5
Summary: OeAware server and client
License: MulanPSL2
URL: https://gitee.com/openeuler/%{name}
@ -10,6 +10,7 @@ Patch2: 0002-add-error-code-and-replace-raw-poniters-with-smart-p.patch
Patch3: 0003-add-client-error-description-extract-class-and-fix-b.patch
Patch4: 0004-fix-auto-enable-error-and-check-plugin-list-config.patch
Patch5: 0005-modify-logs-sock-file-permission-and-fix-service-fil.patch
Patch6: 0006-fix-load-error-and-args-parsing-error-printing.patch
BuildRequires: cmake make gcc-c++
BuildRequires: boost-devel
@ -40,6 +41,12 @@ install -D -m 0750 build/src/client/oeawarectl %{buildroot}%{_bindir}/oeawarectl
install -D -m 0640 config.yaml %{buildroot}%{_sysconfdir}/oeAware/config.yaml
install -D -p -m 0644 oeaware.service %{buildroot}%{_unitdir}/oeaware.service
%preun
%systemd_preun oeaware.service
%post
%systemd_post oeaware.service
%files
%attr(0750, root, root) %{_bindir}/oeaware
%attr(0750, root, root) %{_bindir}/oeawarectl
@ -47,6 +54,10 @@ install -D -p -m 0644 oeaware.service %{buildroot}%{_unitdir}/oeaware.service
%attr(0644, root, root) %{_unitdir}/oeaware.service
%changelog
* Wed May 8 2024 fly_1997 <flylove7@outlook.com> -v1.0.0-5
- fix systemd service uninstallation issue
- fix load error and args parsing error printing
* Mon May 6 2024 fly_1997 <flylove7@outlook.com> -v1.0.0-4
- add logs, modify sock file permission and serivce file