mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
libdm: report: postpone printing of JSON starting '{' character till it's needed
This patch moves printing of starting '{' character for JSON output up untili it's known there's any further output following - either the content or ending '}' character. Also, remove unnecessary switch for different report group types and calling individual functions to handle dm_report_group_create as that code is shared for all existing types at the moment.
This commit is contained in:
parent
9c21139284
commit
d86caf952e
@ -4674,6 +4674,14 @@ static struct report_group_item *_get_topmost_report_group_item(struct dm_report
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _json_output_start(struct dm_report_group *group)
|
||||||
|
{
|
||||||
|
if (!group->indent) {
|
||||||
|
log_print(JSON_OBJECT_START);
|
||||||
|
group->indent += JSON_INDENT_UNIT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int _json_output_array_start(struct dm_pool *mem, struct report_group_item *item)
|
static int _json_output_array_start(struct dm_pool *mem, struct report_group_item *item)
|
||||||
{
|
{
|
||||||
const char *name = (const char *) item->data;
|
const char *name = (const char *) item->data;
|
||||||
@ -4713,6 +4721,8 @@ bad:
|
|||||||
|
|
||||||
static int _prepare_json_report_output(struct dm_report *rh)
|
static int _prepare_json_report_output(struct dm_report *rh)
|
||||||
{
|
{
|
||||||
|
_json_output_start(rh->group_item->group);
|
||||||
|
|
||||||
if (rh->group_item->output_done && dm_list_empty(&rh->rows))
|
if (rh->group_item->output_done && dm_list_empty(&rh->rows))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -4795,23 +4805,6 @@ void dm_report_destroy_rows(struct dm_report *rh)
|
|||||||
_destroy_rows(rh);
|
_destroy_rows(rh);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _report_group_create_single(struct dm_report_group *group)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int _report_group_create_basic(struct dm_report_group *group)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int _report_group_create_json(struct dm_report_group *group)
|
|
||||||
{
|
|
||||||
log_print(JSON_OBJECT_START);
|
|
||||||
group->indent += JSON_INDENT_UNIT;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct dm_report_group *dm_report_group_create(dm_report_group_type_t type, void *data)
|
struct dm_report_group *dm_report_group_create(dm_report_group_type_t type, void *data)
|
||||||
{
|
{
|
||||||
struct dm_report_group *group;
|
struct dm_report_group *group;
|
||||||
@ -4839,23 +4832,6 @@ struct dm_report_group *dm_report_group_create(dm_report_group_type_t type, void
|
|||||||
|
|
||||||
dm_list_add_h(&group->items, &item->list);
|
dm_list_add_h(&group->items, &item->list);
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case DM_REPORT_GROUP_SINGLE:
|
|
||||||
if (!_report_group_create_single(group))
|
|
||||||
goto_bad;
|
|
||||||
break;
|
|
||||||
case DM_REPORT_GROUP_BASIC:
|
|
||||||
if (!_report_group_create_basic(group))
|
|
||||||
goto_bad;
|
|
||||||
break;
|
|
||||||
case DM_REPORT_GROUP_JSON:
|
|
||||||
if (!_report_group_create_json(group))
|
|
||||||
goto_bad;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto_bad;
|
|
||||||
}
|
|
||||||
|
|
||||||
return group;
|
return group;
|
||||||
bad:
|
bad:
|
||||||
dm_pool_destroy(mem);
|
dm_pool_destroy(mem);
|
||||||
@ -4907,6 +4883,7 @@ static int _report_group_push_json(struct report_group_item *item, const char *n
|
|||||||
DM_REPORT_OUTPUT_COLUMNS_AS_ROWS);
|
DM_REPORT_OUTPUT_COLUMNS_AS_ROWS);
|
||||||
item->report->flags |= DM_REPORT_OUTPUT_BUFFERED;
|
item->report->flags |= DM_REPORT_OUTPUT_BUFFERED;
|
||||||
} else {
|
} else {
|
||||||
|
_json_output_start(item->group);
|
||||||
if (name) {
|
if (name) {
|
||||||
if (!_json_output_array_start(item->group->mem, item))
|
if (!_json_output_array_start(item->group->mem, item))
|
||||||
return_0;
|
return_0;
|
||||||
@ -5061,8 +5038,9 @@ static int _report_group_destroy_basic(void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _report_group_destroy_json(void)
|
static int _report_group_destroy_json(struct dm_report_group *group)
|
||||||
{
|
{
|
||||||
|
_json_output_start(group);
|
||||||
log_print(JSON_OBJECT_END);
|
log_print(JSON_OBJECT_END);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -5092,7 +5070,7 @@ int dm_report_group_destroy(struct dm_report_group *group)
|
|||||||
goto_out;
|
goto_out;
|
||||||
break;
|
break;
|
||||||
case DM_REPORT_GROUP_JSON:
|
case DM_REPORT_GROUP_JSON:
|
||||||
if (!_report_group_destroy_json())
|
if (!_report_group_destroy_json(group))
|
||||||
goto_out;
|
goto_out;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user