void test_bson_utc_datetime (void) { bson *b; b = bson_new (); ok (bson_append_utc_datetime (b, "date", 1294860709000), "bson_append_utc_datetime() works"); bson_finish (b); cmp_ok (bson_size (b), "==", 19, "BSON UTC datetime element size check"); ok (memcmp (bson_data (b), "\023\000\000\000\011\144\141\164\145\000\210\154\266\173\055" "\001\000\000\000", bson_size (b)) == 0, "BSON UTC datetime element contents check"); bson_free (b); b = bson_new (); ok (bson_append_utc_datetime (b, NULL, 1294860709000) == FALSE, "bson_append_utc_datetime() with a NULL key should fail"); ok (bson_append_utc_datetime (NULL, "date", 1294860709000) == FALSE, "bson_append_utc_datetime() without a BSON object should fail"); bson_finish (b); cmp_ok (bson_size (b), "==", 5, "BSON object should be empty"); ok (bson_append_utc_datetime (b, "date", 1294860709000) == FALSE, "Appending to a finished element should fail"); bson_free (b); }
struct select_doc* create_select() // BSON object indicating the fields to return { struct select_doc *s_doc; s_doc = malloc(sizeof(struct select_doc)); s_doc->select = bson_new (); bson_append_string (s_doc->select, "syslog_tag", "s", -1); bson_append_string (s_doc->select, "msg", "ERROR", -1); bson_append_string (s_doc->select, "sys", "sys", -1); bson_append_utc_datetime (s_doc->select, "time_rcvd", 1ll); bson_finish (s_doc->select); return s_doc; }
bson * test_bson_generate_full (void) { bson *b, *d, *a, *scope; guint8 oid[] = "1234567890ab"; a = bson_new (); bson_append_int32 (a, "0", 32); bson_append_int64 (a, "1", (gint64)-42); bson_finish (a); d = bson_new (); bson_append_string (d, "name", "sub-document", -1); bson_append_int32 (d, "answer", 42); bson_finish (d); scope = bson_new (); bson_append_string (scope, "v", "hello world", -1); bson_finish (scope); b = bson_new (); bson_append_double (b, "double", 3.14); bson_append_string (b, "str", "hello world", -1); bson_append_document (b, "doc", d); bson_append_array (b, "array", a); bson_append_binary (b, "binary0", BSON_BINARY_SUBTYPE_GENERIC, (guint8 *)"foo\0bar", 7); bson_append_oid (b, "_id", oid); bson_append_boolean (b, "TRUE", FALSE); bson_append_utc_datetime (b, "date", 1294860709000); bson_append_timestamp (b, "ts", 1294860709000); bson_append_null (b, "null"); bson_append_regex (b, "foobar", "s/foo.*bar/", "i"); bson_append_javascript (b, "alert", "alert (\"hello world!\");", -1); bson_append_symbol (b, "sex", "Marilyn Monroe", -1); bson_append_javascript_w_scope (b, "print", "alert (v);", -1, scope); bson_append_int32 (b, "int32", 32); bson_append_int64 (b, "int64", (gint64)-42); bson_finish (b); bson_free (d); bson_free (a); bson_free (scope); return b; }
bson * team_warning_bson_unparse(const struct team_warning *tw) { bson *res = bson_new(); long long utc_dt = (long long) tw->date * 1000; bson_append_utc_datetime(res, "date", utc_dt); bson_append_int32(res, "issuer_id", tw->issuer_id); ej_bson_append_ip(res, "issuer_ip", &tw->issuer_ip); if (tw->text) { bson_append_string(res, "text", tw->text, strlen(tw->text)); } if (tw->comment) { bson_append_string(res, "comment", tw->comment, strlen(tw->comment)); } bson_finish(res); return res; }
struct query_doc* create_query(struct queryopt *opt) { struct query_doc *qu_doc; bson *query_what, *order_what, *msg_what, *date_what; struct tm tm; time_t t; gint64 ts; qu_doc = malloc(sizeof(struct query_doc)); qu_doc->query = bson_new (); query_what = bson_new (); if (opt->bsever == 1) { bson_append_int32 (query_what, "syslog_sever", opt->e_sever); } if (opt->blevel == 1) { bson_append_string (query_what, "level", opt->e_level, -1); } if (opt->bmsg == 1) { msg_what = bson_new (); bson_append_string (msg_what, "$regex", opt->e_msg, -1); bson_append_string (msg_what, "$options", "i", -1); bson_finish (msg_what); bson_append_document (query_what, "msg", msg_what); } if (opt->bdate == 1) { date_what = bson_new (); if (opt->bdatef == 1) { tm.tm_isdst = -1; strptime(opt->e_date, "%d/%m/%Y-%H:%M:%S", &tm); tm.tm_hour = tm.tm_hour + 1; t = mktime(&tm); ts = 1000 * (gint64) t; bson_append_utc_datetime (date_what,"$gt", ts) ; } if (opt->bdateu == 1) { tm.tm_isdst = -1; strptime(opt->e_dateu, "%d/%m/%Y-%H:%M:%S", &tm); tm.tm_hour = tm.tm_hour +1; t = mktime(&tm); ts = 1000 * (gint64) t; bson_append_utc_datetime (date_what,"$lt", ts); } bson_finish (date_what); bson_append_document (query_what, "time_rcvd", date_what); } if (opt->bsys == 1) { bson_append_string (query_what, "sys", opt->e_sys, -1); } bson_finish (query_what); order_what = bson_new (); bson_append_utc_datetime (order_what, "time_rcvd", 1ll); bson_finish (order_what); bson_append_document (qu_doc->query, "$query", query_what); bson_append_document (qu_doc->query, "$orderby", order_what); bson_finish (qu_doc->query); bson_free (order_what); return qu_doc; }
static gboolean afmongodb_vp_process_value(const gchar *name, const gchar *prefix, TypeHint type, const gchar *value, gpointer *prefix_data, gpointer user_data) { bson *o; MongoDBDestDriver *self = (MongoDBDestDriver *)user_data; gboolean fallback = self->template_options.on_error & ON_ERROR_FALLBACK_TO_STRING; if (prefix_data) o = (bson *)*prefix_data; else o = self->bson; switch (type) { case TYPE_HINT_BOOLEAN: { gboolean b; if (type_cast_to_boolean (value, &b, NULL)) bson_append_boolean (o, name, b); else { gboolean r = type_cast_drop_helper(self->template_options.on_error, value, "boolean"); if (fallback) bson_append_string (o, name, value, -1); else return r; } break; } case TYPE_HINT_INT32: { gint32 i; if (type_cast_to_int32 (value, &i, NULL)) bson_append_int32 (o, name, i); else { gboolean r = type_cast_drop_helper(self->template_options.on_error, value, "int32"); if (fallback) bson_append_string (o, name, value, -1); else return r; } break; } case TYPE_HINT_INT64: { gint64 i; if (type_cast_to_int64 (value, &i, NULL)) bson_append_int64 (o, name, i); else { gboolean r = type_cast_drop_helper(self->template_options.on_error, value, "int64"); if (fallback) bson_append_string(o, name, value, -1); else return r; } break; } case TYPE_HINT_DATETIME: { guint64 i; if (type_cast_to_datetime_int (value, &i, NULL)) bson_append_utc_datetime (o, name, (gint64)i); else { gboolean r = type_cast_drop_helper(self->template_options.on_error, value, "datetime"); if (fallback) bson_append_string(o, name, value, -1); else return r; } break; } case TYPE_HINT_STRING: case TYPE_HINT_LITERAL: bson_append_string (o, name, value, -1); break; default: return TRUE; } return FALSE; }