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);
}
Example #2
0
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;
} 
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
} 
Example #6
0
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;
}