完善日志系统,修复读取配置文件时的内存泄漏,初步添加熔断机制与指数退避机制

This commit is contained in:
2025-10-11 16:57:27 +08:00
parent f518bf5064
commit 331c6b9f89
14 changed files with 104 additions and 43 deletions

View File

@ -9,12 +9,24 @@
#include "interpreter.h"
#include "tools/pkgmanager/pkginstall.h"
int inter_in_log(const char *log,log_manager *manager)
{
if(strlen(log)>1024)
return -1;
logs* logss = (logs*)malloc(sizeof(logs));
memcpy(logss->log,log,strlen(log));
manager->in_log(logss,manager);
return 0;
}
int init_interpreter(Cmd *cmd_dic,ctx *self,int fifo[2])
int init_interpreter(Cmd *cmd_dic,ctx *self,int fifo[2],log_manager *log_manager)
{
printf("SYS:prepare env\n");
inter_in_log("SYS:prepare env\n",log_manager);
printf("SYS:env ready\n");
inter_in_log("SYS:env ready\n",log_manager);
printf("SYS:loading cmd_dic\n");
inter_in_log("SYS:loading cmd_dic\n",log_manager);
sprintf(cmd_dic[0].name, "pkginstall");
cmd_dic[0].cmd = INSTALL;
@ -25,6 +37,7 @@ int init_interpreter(Cmd *cmd_dic,ctx *self,int fifo[2])
cmd_dic[2].cmd = QUIT;
printf("SYS:cmd_dir load complite\n");
inter_in_log("SYS:cmd_dir load complite\n",log_manager);
for(int i =0;i<10;i++)
{
@ -32,8 +45,9 @@ int init_interpreter(Cmd *cmd_dic,ctx *self,int fifo[2])
}
self->arg = NULL;
printf("SYS:Creating ctl fifo\n");
inter_in_log("SYS:Creating ctl fifo\n",log_manager);
memcpy(self->fifofd,fifo,2*sizeof(int));
self->log_manager = log_manager;
}
int get_args(ctx *self)
@ -57,6 +71,7 @@ int get_args(ctx *self)
arg->next = (args*)malloc(sizeof(args));
if(arg->next == NULL){
perror("ERROR:fail to get mem");
inter_in_log("ERROR:fail to get mem\n",self->log_manager);
return -1;
}
arg = arg->next;
@ -131,25 +146,31 @@ int exce(const int command,ctx *all_ctx)
{
case BAD_INPUT:
printf("SYS:bad input,try again\n");
inter_in_log("SYS:bad input,try again\n",all_ctx->log_manager);
return BAD_INPUT;
case INSTALL:
if(all_ctx->arg == NULL){
printf("SYS:Missing args\n");
inter_in_log("SYS:Missng args\n",all_ctx->log_manager);
return 1;
}
printf("SYS:init pkgmanager\n");
inter_in_log("SYS:init pkgmanager\n",all_ctx->log_manager);
pkger *manager = init_pkginstaller();
printf("SYS:installing\n");
inter_in_log("SYS:installing\n",all_ctx->log_manager);
manager->packup(manager);
return 1;
case RUN:
printf("SYS:runing\n");
inter_in_log("SYS:running\n",all_ctx->log_manager);
return 1;
case QUIT:
printf("SYS:shuting down\n");
inter_in_log("SYS:shuting down\n",all_ctx->log_manager);
all_ctx->statue = -1;
write(all_ctx->fifofd[1],"q",1);
return 1;

View File

@ -6,6 +6,8 @@
#define SIG_MOD 0
#define FILE_MOD 1
#include "tools/log/log.h"
typedef struct
{
char name[256];
@ -38,11 +40,12 @@ typedef struct ctx
char command[MAX_BUF];//当前行缓存
int statue;//当前状态
int fifofd[2];
log_manager *log_manager;
}ctx;//上下文管理
int interpret(int mod, ctx *all_ctx,Cmd *cmd_dic);
int init_interpreter(Cmd *cmd_dic,ctx *self,int fifo[2]);
int init_interpreter(Cmd *cmd_dic,ctx *self,int fifo[2],log_manager *log_manager);
#define ARG_LENGTH 256