Add aaa-12 callback and schedule rsyslog service
RCA: SOL: 修改人:zhangtao 检视人:
This commit is contained in:
parent
8da634826a
commit
81707f4425
|
@ -10,10 +10,9 @@
|
||||||
|
|
||||||
#define FILTER_CONTENT ":msg,contains,\""MODULE_FMT"\"\n"
|
#define FILTER_CONTENT ":msg,contains,\""MODULE_FMT"\"\n"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int copy_file(const char *src, const char *dst)
|
static int copy_file(const char *src, const char *dst)
|
||||||
{
|
{
|
||||||
|
//return -1;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
FILE *src_fp = NULL,*dst_fp = NULL;
|
FILE *src_fp = NULL,*dst_fp = NULL;
|
||||||
src_fp = fopen(src, "r");
|
src_fp = fopen(src, "r");
|
||||||
|
@ -63,12 +62,12 @@ static int __log_conf(const char *mode, const u8 level, const char *conf_path, c
|
||||||
u8 exist_backup = 1;
|
u8 exist_backup = 1;
|
||||||
|
|
||||||
/********** rsyslog configure **********/
|
/********** rsyslog configure **********/
|
||||||
char conf_path_file[MAX_PATH_SZ];
|
char conf_path_file[MAX_PATH_SZ], bak_file[MAX_PATH_SZ];
|
||||||
snprintf(conf_path_file, sizeof(conf_path_file), "%s%s", conf_path, conf_file);
|
|
||||||
|
|
||||||
char bak_file[MAX_PATH_SZ];
|
snprintf(conf_path_file, sizeof(conf_path_file), "%s%s", conf_path, conf_file);
|
||||||
snprintf(bak_file, sizeof(bak_file), BAK_FILE, conf_file);
|
snprintf(bak_file, sizeof(bak_file), BAK_FILE, conf_file);
|
||||||
//if (rename(conf_path_file, bak_file) < 0)
|
|
||||||
|
//if (rename(conf_path_file, bak_file) < 0) {
|
||||||
if (copy_file(conf_path_file, bak_file) != 0) {
|
if (copy_file(conf_path_file, bak_file) != 0) {
|
||||||
if (errno == ENOENT) {
|
if (errno == ENOENT) {
|
||||||
exist_backup = 0;
|
exist_backup = 0;
|
||||||
|
@ -229,30 +228,40 @@ int log_off_with_file(const char *path, const char *file_name)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpc_conf_proc(rpc_conn *conn, pointer input, int input_len, int need_len, rpc_cb cb)
|
void rpc_conf_proc(rpc_conn *conn, pointer input, int input_len, int need_len, rpc_cb cb, void *arg)
|
||||||
{
|
{
|
||||||
char str_err[1024];
|
char str_err[1024];
|
||||||
|
|
||||||
|
if (input == NULL) {
|
||||||
|
strncpy(str_err, "Input is not null", sizeof(str_err));
|
||||||
|
ULOG_WARNING(g_log, str_err);
|
||||||
|
goto FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if (input_len < need_len) {
|
if (input_len < need_len) {
|
||||||
if (snprintf(str_err, sizeof(str_err),
|
if (snprintf(str_err, sizeof(str_err),
|
||||||
"The input paramter of rpc log is needed length of %u, but the actual length is %u",
|
"The input paramter of rpc log is needed length of %u, but the actual length is %u",
|
||||||
need_len, input_len) < 0) {
|
need_len, input_len) < 0) {
|
||||||
ULOG_ERR(g_log, "Setting error to string is failure");
|
strncpy(str_err, "Setting error message is failure", sizeof(str_err));
|
||||||
return;
|
ULOG_ERR(g_log, str_err);
|
||||||
|
} else {
|
||||||
|
ULOG_WARNING(g_log, str_err);
|
||||||
}
|
}
|
||||||
ULOG_WARNING(g_log, str_err);
|
|
||||||
goto FAIL;
|
goto FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cb(input, str_err, sizeof(str_err)) != 0) {
|
// ret == 1,不需要重启服务;ret == 0,需要重启服务
|
||||||
|
int ret = cb(input, arg, str_err, sizeof(str_err));
|
||||||
|
if (ret < 0) {
|
||||||
ULOG_ERR(g_log, str_err);
|
ULOG_ERR(g_log, str_err);
|
||||||
goto FAIL;
|
goto FAIL;
|
||||||
}
|
}
|
||||||
if (log_sev_restart() != 0) {
|
|
||||||
|
if ((ret == 0) && (log_sev_restart() != 0)) {
|
||||||
if (snprintf(str_err, sizeof(str_err),
|
if (snprintf(str_err, sizeof(str_err),
|
||||||
"Restarting log service is failure") < 0) {
|
"Restarting log service is failure") < 0) {
|
||||||
ULOG_ERR(g_log, "Setting error to string is failure");
|
strncpy(str_err, "Setting error message is failure", sizeof(str_err));
|
||||||
return;
|
ULOG_ERR(g_log, str_err);
|
||||||
}
|
}
|
||||||
goto FAIL;
|
goto FAIL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,13 +15,12 @@
|
||||||
|
|
||||||
#define REDIRECT_SEPERATE " "
|
#define REDIRECT_SEPERATE " "
|
||||||
|
|
||||||
typedef int (*rpc_cb)(const void *arg, char *str_err, int str_len);
|
typedef int (*rpc_cb)(pointer *input, const void *arg, char *str_err, int str_len);
|
||||||
|
|
||||||
extern ulog_t *g_log;
|
extern ulog_t *g_log;
|
||||||
extern FILE *g_conf_fp;
|
extern FILE *g_conf_fp;
|
||||||
extern char g_conf_file[MAX_PATH_SZ];
|
extern char g_conf_file[MAX_PATH_SZ];
|
||||||
|
|
||||||
|
|
||||||
int log_conf(const u8 level, const char *conf_path, const char *conf_file, const char *filter_mod,
|
int log_conf(const u8 level, const char *conf_path, const char *conf_file, const char *filter_mod,
|
||||||
int (*cb_content)(FILE *fp, const u8 level, const char *filter_mod, void *arg), void *arg);
|
int (*cb_content)(FILE *fp, const u8 level, const char *filter_mod, void *arg), void *arg);
|
||||||
int log_conf_append(const u8 level, const char *conf_path, const char *conf_file, const char *filter_mod,
|
int log_conf_append(const u8 level, const char *conf_path, const char *conf_file, const char *filter_mod,
|
||||||
|
@ -30,6 +29,6 @@ int write_conf_content(FILE *fp, const u8 level, const char *filter_mod, void *a
|
||||||
int write_conf_content_authorizing(FILE *fp, const u8 level, const char *filter_mod, void *arg);
|
int write_conf_content_authorizing(FILE *fp, const u8 level, const char *filter_mod, void *arg);
|
||||||
int log_level_to_str(const u8 level, char *str, u32 len);
|
int log_level_to_str(const u8 level, char *str, u32 len);
|
||||||
int log_off_with_file(const char *path, const char *file_name);
|
int log_off_with_file(const char *path, const char *file_name);
|
||||||
void rpc_conf_proc(rpc_conn *conn, pointer input, int input_len, int need_len, rpc_cb cb);
|
void rpc_conf_proc(rpc_conn *conn, pointer input, int input_len, int need_len, rpc_cb cb, void *arg);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -78,9 +78,9 @@ static int config_log_console(const log_console_t *conf)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __rpc_conf_log_console(const void *arg, char *str_err, int str_len)
|
static int __rpc_conf_log_console(pointer input, const void *arg, char *str_err, int str_len)
|
||||||
{
|
{
|
||||||
if (config_log_console((const log_console_t *)arg) != 0) {
|
if (config_log_console((const log_console_t *)input) != 0) {
|
||||||
strncpy(str_err, "Configuring console of log is faiure", str_len);
|
strncpy(str_err, "Configuring console of log is faiure", str_len);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ static int __rpc_conf_log_console(const void *arg, char *str_err, int str_len)
|
||||||
|
|
||||||
void rpc_conf_log_console(rpc_conn *conn, pointer input, int input_len, pointer data)
|
void rpc_conf_log_console(rpc_conn *conn, pointer input, int input_len, pointer data)
|
||||||
{
|
{
|
||||||
rpc_conf_proc(conn, input, input_len, sizeof(log_console_t), __rpc_conf_log_console);
|
rpc_conf_proc(conn, input, input_len, sizeof(log_console_t), __rpc_conf_log_console, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
u32 need_len = sizeof(log_console_t);
|
u32 need_len = sizeof(log_console_t);
|
||||||
|
|
|
@ -76,21 +76,17 @@ static int config_log_pty(const log_pty_t *conf)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpc_conf_log_pty(rpc_conn *conn, pointer input, int input_len, pointer data)
|
static int __rpc_conf_log_pty(pointer input, const void *arg, char *str_err, int str_len)
|
||||||
{
|
{
|
||||||
u32 need_len = sizeof(log_pty_t);
|
|
||||||
if (input_len < need_len) {
|
|
||||||
ULOG_WARNING(g_log,
|
|
||||||
"The input paramter of rpc log pty is needed length of %u, but the actual length is %u",
|
|
||||||
need_len, input_len);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_log_pty((const log_pty_t *)input) != 0) {
|
if (config_log_pty((const log_pty_t *)input) != 0) {
|
||||||
ULOG_ERR(g_log, "Configuring pty of log is faiure");
|
strncpy(str_err, "Configuring pty of log is faiure", str_len);
|
||||||
rpc_return_error(conn, RET_ERR, "Configuring pty of log is faiure");
|
return -1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
rpc_return_null(conn);
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rpc_conf_log_pty(rpc_conn *conn, pointer input, int input_len, pointer data)
|
||||||
|
{
|
||||||
|
rpc_conf_proc(conn, input, input_len, sizeof(log_pty_t), __rpc_conf_log_pty, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
@ -39,12 +40,6 @@ static int match_remote_config(const char *line, const void *src)
|
||||||
|
|
||||||
ULOG_DEBUG(g_log, "The line:%s will be matched", line);
|
ULOG_DEBUG(g_log, "The line:%s will be matched", line);
|
||||||
n = sscanf(line, "%s"REDIRECT_SEPERATE"%s", text_level, old_redirect);
|
n = sscanf(line, "%s"REDIRECT_SEPERATE"%s", text_level, old_redirect);
|
||||||
if (errno != 0) {
|
|
||||||
// 错误发生
|
|
||||||
ULOG_ERR(g_log, "Parsing remote line is failure:%s", strerror(errno));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (n == 2) {
|
if (n == 2) {
|
||||||
// 匹配到
|
// 匹配到
|
||||||
// 是否相同配置判读
|
// 是否相同配置判读
|
||||||
|
@ -52,6 +47,10 @@ static int match_remote_config(const char *line, const void *src)
|
||||||
if (strcmp(old_redirect, src) == 0) {
|
if (strcmp(old_redirect, src) == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
} else if (n == EOF) {
|
||||||
|
// 错误发生
|
||||||
|
ULOG_ERR(g_log, "Parsing remote line is failure:%s", strerror(errno));
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
// 未能识别行
|
// 未能识别行
|
||||||
ULOG_DEBUG(g_log, "The line:%s can't be parsed", line);
|
ULOG_DEBUG(g_log, "The line:%s can't be parsed", line);
|
||||||
|
@ -68,6 +67,7 @@ static int remote_conf_content(FILE *fp, const u8 level, const char *filter_mod,
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
FILE *bak_fp = NULL;
|
FILE *bak_fp = NULL;
|
||||||
char path[MAX_PATH_SZ];
|
char path[MAX_PATH_SZ];
|
||||||
|
char *line = NULL;
|
||||||
snprintf(path, sizeof(path), BAK_FILE, LOG_CONF_REMOTE_FILE_NAME);
|
snprintf(path, sizeof(path), BAK_FILE, LOG_CONF_REMOTE_FILE_NAME);
|
||||||
bak_fp = fopen(path, "r");
|
bak_fp = fopen(path, "r");
|
||||||
if (bak_fp == NULL) {
|
if (bak_fp == NULL) {
|
||||||
|
@ -79,7 +79,7 @@ static int remote_conf_content(FILE *fp, const u8 level, const char *filter_mod,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char *line = NULL;
|
|
||||||
ssize_t n, n1;
|
ssize_t n, n1;
|
||||||
char text_level[MAX_LINE_SZ], old_redirect[MAX_LINE_SZ];
|
char text_level[MAX_LINE_SZ], old_redirect[MAX_LINE_SZ];
|
||||||
while ((n = getline(&line, &n, bak_fp)) != -1) {
|
while ((n = getline(&line, &n, bak_fp)) != -1) {
|
||||||
|
@ -98,7 +98,6 @@ static int remote_conf_content(FILE *fp, const u8 level, const char *filter_mod,
|
||||||
goto END;
|
goto END;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FINAL_PHASE:
|
FINAL_PHASE:
|
||||||
if (final_cb != NULL) {
|
if (final_cb != NULL) {
|
||||||
if (final_cb(fp, level, filter_mod, arg) != 0) {
|
if (final_cb(fp, level, filter_mod, arg) != 0) {
|
||||||
|
@ -124,7 +123,10 @@ static int remote_conf_level_content(FILE *fp, const u8 level)
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
FILE *bak_fp = NULL;
|
FILE *bak_fp = NULL;
|
||||||
char path[MAX_PATH_SZ];
|
char path[MAX_PATH_SZ];
|
||||||
snprintf(path, sizeof(path), BAK_FILE, LOG_CONF_REMOTE_FILE_NAME);
|
if (snprintf(path, sizeof(path), BAK_FILE, LOG_CONF_REMOTE_FILE_NAME) < 0) {
|
||||||
|
ULOG_DEBUG(g_log, "[remote-level]:Buildbackup path(%s) is failure", BAK_FILE, LOG_CONF_REMOTE_FILE_NAME);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
bak_fp = fopen(path, "r");
|
bak_fp = fopen(path, "r");
|
||||||
if (bak_fp == NULL) {
|
if (bak_fp == NULL) {
|
||||||
ULOG_ERR(g_log, "Opening remote backup file:%s is failure:%s", path, strerror(errno));
|
ULOG_ERR(g_log, "Opening remote backup file:%s is failure:%s", path, strerror(errno));
|
||||||
|
@ -138,11 +140,6 @@ static int remote_conf_level_content(FILE *fp, const u8 level)
|
||||||
char rewrite_line[MAX_LINE_SZ];
|
char rewrite_line[MAX_LINE_SZ];
|
||||||
while ((n1 = getline(&line, &n, bak_fp)) != -1) {
|
while ((n1 = getline(&line, &n, bak_fp)) != -1) {
|
||||||
n3 = sscanf(line, "%s"REDIRECT_SEPERATE"%s", text_level, old_redirect);
|
n3 = sscanf(line, "%s"REDIRECT_SEPERATE"%s", text_level, old_redirect);
|
||||||
if (errno != 0) {
|
|
||||||
// 错误发生
|
|
||||||
ULOG_ERR(g_log, "Parsing remote line is failure:%s", strerror(errno));
|
|
||||||
goto END;
|
|
||||||
}
|
|
||||||
if (n3 == 2) {
|
if (n3 == 2) {
|
||||||
// 匹配到
|
// 匹配到
|
||||||
// 改变该行日志级别
|
// 改变该行日志级别
|
||||||
|
@ -155,6 +152,10 @@ static int remote_conf_level_content(FILE *fp, const u8 level)
|
||||||
strcat(rewrite_line, old_redirect);
|
strcat(rewrite_line, old_redirect);
|
||||||
strcat(rewrite_line, "\n");
|
strcat(rewrite_line, "\n");
|
||||||
n3 = strlen(rewrite_line);
|
n3 = strlen(rewrite_line);
|
||||||
|
} else if (n == EOF) {
|
||||||
|
// 错误发生
|
||||||
|
ULOG_ERR(g_log, "Parsing remote line is failure:%s", strerror(errno));
|
||||||
|
goto END;
|
||||||
} else {
|
} else {
|
||||||
// 未能识别行
|
// 未能识别行
|
||||||
ULOG_DEBUG(g_log, "The line:%s can't be parsed", line);
|
ULOG_DEBUG(g_log, "The line:%s can't be parsed", line);
|
||||||
|
@ -176,7 +177,6 @@ END:
|
||||||
if (bak_fp != NULL) {
|
if (bak_fp != NULL) {
|
||||||
fclose(bak_fp);
|
fclose(bak_fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,14 +206,13 @@ static int get_log_level()
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
u8 value;
|
u8 value;
|
||||||
while ((n1 = getline(&line, &n, g_conf_fp)) != -1) {
|
while ((n1 = getline(&line, &n, g_conf_fp)) != -1) {
|
||||||
|
ULOG_DEBUG(g_log, "config file line:%s", line);
|
||||||
n2 = sscanf(line, LOG_CONF_KEY_REMOTE_LEVEL"%u", &value);
|
n2 = sscanf(line, LOG_CONF_KEY_REMOTE_LEVEL"%u", &value);
|
||||||
if (errno != 0) {
|
|
||||||
// 错误发生
|
|
||||||
ULOG_ERR(g_log, "Parsing level from configure is failure:%s", strerror(errno));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (n2 == 1) {
|
if (n2 == 1) {
|
||||||
return value;
|
return value;
|
||||||
|
} else if (n2 == EOF) {
|
||||||
|
ULOG_ERR(g_log, "Parsing level from configure is failure:%s", strerror(errno));
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
ULOG_DEBUG(g_log, "Unknown level row:%s", line);
|
ULOG_DEBUG(g_log, "Unknown level row:%s", line);
|
||||||
}
|
}
|
||||||
|
@ -225,7 +224,7 @@ static int get_log_level()
|
||||||
static int add_remote_host(const log_remote_host_t *conf)
|
static int add_remote_host(const log_remote_host_t *conf)
|
||||||
{
|
{
|
||||||
ULOG_INFO(g_log, "Adding remote log server[%s:%u], rfc is %s", conf->host, conf->port, rfc_tbl[conf->rfc].fmt);
|
ULOG_INFO(g_log, "Adding remote log server[%s:%u], rfc is %s", conf->host, conf->port, rfc_tbl[conf->rfc].fmt);
|
||||||
char prefix[1] = "";
|
char prefix[2] = {0};
|
||||||
if (conf->rfc == LOG_RFC_5424) {
|
if (conf->rfc == LOG_RFC_5424) {
|
||||||
strcat(prefix, "@");
|
strcat(prefix, "@");
|
||||||
};
|
};
|
||||||
|
@ -242,6 +241,7 @@ static int add_remote_host(const log_remote_host_t *conf)
|
||||||
ULOG_ERR(g_log, "Getting log level is failure");
|
ULOG_ERR(g_log, "Getting log level is failure");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (log_conf(level, LOG_CONF_PATH, LOG_CONF_REMOTE_FILE_NAME, NULL,
|
if (log_conf(level, LOG_CONF_PATH, LOG_CONF_REMOTE_FILE_NAME, NULL,
|
||||||
add_remote_conf_content, (void *)redirect) != 0) {
|
add_remote_conf_content, (void *)redirect) != 0) {
|
||||||
ULOG_ERR(g_log, "Adding remote server[%s:%u:%s] is faulure", conf->host, conf->port, rfc_tbl[conf->rfc].fmt);
|
ULOG_ERR(g_log, "Adding remote server[%s:%u:%s] is faulure", conf->host, conf->port, rfc_tbl[conf->rfc].fmt);
|
||||||
|
@ -317,20 +317,34 @@ static int config_log_remote_level(const log_remote_level_t *level)
|
||||||
}
|
}
|
||||||
fflush(g_conf_fp);
|
fflush(g_conf_fp);
|
||||||
|
|
||||||
if (log_conf(level->level, LOG_CONF_PATH, LOG_CONF_REMOTE_FILE_NAME, NULL,
|
//判断是否有rsyslog的remote配置,如果有,才写入
|
||||||
modify_remote_conf_log_level, NULL) != 0) {
|
char path[MAX_PATH_SZ];
|
||||||
ULOG_ERR(g_log, "Modifing log level:%u of remote server [%s:%u:%s] is faulure", level->level);
|
if (snprintf(path, sizeof(path), BAK_FILE, LOG_CONF_REMOTE_FILE_NAME) < 0) {
|
||||||
|
ULOG_DEBUG(g_log, "Build backup path(%s) is failure", BAK_FILE, LOG_CONF_REMOTE_FILE_NAME);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if(access(path, F_OK) != 0) {
|
||||||
|
ULOG_DEBUG(g_log, "Backup file:%s is not exist:%s", path, strerror(errno));
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
if (log_conf(level->level, LOG_CONF_PATH, LOG_CONF_REMOTE_FILE_NAME, NULL,
|
||||||
|
modify_remote_conf_log_level, NULL) != 0) {
|
||||||
|
ULOG_ERR(g_log, "Modifing log level:%u of remote server is faulure", level->level);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rpc_conf_log_remote(const log_op_t op, rpc_conn *conn, pointer input, int input_len, pointer data)
|
static void rpc_conf_log_remote(const log_op_t op, rpc_conn *conn, pointer input, int input_len, pointer data)
|
||||||
{
|
{
|
||||||
|
char str_err[1024];
|
||||||
|
|
||||||
if (input == NULL) {
|
if (input == NULL) {
|
||||||
ULOG_WARNING(g_log, "Remote log configure can't null");
|
strncpy(str_err, "Remote log configure can't be null", sizeof(str_err));
|
||||||
return;
|
ULOG_WARNING(g_log, str_err);
|
||||||
|
goto FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 need_len = sizeof(log_remote_host_t);
|
u32 need_len = sizeof(log_remote_host_t);
|
||||||
|
@ -346,40 +360,51 @@ static void rpc_conf_log_remote(const log_op_t op, rpc_conn *conn, point
|
||||||
rpc_return_error(conn, RET_ERR, "Configuring remote of log is faiure");
|
rpc_return_error(conn, RET_ERR, "Configuring remote of log is faiure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rpc_return_null(conn);
|
rpc_return_null(conn);
|
||||||
|
FAIL:
|
||||||
|
rpc_return_error(conn, RET_ERR, str_err);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __rpc_conf_log_remote(pointer input, const void *arg, char *str_err, int str_len)
|
||||||
|
{
|
||||||
|
log_op_t op;
|
||||||
|
memcpy(&op, arg, sizeof(op));
|
||||||
|
|
||||||
|
int ret = config_log_remote_host(op, (const log_remote_level_t *)input);
|
||||||
|
if (ret < 0) {
|
||||||
|
strncpy(str_err, "Configuring remote of log is faiure", str_len);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpc_conf_log_add_remote(rpc_conn *conn, pointer input, int input_len, pointer data)
|
void rpc_conf_log_add_remote(rpc_conn *conn, pointer input, int input_len, pointer data)
|
||||||
{
|
{
|
||||||
rpc_conf_log_remote(LOG_REMOTE_OP_ADD, conn, input, input_len, data);
|
//rpc_conf_log_remote(LOG_REMOTE_OP_ADD, conn, input, input_len, data);
|
||||||
|
|
||||||
|
log_op_t op = LOG_REMOTE_OP_ADD;
|
||||||
|
rpc_conf_proc(conn, input, input_len, sizeof(log_remote_host_t), __rpc_conf_log_remote, (void *)&op);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpc_conf_log_del_remote(rpc_conn *conn, pointer input, int input_len, pointer data)
|
void rpc_conf_log_del_remote(rpc_conn *conn, pointer input, int input_len, pointer data)
|
||||||
{
|
{
|
||||||
rpc_conf_log_remote(LOG_REMOTE_OP_DEL, conn, input, input_len, data);
|
//rpc_conf_log_remote(LOG_REMOTE_OP_DEL, conn, input, input_len, data);
|
||||||
|
|
||||||
|
log_op_t op = LOG_REMOTE_OP_DEL;
|
||||||
|
rpc_conf_proc(conn, input, input_len, sizeof(log_remote_host_t), __rpc_conf_log_remote, (void *)&op);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __rpc_conf_log_remote_level(pointer input, const void *arg, char *str_err, int str_len)
|
||||||
|
{
|
||||||
|
int ret = config_log_remote_level((const log_remote_level_t *)input);
|
||||||
|
if (ret < 0) {
|
||||||
|
strncpy(str_err, "Configuring remote level of log is faiure", str_len);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void rpc_conf_log_remote_level(rpc_conn *conn, pointer input, int input_len, pointer data)
|
void rpc_conf_log_remote_level(rpc_conn *conn, pointer input, int input_len, pointer data)
|
||||||
{
|
{
|
||||||
if (input == NULL) {
|
rpc_conf_proc(conn, input, input_len, sizeof(log_remote_level_t), __rpc_conf_log_remote_level, NULL);
|
||||||
ULOG_WARNING(g_log, "Remote log level can't null");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 need_len = sizeof(log_remote_level_t);
|
|
||||||
if (input_len < need_len) {
|
|
||||||
ULOG_WARNING(g_log,
|
|
||||||
"The input paramter of rpc log remote level is needed length of %u, but the actual length is %u",
|
|
||||||
need_len, input_len);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_log_remote_level((const log_remote_level_t *)input) != 0) {
|
|
||||||
ULOG_ERR(g_log, "Configuring remote level of log is faiure");
|
|
||||||
rpc_return_error(conn, RET_ERR, "Configuring remote level of log is faiure");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rpc_return_null(conn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,14 @@
|
||||||
#define SEV_TIMEOUT 1
|
#define SEV_TIMEOUT 1
|
||||||
#define SEV_CMD "systemctl restart rsyslog"
|
#define SEV_CMD "systemctl restart rsyslog"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SEV_STATE_RESTARTING,
|
||||||
|
SEV_STATE_WAIT
|
||||||
|
} sev_state_t;
|
||||||
|
|
||||||
static sem_t g_sem;
|
static sem_t g_sem;
|
||||||
static int is_exit = 0;
|
static volatile int g_is_exit = 0;
|
||||||
|
static volatile sev_state_t g_sev_state = SEV_STATE_WAIT;
|
||||||
|
|
||||||
static void sev_restart()
|
static void sev_restart()
|
||||||
{
|
{
|
||||||
|
@ -43,12 +49,15 @@ void sev_loop()
|
||||||
ULOG_ERR(g_log, "Waitting semaphore is failure:%s", strerror(errno));
|
ULOG_ERR(g_log, "Waitting semaphore is failure:%s", strerror(errno));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (is_exit == 1) {
|
g_sev_state = SEV_STATE_RESTARTING;
|
||||||
|
if (g_is_exit == 1) {
|
||||||
ULOG_DEBUG(g_log, "Service loop is exit");
|
ULOG_DEBUG(g_log, "Service loop is exit");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sleep(SEV_TIMEOUT);
|
|
||||||
|
|
||||||
|
// 减少在短时间内频繁更改配置使重启变多,这里进行限制
|
||||||
|
sleep(SEV_TIMEOUT);
|
||||||
|
g_sev_state = SEV_STATE_WAIT;
|
||||||
sev_restart();
|
sev_restart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,7 +84,7 @@ static int set_sem()
|
||||||
|
|
||||||
int log_sev_exit()
|
int log_sev_exit()
|
||||||
{
|
{
|
||||||
is_exit = 1;
|
g_is_exit = 1;
|
||||||
set_sem();
|
set_sem();
|
||||||
sem_destroy(&g_sem);
|
sem_destroy(&g_sem);
|
||||||
|
|
||||||
|
@ -84,6 +93,7 @@ int log_sev_exit()
|
||||||
|
|
||||||
int log_sev_restart()
|
int log_sev_restart()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
int val;
|
int val;
|
||||||
if (sem_getvalue(&g_sem, &val) != 0) {
|
if (sem_getvalue(&g_sem, &val) != 0) {
|
||||||
ULOG_ERR(g_log, "Get semaphore value is failure:%s", strerror(errno));
|
ULOG_ERR(g_log, "Get semaphore value is failure:%s", strerror(errno));
|
||||||
|
@ -94,6 +104,11 @@ int log_sev_restart()
|
||||||
ULOG_ERR(g_log, "Current semaphore value is %d, not need to set semaphore");
|
ULOG_ERR(g_log, "Current semaphore value is %d, not need to set semaphore");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
if (g_sev_state == SEV_STATE_RESTARTING) {
|
||||||
|
ULOG_DEBUG(g_log, "Current service state:%u, not need to set semaphore", g_sev_state);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (set_sem() != 0) {
|
if (set_sem() != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue