Print this page
OS-1840 fmdump shall emit JSON
Reviewed by: Robert Mustacchi <rm@joyent.com>
*** 20,29 ****
--- 20,30 ----
*/
/*
* Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2012 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2013, Joyent, Inc. All rights reserved.
*/
#include <alloca.h>
#include <unistd.h>
#include <limits.h>
*** 191,201 ****
"\t-f follow growth of log file by waiting for additional data\n "
"Output options:\n"
"\t-m display human-readable messages (only for fault logs)\n"
"\t-v set verbose mode: display additional event detail\n"
"\t-V set very verbose mode: display complete event contents\n"
! "\t-p Used with -V: apply some output prettification\n "
"Selection filters:\n"
"\t-c select events that match the specified class\n"
"\t-t select events that occurred after the specified time\n"
"\t-T select events that occurred before the specified time\n"
"\t-u select events that match the specified diagnosis uuid\n"
--- 192,203 ----
"\t-f follow growth of log file by waiting for additional data\n "
"Output options:\n"
"\t-m display human-readable messages (only for fault logs)\n"
"\t-v set verbose mode: display additional event detail\n"
"\t-V set very verbose mode: display complete event contents\n"
! "\t-p Used with -V: apply some output prettification\n"
! "\t-j Used with -V: emit JSON-formatted output\n "
"Selection filters:\n"
"\t-c select events that match the specified class\n"
"\t-t select events that occurred after the specified time\n"
"\t-T select events that occurred before the specified time\n"
"\t-u select events that match the specified diagnosis uuid\n"
*** 1025,1035 ****
static int
aggregate(char **ifiles, int n_ifiles, int opt_f,
fmd_log_filter_t *fv, uint_t fc,
! int opt_v, int opt_V, int opt_p)
{
struct fmdump_pipeline *pipeline, *pl;
struct fmdump_srlzer srlzer;
uint32_t npipe;
int fmt;
--- 1027,1037 ----
static int
aggregate(char **ifiles, int n_ifiles, int opt_f,
fmd_log_filter_t *fv, uint_t fc,
! int opt_v, int opt_V, int opt_p, int opt_j)
{
struct fmdump_pipeline *pipeline, *pl;
struct fmdump_srlzer srlzer;
uint32_t npipe;
int fmt;
*** 1072,1082 ****
pipeline[npipe++].pl_logpath = logpath;
}
}
if (opt_V)
! fmt = opt_p ? FMDUMP_PRETTY : FMDUMP_VERB2;
else if (opt_v)
fmt = FMDUMP_VERB1;
else
fmt = FMDUMP_SHORT;
--- 1074,1085 ----
pipeline[npipe++].pl_logpath = logpath;
}
}
if (opt_V)
! fmt = opt_p ? FMDUMP_PRETTY : opt_j ? FMDUMP_JSON :
! FMDUMP_VERB2;
else if (opt_v)
fmt = FMDUMP_VERB1;
else
fmt = FMDUMP_SHORT;
*** 1150,1160 ****
int
main(int argc, char *argv[])
{
int opt_a = 0, opt_e = 0, opt_f = 0, opt_H = 0, opt_m = 0, opt_p = 0;
! int opt_u = 0, opt_v = 0, opt_V = 0;
int opt_i = 0, opt_I = 0;
int opt_A = 0;
char **ifiles = NULL;
char *ifile = NULL;
int n_ifiles;
--- 1153,1163 ----
int
main(int argc, char *argv[])
{
int opt_a = 0, opt_e = 0, opt_f = 0, opt_H = 0, opt_m = 0, opt_p = 0;
! int opt_u = 0, opt_v = 0, opt_V = 0, opt_j = 0;
int opt_i = 0, opt_I = 0;
int opt_A = 0;
char **ifiles = NULL;
char *ifile = NULL;
int n_ifiles;
*** 1185,1195 ****
fltfv = alloca(sizeof (fmd_log_filter_t) * argc);
allfv = alloca(sizeof (fmd_log_filter_t) * argc);
while (optind < argc) {
while ((c =
! getopt(argc, argv, "Aac:efHiImn:O:pR:t:T:u:vV")) != EOF) {
switch (c) {
case 'A':
opt_A++;
break;
case 'a':
--- 1188,1198 ----
fltfv = alloca(sizeof (fmd_log_filter_t) * argc);
allfv = alloca(sizeof (fmd_log_filter_t) * argc);
while (optind < argc) {
while ((c =
! getopt(argc, argv, "Aac:efHiIjmn:O:pR:t:T:u:vV")) != EOF) {
switch (c) {
case 'A':
opt_A++;
break;
case 'a':
*** 1219,1236 ****
--- 1222,1246 ----
case 'I':
if (opt_e || opt_i)
return (usage(stderr));
opt_I++;
break;
+ case 'j':
+ if (opt_p)
+ return (usage(stderr));
+ opt_j++;
+ break;
case 'm':
opt_m++;
break;
case 'O':
off = strtoull(optarg, NULL, 16);
iflags |= FMD_LOG_XITER_OFFS;
break;
case 'p':
+ if (opt_j)
+ return (usage(stderr));
opt_p++;
break;
case 'R':
g_root = optarg;
break;
*** 1307,1317 ****
allfv[allfc++] = fltfv[fltfc++];
}
rc = aggregate(ifiles, n_ifiles, opt_f,
allfv, allfc,
! opt_v, opt_V, opt_p);
cleanup(ifiles, n_ifiles);
return (rc);
} else {
if (ifiles == NULL) {
--- 1317,1327 ----
allfv[allfc++] = fltfv[fltfc++];
}
rc = aggregate(ifiles, n_ifiles, opt_f,
allfv, allfc,
! opt_v, opt_V, opt_p, opt_j);
cleanup(ifiles, n_ifiles);
return (rc);
} else {
if (ifiles == NULL) {
*** 1398,1408 ****
allfv[allfc++] = fltfv[fltfc++];
}
if (opt_V) {
arg.da_fmt =
! &ops->do_formats[opt_p ? FMDUMP_PRETTY : FMDUMP_VERB2];
iflags |= FMD_LOG_XITER_REFS;
} else if (opt_v) {
arg.da_fmt = &ops->do_formats[FMDUMP_VERB1];
} else if (opt_m) {
arg.da_fmt = &ops->do_formats[FMDUMP_MSG];
--- 1408,1419 ----
allfv[allfc++] = fltfv[fltfc++];
}
if (opt_V) {
arg.da_fmt =
! &ops->do_formats[opt_p ? FMDUMP_PRETTY :
! opt_j ? FMDUMP_JSON : FMDUMP_VERB2];
iflags |= FMD_LOG_XITER_REFS;
} else if (opt_v) {
arg.da_fmt = &ops->do_formats[FMDUMP_VERB1];
} else if (opt_m) {
arg.da_fmt = &ops->do_formats[FMDUMP_MSG];