Example #1
0
int main(int argc, char **argv)
{
        riemann_message_t msg = RIEMANN_MSG_INIT;
        riemann_message_t *resp; 
        riemann_query_t qry = RIEMANN_QUERY_INIT;
        riemann_client_t cli = RIEMANN_CLIENT_INIT;
        int i;

        if (argc != 3) {
                fprintf(stderr, "%s <IP> <PORT>\n", argv[0]);
                exit(EXIT_FAILURE);
        }

        riemann_query_set_string(&qry, "true");
        riemann_message_set_query(&msg, &qry);

        riemann_client_connect(&cli, TCP, argv[1], atoi(argv[2]));
        riemann_client_send_message(&cli, &msg, 0, NULL);
        resp = riemann_client_recv_message(&cli, 0, NULL);

        if (!resp->ok) {
                fprintf(stderr, "Message error %s\n", resp->error);
                exit(EXIT_FAILURE);
        } else {
                puts("Sucess");
        }

        for (i = 0; i < resp->n_events; i++) 
                puts(resp->events[i]->service);

        riemann_message_free(resp); /* responses should be freed */
        riemann_client_free(&cli);        
        return 0;
}
Example #2
0
/**
 * Function to send messages to riemann.
 *
 * Acquires the host lock, disconnects on errors.
 */
static int wrr_send_nolock(struct riemann_host *host,
                           riemann_message_t *msg) /* {{{ */
{
  int status = 0;

  status = wrr_connect(host);
  if (status != 0) {
    return status;
  }

  status = riemann_client_send_message(host->client, msg);
  if (status != 0) {
    wrr_disconnect(host);
    return status;
  }

  /*
   * For TCP we need to receive message acknowledgemenent.
   */
  if (host->client_type != RIEMANN_CLIENT_UDP) {
    riemann_message_t *response;

    response = riemann_client_recv_message(host->client);

    if (response == NULL) {
      wrr_disconnect(host);
      return errno;
    }
    riemann_message_free(response);
  }

  return 0;
} /* }}} int wrr_send */
Example #3
0
END_TEST

START_TEST (test_riemann_simple_query)
{
  riemann_client_t *client;
  riemann_message_t *response;

  ck_assert (riemann_query (NULL, "service = \"test-simple\"") == NULL);
  ck_assert_errno (-errno, ENOTCONN);

  client = riemann_client_create (RIEMANN_CLIENT_TCP, "127.0.0.1", 5555);

  riemann_send (client,
                RIEMANN_EVENT_FIELD_SERVICE, "test-simple",
                RIEMANN_EVENT_FIELD_STATE, "ok",
                RIEMANN_EVENT_FIELD_NONE);

  response = riemann_query (client, "service = \"test-simple\"");

  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);

  riemann_message_free (response);
  riemann_client_free (client);
}
Example #4
0
int
riemann_client_send_message_oneshot (riemann_client_t *client,
                                     riemann_message_t *message)
{
  int ret = 0;

  ret = riemann_client_send_message (client, message);
  riemann_message_free (message);

  return ret;
}
Example #5
0
END_TEST

START_TEST (test_riemann_simple_communicate_event)
{
  riemann_client_t *client;
  riemann_message_t *response;

  client = riemann_client_create (RIEMANN_CLIENT_TCP, "127.0.0.1", 5555);
  response = riemann_communicate_event
    (client,
     RIEMANN_EVENT_FIELD_HOST, "localhost",
     RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate_event",
     RIEMANN_EVENT_FIELD_STATE, "ok",
     RIEMANN_EVENT_FIELD_NONE);
  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);
  ck_assert_int_eq (response->n_events, 0);
  riemann_message_free (response);

  response = riemann_communicate_event
    (client,
     256,
     RIEMANN_EVENT_FIELD_NONE);
  ck_assert (response == NULL);
  ck_assert_errno (-errno, EPROTO);

  riemann_send
    (client,
     RIEMANN_EVENT_FIELD_HOST, "localhost",
     RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate_event",
     RIEMANN_EVENT_FIELD_STATE, "ok",
     RIEMANN_EVENT_FIELD_NONE);

  response = riemann_communicate_event (client, RIEMANN_EVENT_FIELD_NONE);
  ck_assert (response != NULL);
  ck_assert (response->has_ok == 1);
  ck_assert (response->ok == 1);
  riemann_message_free (response);

  riemann_client_free (client);
}
Example #6
0
static riemann_message_t *
wrr_value_list_to_message(struct riemann_host const *host, /* {{{ */
                          data_set_t const *ds, value_list_t const *vl,
                          int *statuses) {
  riemann_message_t *msg;
  size_t i;
  gauge_t *rates = NULL;

  /* Initialize the Msg structure. */
  msg = riemann_message_new();
  if (msg == NULL) {
    ERROR("write_riemann plugin: riemann_message_new failed.");
    return NULL;
  }

  if (host->store_rates) {
    rates = uc_get_rate(ds, vl);
    if (rates == NULL) {
      ERROR("write_riemann plugin: uc_get_rate failed.");
      riemann_message_free(msg);
      return NULL;
    }
  }

  for (i = 0; i < vl->values_len; i++) {
    riemann_event_t *event;

    event = wrr_value_to_event(host, ds, vl, (int)i, rates, statuses[i]);
    if (event == NULL) {
      riemann_message_free(msg);
      sfree(rates);
      return NULL;
    }
    riemann_message_append_events(msg, event, NULL);
  }

  sfree(rates);
  return msg;
} /* }}} riemann_message_t *wrr_value_list_to_message */
Example #7
0
/*
 * Always call while holding host->lock !
 */
static int wrr_batch_flush_nolock(cdtime_t timeout, struct riemann_host *host) {
  cdtime_t now;
  int status = 0;

  now = cdtime();
  if (timeout > 0) {
    if ((host->batch_init + timeout) > now) {
      return status;
    }
  }
  wrr_send_nolock(host, host->batch_msg);
  riemann_message_free(host->batch_msg);

  host->batch_init = now;
  host->batch_msg = NULL;
  return status;
}
Example #8
0
int main(int argc, char **argv)
{
        riemann_message_t msg = RIEMANN_MSG_INIT;
        riemann_message_t *resp; 
        riemann_query_t qry = RIEMANN_QUERY_INIT;
        riemann_client_t cli;
        int i;
        int error;

        if (argc != 4) {
                fprintf(stderr, "%s <IP> <PORT> <FMT>\n", argv[0]);
                exit(EXIT_FAILURE);
        }

        riemann_query_set_string(&qry, "true");
        riemann_message_set_query(&msg, &qry);

        riemann_client_init(&cli);
        riemann_client_connect(&cli, RIEMANN_TCP, argv[1], atoi(argv[2]));
        riemann_client_send_message(&cli, &msg, 0, NULL);
        resp = riemann_client_recv_message(&cli, 0, NULL);

        if (!resp->ok) {
                fprintf(stderr, "Message error %s\n", resp->error);
                exit(EXIT_FAILURE);
        } else {
                puts("Sucess");
        }

        for (i = 0; i < resp->n_events; i++) {
                error = riemann_event_strfevent(buffer, BUFSIZ, argv[3], resp->events[i]);
                if (error) {
                        fprintf(stderr, "riemann_event_strfevent() error\n");
                        exit(EXIT_FAILURE);
                }
                puts(buffer);
        }

        riemann_message_free(resp); /* responses should be freed */
        riemann_client_free(&cli);        
        return 0;
}
Example #9
0
END_TEST

START_TEST (test_riemann_simple_communicate_query)
{
  riemann_client_t *client;
  riemann_message_t *response;

  client = riemann_client_create (RIEMANN_CLIENT_TCP, "127.0.0.1", 5555);
  response = riemann_communicate_query (client, "true");
  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);
  ck_assert (response->n_events > 0);
  riemann_message_free (response);
  riemann_client_disconnect (client);

  client = riemann_client_create (RIEMANN_CLIENT_UDP, "127.0.0.1", 5555);
  response = riemann_communicate_query (client, "true");
  ck_assert (response == NULL);
  ck_assert_errno (-errno, ENOTSUP);
  riemann_client_disconnect (client);

  riemann_client_free (client);
}
Example #10
0
int main(int argc, char **argv)
{
    riemann_message_t msg = RIEMANN_MSG_INIT;
    riemann_message_t *resp = NULL;
    size_t n_events = STATIC_ARRAY_SIZE(cpus);
    riemann_event_t *events[n_events]; /* using stack space */
    size_t n_attrs = STATIC_ARRAY_SIZE(attrs);

    int i;
    int error;
    riemann_client_t cli;

    if (argc != 3) {
        fprintf(stderr, "%s <IP> <PORT>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    for (i = 0; i < n_events; i++) {
        events[i] = alloca(sizeof (riemann_event_t));
        riemann_event_init(events[i]);
        riemann_event_set_host(events[i], "gentoo-x86");
        riemann_event_set_service(events[i], cpus[i]);
        riemann_event_set_metric_f(events[i], 100); /* 100% idle */
        riemann_event_set_state(events[i], "ok");
        riemann_event_set_tags(events[i], tags, STATIC_ARRAY_SIZE(tags));
        riemann_event_set_attributes(events[i], attrs, STATIC_ARRAY_SIZE(attrs));
    }

    riemann_message_set_events(&msg, events, n_events);
    error = riemann_client_init(&cli);
    if (error) {
        fprintf(stderr, "Can't initialize client: strerror(%s)\n", strerror(errno));
        exit(EXIT_FAILURE);
    }

    error = riemann_client_connect(&cli, TCP, argv[1], atoi(argv[2])); /* functions that returns ints returns 0 on success */
    if (error) {
        fprintf(stderr, "Can't connectd: strerror(%s) gai_strerrror(%s)\n", strerror(errno), gai_strerror(error));
        exit(EXIT_FAILURE);
    }

    error = riemann_client_send_message(&cli, &msg, 0, NULL);
    if (error) {
        fprintf(stderr, "Can't send message: %s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }

    resp = riemann_client_recv_message(&cli, 0, NULL); /* functions that returns pointers rertuns NULL on failure */
    assert(resp);

    if (!resp->ok) {
        fprintf(stderr, "Message error %s\n", resp->error);
        exit(EXIT_FAILURE);
    } else {
        puts("Sucess");
    }

    for (i = 0; i < n_events; i++) /* freeing events fields */
        riemann_event_free(events[i]); /* Since events are on
                                                * stack the may not be
                                                * freed. */

    riemann_message_free(resp); /* responses should be freed */
    riemann_client_free(&cli);

    return 0;
}
Example #11
0
END_TEST

START_TEST (test_riemann_simple_communicate)
{
  riemann_client_t *client, *dummy_client;
  riemann_message_t *message, *response;

  client = riemann_client_create (RIEMANN_CLIENT_TCP, "127.0.0.1", 5555);
  message = riemann_message_create_with_events
    (riemann_event_create (RIEMANN_EVENT_FIELD_HOST, "localhost",
                           RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate",
                           RIEMANN_EVENT_FIELD_STATE, "ok",
                           RIEMANN_EVENT_FIELD_NONE),
     NULL);

  ck_assert (riemann_communicate (NULL, NULL) == NULL);
  ck_assert_errno (-errno, ENOTCONN);

  ck_assert (riemann_communicate (client, NULL) == NULL);
  ck_assert_errno (-errno, EINVAL);

  ck_assert (riemann_communicate (NULL, message) == NULL);
  ck_assert_errno (-errno, ENOTCONN);

  message = riemann_message_create_with_events
    (riemann_event_create (RIEMANN_EVENT_FIELD_HOST, "localhost",
                           RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate",
                           RIEMANN_EVENT_FIELD_STATE, "ok",
                           RIEMANN_EVENT_FIELD_NONE),
     NULL);
  dummy_client = riemann_client_new ();
  ck_assert (riemann_communicate (dummy_client, message) == NULL);
  ck_assert_errno (-errno, ENOTCONN);
  riemann_client_free (dummy_client);

  message = riemann_message_create_with_events
    (riemann_event_create (RIEMANN_EVENT_FIELD_HOST, "localhost",
                           RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate",
                           RIEMANN_EVENT_FIELD_STATE, "ok",
                           RIEMANN_EVENT_FIELD_NONE),
     NULL);
  response = riemann_communicate (client, message);
  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);
  riemann_message_free (response);

  response = riemann_communicate
    (client,
     riemann_message_create_with_query
     (riemann_query_new ("true")));
  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);
  ck_assert (response->n_events > 0);
  riemann_message_free (response);

  riemann_client_disconnect (client);
  riemann_client_connect (client, RIEMANN_CLIENT_UDP, "127.0.0.1", 5555);
  message = riemann_message_create_with_events
    (riemann_event_create (RIEMANN_EVENT_FIELD_HOST, "localhost",
                           RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate",
                           RIEMANN_EVENT_FIELD_STATE, "ok",
                           RIEMANN_EVENT_FIELD_NONE),
     NULL);
  response = riemann_communicate (client, message);
  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);
  riemann_message_free (response);
  riemann_client_disconnect (client);

  riemann_client_connect (client, RIEMANN_CLIENT_TCP, "127.0.0.1", 5555);
  message = riemann_message_create_with_events
    (riemann_event_create (RIEMANN_EVENT_FIELD_HOST, "localhost",
                           RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate #2",
                           RIEMANN_EVENT_FIELD_STATE, "ok",
                           RIEMANN_EVENT_FIELD_NONE),
     NULL);
  riemann_message_set_query (message,
                             riemann_query_new ("true"));

  response = riemann_communicate (client, message);
  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);
  ck_assert (response->n_events > 0);
  riemann_message_free (response);
  riemann_client_disconnect (client);

  riemann_client_connect (client, RIEMANN_CLIENT_UDP, "127.0.0.1", 5555);
  message = riemann_message_create_with_events
    (riemann_event_create (RIEMANN_EVENT_FIELD_HOST, "localhost",
                           RIEMANN_EVENT_FIELD_SERVICE, "test_riemann_simple_communicate #2",
                           RIEMANN_EVENT_FIELD_STATE, "ok",
                           RIEMANN_EVENT_FIELD_NONE),
     NULL);
  riemann_message_set_query (message,
                             riemann_query_new ("true"));

  response = riemann_communicate (client, message);
  ck_assert (response != NULL);
  ck_assert_int_eq (response->ok, 1);
  ck_assert (response->n_events == 0);
  riemann_message_free (response);
  riemann_client_disconnect (client);

  riemann_client_free (client);
}
Example #12
0
int main(int argc, char** argv){
  int r;
  char* end;
  sd_journal *j;
  riemann_client_t *c;
  riemann_message_t *req, *res;
  riemann_event_t *event;
  int after_wait = 0;

  r = sd_journal_open(&j, 0);
  assert(r == 0);
  
  if(argc != 3 && argc != 6){
    fprintf(stderr,"usage: journal2riemann <host> <port> [<ca-file> <cert-file> <key-file>]\n"); 
    fprintf(stderr,"example: journal2riemann 127.0.0.1 5555\n"); 
    exit(1);
  }
  long port = strtol(argv[2],&end,10);
  if(argc >= 6){
    c = riemann_client_create (
        RIEMANN_CLIENT_TLS, argv[1], port,
        RIEMANN_CLIENT_OPTION_TLS_CA_FILE, argv[3],
        RIEMANN_CLIENT_OPTION_TLS_CERT_FILE, argv[4],
        RIEMANN_CLIENT_OPTION_TLS_KEY_FILE, argv[5],
        RIEMANN_CLIENT_OPTION_TLS_HANDSHAKE_TIMEOUT, 10000,
        RIEMANN_CLIENT_OPTION_NONE);
  }else{
    c = riemann_client_create (RIEMANN_CLIENT_TCP, argv[1], port);
  }

  r = sd_journal_seek_tail(j);
  assert(r == 0);
  for (;;)  {
    const void *field; size_t len;
    r = sd_journal_next(j); assert (r >= 0);
    if (r == 0) { // if no more log available, wait for new ones
      r = sd_journal_wait(j, (uint64_t) -1); 
      assert (r >= 0); 
      after_wait = 1;
      continue; 
    }
    else if (!after_wait){ // skip all logs before the first wait
      continue; 
    }
    
    event = riemann_event_create(RIEMANN_EVENT_FIELD_NONE);
    strncpy(servicename,"journal",8);

    SD_JOURNAL_FOREACH_DATA(j, field, len){
      char* attr = ""; enum RiemannType type; void* val;

      int matched = NOMATCH;
      MATCH(F,RIEMANN_EVENT_FIELD_DESCRIPTION      , STRING             , "MESSAGE=")
      MATCH(A,"message_id"                         , STRING             , "MESSAGE_ID=")
      MATCH(F,RIEMANN_EVENT_FIELD_STATE            , STATE              , "PRIORITY=")
      MATCH(F,MATCHNOTHING                         , STRING             , "CODE_FILE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "CODE_LINE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "CODE_FUNC=")
      MATCH(F,MATCHNOTHING                         , STRING             , "ERRNO=")
      MATCH(F,MATCHNOTHING                         , STRING             , "SYSLOG_FACILITY=")
      MATCH(F,MATCHNOTHING                         , STRING             , "SYSLOG_IDENTIFIER=")
      MATCH(F,MATCHNOTHING                         , STRING             , "SYSLOG_PID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_PID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_UID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_GID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_COMM=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_EXE=")
      MATCH(A,"command_line"                       , STRING             , "_CMDLINE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_CAP_EFFECTIVE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_AUDIT_SESSION=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_AUDIT_LOGINUID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_SYSTEMD_CGROUP=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_SYSTEMD_SESSION=")
      MATCH(F,SERVICEPART                          , STRING             , "_SYSTEMD_UNIT=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_SYSTEMD_USER_UNIT=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_SYSTEMD_OWNER_UID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_SYSTEMD_SLICE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_SELINUX_CONTEXT=")
      MATCH(F,RIEMANN_EVENT_FIELD_TIME             , TIME               , "_SOURCE_REALTIME_TIMESTAMP=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_BOOT_ID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_MACHINE_ID=")
      MATCH(F,RIEMANN_EVENT_FIELD_HOST             , STRING             , "_HOSTNAME=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_TRANSPORT=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_KERNEL_DEVICE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_KERNEL_SUBSYSTEM=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_UDEV_SYSNAME=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_UDEV_DEVNODE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "_UDEV_DEVLINK=")
      MATCH(F,MATCHNOTHING                         , STRING             , "COREDUMP_UNIT=")
      MATCH(F,MATCHNOTHING                         , STRING             , "COREDUMP_USER_UNIT=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_UID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_GID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_COMM=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_EXE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_CMDLINE=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_AUDIT_SESSION=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_AUDIT_LOGINUID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_SYSTEMD_CGROUP=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_SYSTEMD_SESSION=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_SYSTEMD_OWNER_UID=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_SYSTEMD_UNIT=")
      MATCH(F,MATCHNOTHING                         , STRING             , "OBJECT_SYSTEMD_USER_UNIT=")
      MATCH(F,MATCHNOTHING                         , STRING             , "__CURSOR=")
      MATCH(F,MATCHNOTHING                         , STRING             , "__REALTIME_TIMESTAMP=")
      MATCH(F,MATCHNOTHING                         , STRING             , "__MONOTONIC_TIMESTAMP=") 
      
      if(matched != MATCHNOTHING && matched != NOMATCH){
        memcpy(valuebuf,field,len); *(valuebuf+len) = 0;
        switch(type){
          case STATE:
            val = (void*) states[atoi(valuebuf)];
            break;
          case TIME:
            *(valuebuf+len-6) = 0;
            long t = strtol(valuebuf,&end,10);
            val = (int64_t) t;
            break;
          default:
            val = (void*) valuebuf;      
        }
        
        switch(matched){
          case ATTRIBUTE:
            riemann_event_string_attribute_add(event,attr,valuebuf); break;
          case TAG:
            riemann_event_tag_add(event,valuebuf); break;
          case SERVICEPART: 
            if(len > 0){
              strncat(servicename," ",2);
              strncat(servicename,valuebuf,len+1);
            }
            break;
          default:
            riemann_event_set(event,matched,val,RIEMANN_EVENT_FIELD_NONE);
        }
      }
    } 
    riemann_event_set(event,RIEMANN_EVENT_FIELD_SERVICE,servicename,RIEMANN_EVENT_FIELD_NONE);
    req = riemann_message_create_with_events(event, NULL);
    res = riemann_communicate(c, req);
    if (!res)
    {
      fprintf (stderr, "Error communicating with Riemann: %s\n",
               strerror (errno));
      exit (1);
    }

    if (res->error)
    {
      fprintf (stderr, "Error communicating with Riemann: %s\n",
               res->error);
      exit (1);
    }

    if (res->has_ok && !res->ok)
    {
      fprintf (stderr, "Error communicating with Riemann: %s\n",
               strerror (errno));
      exit (1);
    }
    riemann_message_free(res); 
  }