* Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
*
* ubs-optimizer is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include <unistd.h>
#include <csignal>
#include <iostream>
#include "command_parser.h"
#include "log/ebpf_logger.h"
#include "utils.h"
#include "vsock_server.h"
constexpr unsigned startTime = 1;
constexpr unsigned stopTime = 3;
const char *CLI_NAME = "ubs-opt-guard";
int main(int argc, char **argv)
{
CommandParser parser(CLI_NAME);
parser.registerHandler(
"start",
[]() -> bool {
if (utils::checkRunning(PID_FILE_PATH, CLI_NAME)) {
std::cout << "Start failed. ubs-opt-guard is running." << std::endl;
return false;
} else {
remove(PID_FILE_PATH);
}
VsockServer::daemonize();
std::this_thread::sleep_for(std::chrono::seconds(startTime));
if (utils::checkRunning(PID_FILE_PATH, CLI_NAME)) {
std::cout << "ubs-opt-guard started." << std::endl;
} else {
std::cout << "ubs-opt-guard start failed." << std::endl;
}
return true;
},
"Start the guardian of the eBPF collector.");
parser.registerHandler(
"stop",
[]() -> bool {
if (!utils::checkRunning(PID_FILE_PATH, CLI_NAME)) {
std::cout << "Stopping ubs-opt-guard failed. ubs-opt-guard is not running." << std::endl;
return false;
}
kill(utils::getDaemonPID(PID_FILE_PATH), SIGTERM);
std::cout << "Stopping ubs-opt-guard." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(stopTime));
if (!utils::checkRunning(PID_FILE_PATH, CLI_NAME)) {
std::cout << "ubs-opt-guard stopped." << std::endl;
} else {
std::cout << "Stopping ubs-opt-guard failed." << std::endl;
}
return true;
},
"Stop the guard.");
if (!parser.parse(argc, argv)) {
return 1;
}
return 0;
}