int ee_addField_JSON(struct ee_field *field, es_str_t **str) { int r; struct ee_valnode *valnode; assert(field != NULL);assert(field->objID== ObjID_FIELD); assert(str != NULL); assert(*str != NULL); #ifdef NO_EMPTY_FIELDS if(field->nVals == 0) { r = 1; goto done; } else if(field->nVals == 1 && es_strlen(field->val->val.str) == 0) { r = 1; goto done; } #endif CHKR(es_addChar(str, '\"')); CHKR(es_addStr(str, field->name)); if(ee_ctxIsEncUltraCompact(field->ctx)) { CHKR(es_addBuf(str, "\":", 2)); } else { CHKR(es_addBuf(str, "\": ", 3)); } if(field->nVals == 0) { if(ee_ctxIsEncUltraCompact(field->ctx)) { CHKR(es_addChar(str, '\"')); } else { CHKR(es_addBuf(str, "\"\"", 2)); } } else if(field->nVals == 1) { CHKR(ee_addValue_JSON(field->val, str)); } else { /* we have multiple values --> array */ CHKR(es_addChar(str, '[')); CHKR(ee_addValue_JSON(field->val, str)); for(valnode = field->valroot ; valnode != NULL ; valnode = valnode->next) { CHKR(es_addChar(str, ',')); CHKR(ee_addValue_JSON(valnode->val, str)); } CHKR(es_addChar(str, ']')); } r = 0; done: return r; }
/** * recursive handler for DOT graph generator. */ static void ln_genDotPTreeGraphRec(struct ln_ptree *tree, es_str_t **str) { int i; ln_fieldList_t *node; dotAddPtr(str, tree); es_addBufConstcstr(str, " [label=\""); if(tree->lenPrefix > 0) { es_addChar(str, '\''); es_addBuf(str, (char*) prefixBase(tree), tree->lenPrefix); es_addChar(str, '\''); } es_addBufConstcstr(str, "\""); if(isLeaf(tree)) { es_addBufConstcstr(str, " style=\"bold\""); } es_addBufConstcstr(str, "]\n"); /* display char subtrees */ for(i = 0 ; i < 256 ; ++i) { if(tree->subtree[i] != NULL) { dotAddPtr(str, tree); es_addBufConstcstr(str, " -> "); dotAddPtr(str, tree->subtree[i]); es_addBufConstcstr(str, " [label=\""); es_addChar(str, (char) i); es_addBufConstcstr(str, "\"]\n"); ln_genDotPTreeGraphRec(tree->subtree[i], str); } } /* display field subtrees */ for(node = tree->froot ; node != NULL ; node = node->next ) { dotAddPtr(str, tree); es_addBufConstcstr(str, " -> "); dotAddPtr(str, node->subtree); es_addBufConstcstr(str, " [label=\""); es_addStr(str, node->name); es_addBufConstcstr(str, "\" style=\"dotted\"]\n"); ln_genDotPTreeGraphRec(node->subtree, str); } }
static inline int ee_addTags_JSON(struct ee_tagbucket *tags, es_str_t **str) { int r = 0; struct ee_tagbucket_listnode *tag; int needComma = 0; CHKR(es_addBuf(str, "\"event.tags\":[", 14)); for(tag = tags->root ; tag != NULL ; tag = tag->next) { if(needComma) es_addChar(str, ','); else needComma = 1; es_addChar(str, '"'); CHKR(es_addStr(str, tag->name)); es_addChar(str, '"'); } es_addChar(str, ']'); done: return r; }