tools: acrn-crashlog: refine the log storage

1. remove watching TOMBSTONE in AaaG.
2. add a configurable parameter "foldersize" in MB, sender will drop
   all events when the storaged log size exceeds this parameter.

Tracked-On:#1024
Signed-off-by: Liu, Xinwu <xinwu.liu@intel.com>
Reviewed-by: Chen Gang <gang.c.chen@intel.com>
Acked-by: Zhang Di <di.zhang@intel.com>
This commit is contained in:
Liu, Xinwu
2018-11-08 16:33:37 +08:00
committed by lijinxia
parent 06efc58a7e
commit 3d1332f392
6 changed files with 178 additions and 40 deletions

View File

@@ -124,6 +124,38 @@ static void watchdog_init(int timeout)
}
}
static int check_folder_space(struct sender_t *sender)
{
size_t dsize;
int cfg_size;
if (dir_size(sender->outdir, sender->outdir_len, &dsize) == -1) {
LOGE("failed to check outdir size, drop ev\n");
return -1;
}
if (cfg_atoi(sender->foldersize, sender->foldersize_len,
&cfg_size) == -1)
return -1;
if (dsize/MB >= (size_t)cfg_size) {
if (sender->suspending)
return -1;
LOGW("suspend (%s), since (%s: %ldM) meets quota (%dM)\n",
sender->name, sender->outdir, dsize/MB, cfg_size);
sender->suspending = 1;
return -1;
}
if (!sender->suspending)
return 0;
LOGW("resume (%s), %s: left space %ldM for storage\n",
sender->name, sender->outdir, cfg_size - dsize/MB);
return 0;
}
/**
* Process each event in event queue.
* Note that currently event handler is single threaded.
@@ -157,6 +189,9 @@ static void *event_handle(void *unused __attribute__((unused)))
if (!sender)
continue;
if (check_folder_space(sender) == -1)
continue;
if (sender->send)
sender->send(e);
}

View File

@@ -123,11 +123,14 @@ struct sender_t {
size_t maxlines_len;
const char *spacequota;
size_t spacequota_len;
const char *foldersize;
size_t foldersize_len;
struct uptime_t *uptime;
void (*send)(struct event_t *);
char *log_vmrecordid;
int sw_updated; /* each sender has their own record */
int suspending; /* drop all events while suspending */
};
struct conf_t {

View File

@@ -36,6 +36,7 @@ static void print(void)
print_id_item(maxcrashdirs, sender, id);
print_id_item(maxlines, sender, id);
print_id_item(spacequota, sender, id);
print_id_item(foldersize, sender, id);
if (sender->uptime) {
print_id_item(uptime->name, sender, id);
@@ -678,6 +679,8 @@ static int parse_sender(xmlNodePtr cur, struct sender_t *sender)
res = load_cur_content(cur, sender, maxlines);
else if (name_is(cur, "spacequota"))
res = load_cur_content(cur, sender, spacequota);
else if (name_is(cur, "foldersize"))
res = load_cur_content(cur, sender, foldersize);
else if (name_is(cur, "uptime"))
res = parse_uptime(cur, sender);