mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-09 04:39:34 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user