Changeset de645be52b417be48be0d95ec39f045439782fb6
- Timestamp:
- 09/16/11 20:32:07 (2 years ago)
- git-parent:
[9eca23b16e66b798a03d5fbbd442b9f8c639c63e], [16b1bdd1a6ac2cff3a9d3145c7d31de06255c661]
- Files:
-
- src/modules/check_test.c (modified) (4 diffs)
- src/noit_check.c (modified) (6 diffs)
- src/noit_check.h (modified) (3 diffs)
- src/noit_check_rest.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/modules/check_test.c
rf0c65b7 rde645be 97 97 noit_fire_check(xmlNodePtr attr, xmlNodePtr config, const char **error) { 98 98 char *target = NULL, *name = NULL, *module = NULL, *filterset = NULL; 99 int timeout = 0; 99 char *resolve_rtype = NULL; 100 int timeout = 0, flags = NP_TRANSIENT; 100 101 noit_module_t *m; 101 102 noit_check_t *c = NULL; … … 116 117 timeout = atoi(timeout_str); 117 118 free(timeout_str); 118 } 119 } else if(!strcmp((char *)a->name, "resolve_rtype")) 120 resolve_rtype = (char *)xmlNodeGetContent(a); 119 121 } 120 122 m = noit_module_lookup(module); … … 139 141 goto error; 140 142 } 143 flags |= noit_calc_rtype_flag(resolve_rtype); 141 144 c = calloc(1, sizeof(*c)); 142 145 noit_check_update(c, target, name, filterset, 143 conf_hash, 0, timeout, NULL, NP_TRANSIENT);146 conf_hash, 0, timeout, NULL, flags); 144 147 c->module = strdup(module); 145 148 uuid_generate(c->checkid); … … 157 160 if(module) xmlFree(module); 158 161 if(filterset) xmlFree(filterset); 162 if (resolve_rtype) xmlFree(resolve_rtype); 159 163 return c; 160 164 } src/noit_check.c
rf207009 r16b1bdd 107 107 } 108 108 int 109 noit_calc_rtype_flag(char *resolve_rtype) { 110 int flags = 0; 111 flags |= strcmp(resolve_rtype, PREFER_IPV6) == 0 || 112 strcmp(resolve_rtype, FORCE_IPV6) == 0 ? NP_PREFER_IPV6 : 0; 113 flags |= strcmp(resolve_rtype, FORCE_IPV4) == 0 || 114 strcmp(resolve_rtype, FORCE_IPV6) == 0 ? NP_SINGLE_RESOLVE : 0; 115 return flags; 116 } 117 int 109 118 noit_check_max_initial_stutter() { 110 119 int stutter; … … 150 159 char filterset[256] = ""; 151 160 char oncheck[1024] = ""; 161 char resolve_rtype[16] = ""; 152 162 int no_period = 0; 153 163 int no_oncheck = 0; … … 183 193 if(!INHERIT(stringbuf, filterset, filterset, sizeof(filterset))) 184 194 filterset[0] = '\0'; 195 196 if (!INHERIT(stringbuf, resolve_rtype, resolve_rtype, sizeof(resolve_rtype))) 197 strlcpy(resolve_rtype, PREFER_IPV4, sizeof(resolve_rtype)); 185 198 186 199 if(!MYATTR(stringbuf, name, name, sizeof(name))) … … 217 230 if(busted) flags |= (NP_UNCONFIG|NP_DISABLED); 218 231 else if(disabled) flags |= NP_DISABLED; 232 233 flags |= noit_calc_rtype_flag(resolve_rtype); 219 234 220 235 if(noit_hash_retrieve(&polls, (char *)uuid, UUID_SIZE, … … 569 584 } a; 570 585 571 572 family = AF_INET; 586 family = NOIT_CHECK_PREFER_V6(new_check) ? AF_INET6 : AF_INET; 573 587 rv = inet_pton(family, ip_str, &a); 574 if(rv != 1 ) {575 family = AF_INET6;588 if(rv != 1 && !NOIT_CHECK_SINGLE_RESOLVE(new_check)) { 589 family = family == AF_INET ? AF_INET6 : AF_INET; 576 590 rv = inet_pton(family, ip_str, &a); 577 591 if(rv != 1) { … … 624 638 if(new_check->target) free(new_check->target); 625 639 new_check->target = strdup(target); 640 641 // apply resolution flags to check. 642 if (flags & NP_PREFER_IPV6) 643 new_check->flags |= NP_PREFER_IPV6; 644 else 645 new_check->flags &= ~NP_PREFER_IPV6; 646 if (flags & NP_SINGLE_RESOLVE) 647 new_check->flags |= NP_SINGLE_RESOLVE; 648 else 649 new_check->flags &= ~NP_SINGLE_RESOLVE; 626 650 627 651 if(noit_check_set_ip(new_check, target)) { src/noit_check.h
r3081176 r16b1bdd 73 73 #define NP_SUPPRESS_METRICS 0x00002000 74 74 75 #define NP_PREFER_IPV6 0x00004000 76 #define NP_SINGLE_RESOLVE 0x00008000 77 78 #define PREFER_IPV4 "prefer-ipv4" 79 #define PREFER_IPV6 "prefer-ipv6" 80 #define FORCE_IPV4 "force-ipv4" 81 #define FORCE_IPV6 "force-ipv6" 82 75 83 #define NP_UNKNOWN '0' /* stats_t.{available,state} */ 76 84 #define NP_AVAILABLE 'A' /* stats_t.available */ … … 156 164 /* It is resolved if it is resolved or never needed to be resolved */ 157 165 #define NOIT_CHECK_RESOLVED(a) (((a)->flags & NP_RESOLVED) || (((a)->flags & NP_RESOLVE) == 0)) 166 #define NOIT_CHECK_PREFER_V6(a) ((a)->flags & NP_PREFER_IPV6) 167 #define NOIT_CHECK_SINGLE_RESOLVE(a) ((a)->flags & NP_SINGLE_RESOLVE) 158 168 159 169 API_EXPORT(void) noit_poller_init(); … … 245 255 API_EXPORT(const char *) 246 256 noit_check_state_string(int16_t state); 257 API_EXPORT(int) 258 noit_calc_rtype_flag(char *resolve_rtype); 247 259 API_EXPORT(int) 248 260 noit_stats_snprint_metric_value(char *b, int l, metric_t *m); src/noit_check_rest.c
r09ecd28 r6033f87 197 197 SHOW_ATTR(attr,node,module); 198 198 SHOW_ATTR(attr,node,target); 199 SHOW_ATTR(attr,node,resolve_rtype); 199 200 SHOW_ATTR(attr,node,period); 200 201 SHOW_ATTR(attr,node,timeout); … … 283 284 } 284 285 target = 1; 286 } 287 else CHECK_N_SET(resolve_rtype) { 288 xmlChar *tmp; 289 noit_boolean invalid; 290 tmp = xmlNodeGetContent(an); 291 invalid = strcmp((char *)tmp, PREFER_IPV4) && 292 strcmp((char *)tmp, PREFER_IPV6) && 293 strcmp((char *)tmp, FORCE_IPV4) && 294 strcmp((char *)tmp, FORCE_IPV6); 295 xmlFree(tmp); 296 if(invalid) { 297 *error = "invalid reslove_rtype"; 298 return 0; 299 } 285 300 } 286 301 else CHECK_N_SET(period) { … … 356 371 ATTR2PROP(name); 357 372 ATTR2PROP(target); 373 ATTR2PROP(resolve_rtype); 358 374 ATTR2PROP(module); 359 375 ATTR2PROP(period);
