Show
Ignore:
Timestamp:
05/13/09 03:30:23 (10 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1242185423 +0000
git-parent:

[a9077178423e39a94a9b624e44cd4b37899d6fd3]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1242185423 +0000
Message:

variety of stuff. fixing some bugs and adding checks into the data model, refs #122

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/stratcon_iep.c

    ra907717 r24eac7c  
    1111#include "stratcon_jlog_streamer.h" 
    1212#include "stratcon_datastore.h" 
     13#include "stratcon_iep.h" 
    1314#include "noit_conf.h" 
    1415#include "noit_check.h" 
     
    4142struct iep_job_closure { 
    4243  char *line;       /* This is a copy and gets trashed during processing */ 
     44  char *remote; 
    4345  xmlDocPtr doc; 
    4446  char *doc_str; 
     
    4648}; 
    4749 
    48 static void 
    49 stratcon_iep_datastore_onlooker(stratcon_datastore_op_t op, 
    50                                 struct sockaddr *remote, void *operand); 
    5150static void 
    5251start_iep_daemon(); 
     
    7978 
    8079static xmlDocPtr 
    81 stratcon_iep_doc_from_status(char *data) { 
     80stratcon_iep_doc_from_status(char *data, char *remote) { 
    8281  xmlDocPtr doc; 
    8382  char *parts[7]; 
     
    8685  NEWDOC(doc, "NoitStatus", 
    8786         { 
     87           ADDCHILD("remote", remote); 
    8888           ADDCHILD("id", parts[2]); 
    8989           ADDCHILD("state", parts[3]); 
     
    9696 
    9797static xmlDocPtr 
    98 stratcon_iep_doc_from_metric(char *data) { 
     98stratcon_iep_doc_from_check(char *data, char *remote) { 
     99  xmlDocPtr doc; 
     100  char *parts[6]; 
     101  if(bust_to_parts(data, parts, 6) != 6) return NULL; 
     102  /* 'C' TIMESTAMP UUID TARGET MODULE NAME */ 
     103  NEWDOC(doc, "NoitCheck", 
     104         { 
     105           ADDCHILD("remote", remote); 
     106           ADDCHILD("id", parts[2]); 
     107           ADDCHILD("target", parts[3]); 
     108           ADDCHILD("module", parts[4]); 
     109           ADDCHILD("name", parts[5]); 
     110         }); 
     111noitL(noit_error,"Submitting check %s\n", parts[2]); 
     112  return doc; 
     113
     114 
     115static xmlDocPtr 
     116stratcon_iep_doc_from_metric(char *data, char *remote) { 
    99117  xmlDocPtr doc; 
    100118  char *parts[6]; 
     
    110128  NEWDOC(doc, rootname, 
    111129         { 
     130           ADDCHILD("remote", remote); 
    112131           ADDCHILD("id", parts[2]); 
    113132           ADDCHILD("name", parts[3]); 
     
    118137 
    119138static xmlDocPtr 
    120 stratcon_iep_doc_from_query(char *data) { 
     139stratcon_iep_doc_from_query(char *data, char *remote) { 
    121140  xmlDocPtr doc; 
    122141  char *parts[4]; 
     
    134153 
    135154static xmlDocPtr 
    136 stratcon_iep_doc_from_querystop(char *data) { 
     155stratcon_iep_doc_from_querystop(char *data, char *remote) { 
    137156  xmlDocPtr doc; 
    138157  char *parts[2]; 
     
    148167 
    149168static xmlDocPtr 
    150 stratcon_iep_doc_from_line(char *data) { 
     169stratcon_iep_doc_from_line(char *data, char *remote) { 
    151170  if(data) { 
    152171    switch(*data) { 
    153       case 'S': return stratcon_iep_doc_from_status(data); 
    154       case 'M': return stratcon_iep_doc_from_metric(data); 
    155       case 'Q': return stratcon_iep_doc_from_query(data); 
    156       case 'q': return stratcon_iep_doc_from_querystop(data); 
     172      case 'C': return stratcon_iep_doc_from_check(data, remote); 
     173      case 'S': return stratcon_iep_doc_from_status(data, remote); 
     174      case 'M': return stratcon_iep_doc_from_metric(data, remote); 
     175      case 'Q': return stratcon_iep_doc_from_query(data, remote); 
     176      case 'q': return stratcon_iep_doc_from_querystop(data, remote); 
    157177    } 
    158178  } 
     
    215235      query++; 
    216236    } 
    217     stratcon_iep_datastore_onlooker(DS_OP_INSERT, NULL, line); 
     237    stratcon_iep_line_processor(DS_OP_INSERT, NULL, line); 
    218238    free(line); 
    219239  } 
     
    302322     } 
    303323#endif 
     324     stratcon_datastore_iep_check_preload(); 
    304325     stratcon_iep_submit_queries(); 
    305326  } 
     
    320341    if(job) { 
    321342      if(job->line) free(job->line); 
     343      if(job->remote) free(job->remote); 
    322344      if(job->doc_str) free(job->doc_str); 
    323345      if(job->doc) xmlFreeDoc(job->doc); 
     
    332354    return 0; 
    333355  } 
    334   job->doc = stratcon_iep_doc_from_line(job->line); 
     356  job->doc = stratcon_iep_doc_from_line(job->line, job->remote); 
    335357  if(job->doc) { 
    336358    job->doc_str = stratcon__xml_doc_to_str(job->doc); 
     
    392414} 
    393415 
    394 static void 
    395 stratcon_iep_datastore_onlooker(stratcon_datastore_op_t op, 
    396                                 struct sockaddr *remote, void *operand) { 
     416void 
     417stratcon_iep_line_processor(stratcon_datastore_op_t op, 
     418                            struct sockaddr *remote, void *operand) { 
     419  int len; 
     420  char remote_str[128]; 
    397421  struct iep_job_closure *jc; 
    398422  eventer_t newe; 
     
    405429  } 
    406430  if(op != DS_OP_INSERT) return; 
     431 
     432  snprintf(remote_str, sizeof(remote_str), "%s", "0.0.0.0"); 
     433  if(remote) { 
     434    switch(remote->sa_family) { 
     435      case AF_INET: 
     436        len = sizeof(struct sockaddr_in); 
     437        inet_ntop(remote->sa_family, &((struct sockaddr_in *)remote)->sin_addr, 
     438                  remote_str, len); 
     439        break; 
     440      case AF_INET6: 
     441       len = sizeof(struct sockaddr_in6); 
     442        inet_ntop(remote->sa_family, &((struct sockaddr_in6 *)remote)->sin6_addr, 
     443                  remote_str, len); 
     444       break; 
     445      case AF_UNIX: 
     446        len = SUN_LEN(((struct sockaddr_un *)remote)); 
     447        snprintf(remote_str, sizeof(remote_str), "%s", ((struct sockaddr_un *)remote)->sun_path); 
     448        break; 
     449    } 
     450  } 
    407451 
    408452  /* process operand and push onto queue */ 
     
    414458  jc = calloc(1, sizeof(*jc)); 
    415459  jc->line = strdup(operand); 
     460  jc->remote = strdup(remote_str); 
    416461  newe->closure = jc; 
    417462 
     
    435480  ctx = stratcon_jlog_streamer_ctx_alloc(); 
    436481  ctx->jlog_feed_cmd = htonl(NOIT_JLOG_DATA_TEMP_FEED); 
    437   ctx->push = stratcon_iep_datastore_onlooker; 
     482  ctx->push = stratcon_iep_line_processor; 
    438483  return ctx; 
    439484}