summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2012-03-30 17:57:15 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2012-03-30 17:57:15 +0200
commit9896cf16b7b799cbd3dc0c6f2a2c25b89a9478bc (patch)
tree2358603c90fdf79111eaf37c05caec6c53f8fcc2
parent2fbac28d3c1335e1283596b4f574fd55d8117fd6 (diff)
downloadrsyslog-9896cf16b7b799cbd3dc0c6f2a2c25b89a9478bc.tar.gz
rsyslog-9896cf16b7b799cbd3dc0c6f2a2c25b89a9478bc.tar.xz
rsyslog-9896cf16b7b799cbd3dc0c6f2a2c25b89a9478bc.zip
ommongodb: extended default schema
includes more syslog-specific fields
-rw-r--r--plugins/ommongodb/ommongodb.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/plugins/ommongodb/ommongodb.c b/plugins/ommongodb/ommongodb.c
index 267f98a1..39e2e4f9 100644
--- a/plugins/ommongodb/ommongodb.c
+++ b/plugins/ommongodb/ommongodb.c
@@ -212,10 +212,12 @@ rsRetVal writeMongoDB_msg(msg_t *pMsg, instanceData *pData)
{
bson *doc = NULL;
uchar *procid; short unsigned procid_free; size_t procid_len;
+ uchar *tag; short unsigned tag_free; size_t tag_len;
uchar *pid; short unsigned pid_free; size_t pid_len;
uchar *sys; short unsigned sys_free; size_t sys_len;
uchar *msg; short unsigned msg_free; size_t msg_len;
- gint64 timestamp;
+ int severity, facil;
+ gint64 ts_gen, ts_rcv; /* timestamps: generated, received */
int secfrac;
DEFiRet;
@@ -225,11 +227,14 @@ rsRetVal writeMongoDB_msg(msg_t *pMsg, instanceData *pData)
}
procid = MsgGetProp(pMsg, NULL, PROP_PROGRAMNAME, NULL, &procid_len, &procid_free);
+ tag = MsgGetProp(pMsg, NULL, PROP_SYSLOGTAG, NULL, &tag_len, &tag_free);
pid = MsgGetProp(pMsg, NULL, PROP_PROCID, NULL, &pid_len, &pid_free);
sys = MsgGetProp(pMsg, NULL, PROP_HOSTNAME, NULL, &sys_len, &sys_free);
msg = MsgGetProp(pMsg, NULL, PROP_MSG, NULL, &msg_len, &msg_free);
- timestamp = (gint64) datetime.syslogTime2time_t(&pMsg->tTIMESTAMP) * 1000; /* ms! */
-dbgprintf("ommongodb: timestamp is %lld\n", (long long) timestamp);
+
+ // TODO: move to datetime? Refactor in any case! rgerhards, 2012-03-30
+ ts_gen = (gint64) datetime.syslogTime2time_t(&pMsg->tTIMESTAMP) * 1000; /* ms! */
+dbgprintf("ommongodb: ts_gen is %lld\n", (long long) ts_gen);
dbgprintf("ommongodb: secfrac is %d, precision %d\n", pMsg->tTIMESTAMP.secfrac, pMsg->tTIMESTAMP.secfracPrecision);
if(pMsg->tTIMESTAMP.secfracPrecision > 3) {
secfrac = pMsg->tTIMESTAMP.secfrac / i10pow(pMsg->tTIMESTAMP.secfracPrecision - 3);
@@ -238,18 +243,35 @@ dbgprintf("ommongodb: secfrac is %d, precision %d\n", pMsg->tTIMESTAMP.secfrac,
} else {
secfrac = pMsg->tTIMESTAMP.secfrac;
}
- timestamp += secfrac;
-dbgprintf("ommongodb: normalized secfrac is %d, final timestamp %lld\n", secfrac, (long long) timestamp);
+ ts_gen += secfrac;
+ ts_rcv = (gint64) datetime.syslogTime2time_t(&pMsg->tRcvdAt) * 1000; /* ms! */
+ if(pMsg->tRcvdAt.secfracPrecision > 3) {
+ secfrac = pMsg->tRcvdAt.secfrac / i10pow(pMsg->tRcvdAt.secfracPrecision - 3);
+ } else if(pMsg->tRcvdAt.secfracPrecision < 3) {
+ secfrac = pMsg->tRcvdAt.secfrac * i10pow(3 - pMsg->tRcvdAt.secfracPrecision);
+ } else {
+ secfrac = pMsg->tRcvdAt.secfrac;
+ }
+ ts_rcv += secfrac;
+
+ /* the following need to be int, but are short, so we need to xlat */
+ severity = pMsg->iSeverity;
+ facil = pMsg->iFacility;
doc = bson_build(BSON_TYPE_STRING, "sys", sys, sys_len,
- BSON_TYPE_UTC_DATETIME, "time", timestamp,
+ BSON_TYPE_UTC_DATETIME, "time", ts_gen,
+ BSON_TYPE_UTC_DATETIME, "time_rcvd", ts_rcv,
BSON_TYPE_STRING, "msg", msg, msg_len,
+ BSON_TYPE_INT32, "syslog_fac", facil,
+ BSON_TYPE_INT32, "syslog_sever", severity,
+ BSON_TYPE_STRING, "syslog_tag", tag, tag_len,
BSON_TYPE_STRING, "procid", procid, procid_len,
BSON_TYPE_STRING, "pid", pid, pid_len,
BSON_TYPE_STRING, "level", getLumberjackLevel(pMsg->iSeverity), -1,
BSON_TYPE_NONE);
if(procid_free) free(procid);
+ if(tag_free) free(tag);
if(pid_free) free(pid);
if(sys_free) free(sys);
if(msg_free) free(msg);