Changeset bce2dd5b1ebb5d3628562c5f487797d4d7da1b46

Show
Ignore:
Timestamp:
03/21/08 21:47:10 (6 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1206136030 +0000
git-parent:

[5833cf713f307ac2d3f46ab5e947c7731731ce16]

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

fix this up to work

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/stratcon.conf

    r5833cf7 rbce2dd5  
    1818      --> 
    1919      <reconnect_initial_interval>1000</reconnect_initial_interval> 
    20       <reconnect_maximum_interval>900000</reconnect_maximum_interval> 
     20      <reconnect_maximum_interval>15000</reconnect_maximum_interval> 
    2121    </config> 
    2222    <sslconfig> 
     
    3030  <database> 
    3131    <dbconfig> 
    32       <host>localhost</host> 
     32      <host>postgres83dev.office.omniti.com</host> 
    3333      <dbname>reconnoiter</dbname> 
    3434      <user>stratcon</user> 
     
    4646                    ( whence,sid, state, availability, 
    4747                     duration, status) 
    48              VALUES ('epoch'::timestamptz + ($2 || ' seconds')::interval, 
    49                      stratcon.generate_sid_from_id($3), $4, $5, $6, $7
     48             VALUES ('epoch'::timestamptz + ($1 || ' seconds')::interval, 
     49                     stratcon.generate_sid_from_id($2), $3, $4, $5, $6
    5050      ]]></status> 
    5151      <metric_numeric><![CDATA[ 
    5252        INSERT INTO stratcon.loading_dock_metric_numeric_s 
    5353                    (whence, sid, name, value) 
    54              VALUES ( 'epoch'::timestamptz + ($2 || ' seconds')::interval, 
    55                      stratcon.generate_sid_from_id($3), $4, $6
     54             VALUES ( 'epoch'::timestamptz + ($1 || ' seconds')::interval, 
     55                     stratcon.generate_sid_from_id($2), $3, $4
    5656      ]]></metric_numeric> 
    5757      <metric_text><![CDATA[ 
    5858        INSERT INTO stratcon.loading_dock_metric_text_s 
    5959                    ( whence, sid, name,value) 
    60              VALUES ('epoch'::timestamptz + ($2 || ' seconds')::interval, 
    61                      stratcon.generate_sid_from_id($3), $4, $6
     60             VALUES ('epoch'::timestamptz + ($1 || ' seconds')::interval, 
     61                     stratcon.generate_sid_from_id($2), $3, $4
    6262      ]]></metric_text> 
    6363    </statements> 
  • src/stratcon_datastore.c

    rbaa98ed rbce2dd5  
    3939  /* Postgres specific stuff */ 
    4040  int nparams; 
     41  int metric_type; 
    4142  char *paramValues[MAX_PARAMS]; 
    4243  int paramLengths[MAX_PARAMS]; 
     
    5455} conn_q; 
    5556 
    56 void __append(conn_q *q, ds_job_detail *d) { 
     57static void 
     58free_params(ds_job_detail *d) { 
     59  int i; 
     60  for(i=0; i<d->nparams; i++) 
     61    if(d->paramAllocd[i] && d->paramValues[i]) 
     62      free(d->paramValues[i]); 
     63
     64 
     65static void 
     66__append(conn_q *q, ds_job_detail *d) { 
    5767  d->next = NULL; 
    5868  if(!q->head) q->head = q->tail = d; 
     
    6272  } 
    6373} 
    64 void __remove_until(conn_q *q, ds_job_detail *d) { 
     74static void 
     75__remove_until(conn_q *q, ds_job_detail *d) { 
    6576  ds_job_detail *next; 
    6677  while(q->head && q->head != d) { 
     
    121132} while(0) 
    122133 
    123 static void 
    124 free_params(ds_job_detail *d) { 
    125   int i; 
    126   for(i=0; i<d->nparams; i++) 
    127     if(d->paramAllocd[i] && d->paramValues[i]) 
    128       free(d->paramValues[i]); 
    129 } 
    130134execute_outcome_t 
    131135stratcon_datastore_execute(conn_q *cq, struct sockaddr *r, ds_job_detail *d) { 
    132   int i, type; 
     136  int type, len; 
     137  char *token; 
    133138 
    134139  type = d->data[0]; 
     
    139144    char raddr[128]; 
    140145    char *scp, *ecp; 
    141     int fields; 
    142146    if(inet_ntop(rin6->sin6_family, &rin6->sin6_addr, 
    143147                 raddr, sizeof(raddr)) == NULL) 
    144148      raddr[0] = '\0'; 
    145149  
    146     d->paramValues[0] = strdup(raddr); 
    147     d->paramLengths[0] = strlen(raddr); 
    148     d->paramFormats[0] = 0; 
    149     d->paramAllocd[0] = 1; 
    150     d->nparams = 1;  
    151  
     150    scp = d->data; 
     151#define PROCESS_NEXT_FIELD(t,l) do { \ 
     152  if(!*scp) goto bad_row; \ 
     153  ecp = strchr(scp, '\t'); \ 
     154  if(!ecp) goto bad_row; \ 
     155  token = scp; \ 
     156  len = (ecp-scp); \ 
     157  scp = ecp + 1; \ 
     158} while(0) 
     159#define PROCESS_LAST_FIELD(t,l) do { \ 
     160  if(!*scp) ecp = scp; \ 
     161  else { \ 
     162    ecp = scp + strlen(scp); /* Puts us at the '\0' */ \ 
     163    if(*(ecp-1) == '\n') ecp--; /* We back up on letter if we ended in \n */ \ 
     164  } \ 
     165  t = scp; \ 
     166  l = (ecp-scp); \ 
     167} while(0) 
     168 
     169    PROCESS_NEXT_FIELD(token,len); /* Skip the leader, we know what we are */ 
    152170    switch(type) { 
    153171      /* See noit_check_log.c for log description */ 
    154172      case 'C': 
     173        DECLARE_PARAM_STR(raddr, strlen(raddr)); 
     174        PROCESS_NEXT_FIELD(token,len); 
     175        DECLARE_PARAM_STR(token,len); /* timestamp */ 
     176        PROCESS_NEXT_FIELD(token, len); 
     177        DECLARE_PARAM_STR(token,len); /* uuid */ 
     178        PROCESS_NEXT_FIELD(token, len); 
     179        DECLARE_PARAM_STR(token,len); /* target */ 
     180        PROCESS_NEXT_FIELD(token, len); 
     181        DECLARE_PARAM_STR(token,len); /* module */ 
     182        PROCESS_LAST_FIELD(token, len); 
     183        DECLARE_PARAM_STR(token,len); /* name */ 
     184        break; 
    155185      case 'M': 
    156         fields = 6; break; 
     186        PROCESS_NEXT_FIELD(token,len); 
     187        DECLARE_PARAM_STR(token,len); /* timestamp */ 
     188        PROCESS_NEXT_FIELD(token, len); 
     189        DECLARE_PARAM_STR(token,len); /* uuid */ 
     190        PROCESS_NEXT_FIELD(token, len); 
     191        DECLARE_PARAM_STR(token,len); /* name */ 
     192        PROCESS_NEXT_FIELD(token,len); 
     193        d->metric_type = *token; 
     194        PROCESS_LAST_FIELD(token,len); 
     195        DECLARE_PARAM_STR(token,len); /* value */ 
     196        break; 
    157197      case 'S': 
    158         fields = 7; break; 
     198        PROCESS_NEXT_FIELD(token,len); 
     199        DECLARE_PARAM_STR(token,len); /* timestamp */ 
     200        PROCESS_NEXT_FIELD(token, len); 
     201        DECLARE_PARAM_STR(token,len); /* uuid */ 
     202        PROCESS_NEXT_FIELD(token, len); 
     203        DECLARE_PARAM_STR(token,len); /* state */ 
     204        PROCESS_NEXT_FIELD(token, len); 
     205        DECLARE_PARAM_STR(token,len); /* availability */ 
     206        PROCESS_NEXT_FIELD(token, len); 
     207        DECLARE_PARAM_STR(token,len); /* duration */ 
     208        PROCESS_LAST_FIELD(token,len); 
     209        DECLARE_PARAM_STR(token,len); /* status */ 
     210        break; 
    159211      default: 
    160212        goto bad_row; 
    161213    } 
    162214 
    163     scp = d->data; 
    164     for(i=0;i<fields-1;i++) { /* fields-1 b/c the last field is open-ended */ 
    165       if(!*scp) goto bad_row; 
    166       ecp = strchr(scp, '\t'); 
    167       if(!ecp) goto bad_row; 
    168       if(i > 0) /* We skip the type for now */ 
    169         DECLARE_PARAM_STR(scp, ecp-scp); 
    170       scp = ecp + 1; 
    171     } 
    172     /* Now to the last field */ 
    173     if(!*scp) ecp = scp; 
    174     else { 
    175       ecp = scp + strlen(scp); /* Puts us at the '\0' */ 
    176       if(*(ecp-1) == '\n') ecp--; /* We back up on letter if we ended in \n */ 
    177     } 
    178     DECLARE_PARAM_STR(scp, ecp-scp); 
    179215  } 
    180216 
     
    206242      break; 
    207243    case 'M': 
    208       /* The fifth (idx: 4) bind variable is the type */ 
    209       switch(d->paramValues[4][0]) { 
     244      switch(d->metric_type) { 
    210245        case METRIC_INT32: 
    211246        case METRIC_UINT32: