Show
Ignore:
Timestamp:
03/02/11 21:16:23 (3 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1299100583 +0000
git-parent:

[bf924d6886edb8393112493c37f2b1132cb1bcfe]

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

implementation of separating status and metrics logging, refs #356

Files:

Legend:

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

    rec0f79b r870413e  
    145145noit_check_log_status(noit_check_t *check) { 
    146146  handle_extra_feeds(check, _noit_check_log_status); 
    147   if(!(check->flags & NP_TRANSIENT)) { 
     147  if(!(check->flags & (NP_TRANSIENT | NP_SUPPRESS_STATUS))) { 
    148148    SETUP_LOG(status, return); 
    149149    _noit_check_log_status(status_log, check); 
    150150  } 
     151} 
     152static int 
     153_noit_check_log_metric(noit_log_stream_t ls, noit_check_t *check, 
     154                       const char *uuid_str, 
     155                       struct timeval *whence, metric_t *m) { 
     156  char our_uuid_str[256*3+37]; 
     157  int srv = 0; 
     158  if(!noit_apply_filterset(check->filterset, check, m)) return 0; 
     159  if(!ls->enabled) return 0; 
     160 
     161  if(!uuid_str) { 
     162    MAKE_CHECK_UUID_STR(our_uuid_str, sizeof(our_uuid_str), metrics_log, check); 
     163    uuid_str = our_uuid_str; 
     164  } 
     165 
     166  if(!m->metric_value.s) { /* they are all null */ 
     167    srv = noit_log(ls, whence, __FILE__, __LINE__, 
     168                   "M\t%lu.%03lu\t%s\t%s\t%c\t[[null]]\n", 
     169                   SECPART(whence), MSECPART(whence), uuid_str, 
     170                   m->metric_name, m->metric_type); 
     171  } 
     172  else { 
     173    switch(m->metric_type) { 
     174      case METRIC_INT32: 
     175        srv = noit_log(ls, whence, __FILE__, __LINE__, 
     176                       "M\t%lu.%03lu\t%s\t%s\t%c\t%d\n", 
     177                       SECPART(whence), MSECPART(whence), uuid_str, 
     178                       m->metric_name, m->metric_type, *(m->metric_value.i)); 
     179        break; 
     180      case METRIC_UINT32: 
     181        srv = noit_log(ls, whence, __FILE__, __LINE__, 
     182                       "M\t%lu.%03lu\t%s\t%s\t%c\t%u\n", 
     183                       SECPART(whence), MSECPART(whence), uuid_str, 
     184                       m->metric_name, m->metric_type, *(m->metric_value.I)); 
     185        break; 
     186      case METRIC_INT64: 
     187        srv = noit_log(ls, whence, __FILE__, __LINE__, 
     188                       "M\t%lu.%03lu\t%s\t%s\t%c\t%lld\n", 
     189                       SECPART(whence), MSECPART(whence), uuid_str, 
     190                       m->metric_name, m->metric_type, 
     191                       (long long int)*(m->metric_value.l)); 
     192        break; 
     193      case METRIC_UINT64: 
     194        srv = noit_log(ls, whence, __FILE__, __LINE__, 
     195                       "M\t%lu.%03lu\t%s\t%s\t%c\t%llu\n", 
     196                       SECPART(whence), MSECPART(whence), uuid_str, 
     197                       m->metric_name, m->metric_type, 
     198                       (long long unsigned int)*(m->metric_value.L)); 
     199        break; 
     200      case METRIC_DOUBLE: 
     201        srv = noit_log(ls, whence, __FILE__, __LINE__, 
     202                       "M\t%lu.%03lu\t%s\t%s\t%c\t%.12e\n", 
     203                       SECPART(whence), MSECPART(whence), uuid_str, 
     204                       m->metric_name, m->metric_type, *(m->metric_value.n)); 
     205        break; 
     206      case METRIC_STRING: 
     207        srv = noit_log(ls, whence, __FILE__, __LINE__, 
     208                       "M\t%lu.%03lu\t%s\t%s\t%c\t%s\n", 
     209                       SECPART(whence), MSECPART(whence), uuid_str, 
     210                       m->metric_name, m->metric_type, m->metric_value.s); 
     211        break; 
     212      default: 
     213        noitL(noit_error, "Unknown metric type '%c' 0x%x\n", 
     214              m->metric_type, m->metric_type); 
     215    } 
     216  } 
     217  return srv; 
    151218} 
    152219static int 
     
    167234    /* If we apply the filter set and it returns false, we don't log */ 
    168235    metric_t *m = (metric_t *)vm; 
    169     if(!noit_apply_filterset(check->filterset, check, m)) continue; 
    170     if(!ls->enabled) continue; 
    171  
    172     srv = 0; 
    173     if(!m->metric_value.s) { /* they are all null */ 
    174       srv = noit_log(ls, &c->whence, __FILE__, __LINE__, 
    175                      "M\t%lu.%03lu\t%s\t%s\t%c\t[[null]]\n", 
    176                      SECPART(&c->whence), MSECPART(&c->whence), uuid_str, 
    177                      m->metric_name, m->metric_type); 
    178     } 
    179     else { 
    180       switch(m->metric_type) { 
    181         case METRIC_INT32: 
    182           srv = noit_log(ls, &c->whence, __FILE__, __LINE__, 
    183                          "M\t%lu.%03lu\t%s\t%s\t%c\t%d\n", 
    184                          SECPART(&c->whence), MSECPART(&c->whence), uuid_str, 
    185                          m->metric_name, m->metric_type, *(m->metric_value.i)); 
    186           break; 
    187         case METRIC_UINT32: 
    188           srv = noit_log(ls, &c->whence, __FILE__, __LINE__, 
    189                          "M\t%lu.%03lu\t%s\t%s\t%c\t%u\n", 
    190                          SECPART(&c->whence), MSECPART(&c->whence), uuid_str, 
    191                          m->metric_name, m->metric_type, *(m->metric_value.I)); 
    192           break; 
    193         case METRIC_INT64: 
    194           srv = noit_log(ls, &c->whence, __FILE__, __LINE__, 
    195                          "M\t%lu.%03lu\t%s\t%s\t%c\t%lld\n", 
    196                          SECPART(&c->whence), MSECPART(&c->whence), uuid_str, 
    197                          m->metric_name, m->metric_type, 
    198                          (long long int)*(m->metric_value.l)); 
    199           break; 
    200         case METRIC_UINT64: 
    201           srv = noit_log(ls, &c->whence, __FILE__, __LINE__, 
    202                          "M\t%lu.%03lu\t%s\t%s\t%c\t%llu\n", 
    203                          SECPART(&c->whence), MSECPART(&c->whence), uuid_str, 
    204                          m->metric_name, m->metric_type, 
    205                          (long long unsigned int)*(m->metric_value.L)); 
    206           break; 
    207         case METRIC_DOUBLE: 
    208           srv = noit_log(ls, &c->whence, __FILE__, __LINE__, 
    209                          "M\t%lu.%03lu\t%s\t%s\t%c\t%.12e\n", 
    210                          SECPART(&c->whence), MSECPART(&c->whence), uuid_str, 
    211                          m->metric_name, m->metric_type, *(m->metric_value.n)); 
    212           break; 
    213         case METRIC_STRING: 
    214           srv = noit_log(ls, &c->whence, __FILE__, __LINE__, 
    215                          "M\t%lu.%03lu\t%s\t%s\t%c\t%s\n", 
    216                          SECPART(&c->whence), MSECPART(&c->whence), uuid_str, 
    217                          m->metric_name, m->metric_type, m->metric_value.s); 
    218           break; 
    219         default: 
    220           noitL(noit_error, "Unknown metric type '%c' 0x%x\n", 
    221                 m->metric_type, m->metric_type); 
    222       } 
    223     } 
     236    srv = _noit_check_log_metric(ls, check, uuid_str, &c->whence, m); 
    224237    if(srv) rv = srv; 
    225238  } 
     
    229242noit_check_log_metrics(noit_check_t *check) { 
    230243  handle_extra_feeds(check, _noit_check_log_metrics); 
     244  if(!(check->flags & (NP_TRANSIENT | NP_SUPPRESS_METRICS))) { 
     245    SETUP_LOG(metrics, return); 
     246    _noit_check_log_metrics(metrics_log, check); 
     247  } 
     248} 
     249 
     250void 
     251noit_check_log_metric(noit_check_t *check, struct timeval *whence, 
     252                      metric_t *m) { 
     253  char uuid_str[256*3+37]; 
     254  MAKE_CHECK_UUID_STR(uuid_str, sizeof(uuid_str), metrics_log, check); 
     255 
     256  /* handle feeds -- hust like handle_extra_feeds, but this 
     257   * is with different arguments. 
     258   */ 
     259  if(check->feeds) { 
     260    noit_skiplist_node *curr, *next; 
     261    curr = next = noit_skiplist_getlist(check->feeds); 
     262    while(curr) { 
     263      const char *feed_name = (char *)curr->data; 
     264      noit_log_stream_t ls = noit_log_stream_find(feed_name); 
     265      noit_skiplist_next(check->feeds, &next); 
     266      if(!ls || _noit_check_log_metric(ls, check, uuid_str, whence, m)) 
     267        noit_check_transient_remove_feed(check, feed_name); 
     268      curr = next; 
     269    } 
     270  } 
    231271  if(!(check->flags & NP_TRANSIENT)) { 
    232272    SETUP_LOG(metrics, return); 
    233     _noit_check_log_metrics(metrics_log, check); 
     273    _noit_check_log_metric(metrics_log, check, uuid_str, whence, m); 
    234274  } 
    235275}