several changes in statistics, fix in verifier

This commit is contained in:
whottgen
2006-09-18 14:56:22 +00:00
parent 75734d2899
commit 47ff192c6a
21 changed files with 5490 additions and 4414 deletions

View File

@ -55,8 +55,42 @@
#define SMM_LOCAL_OK 103
/* --- statistics counter --- */
#define STAT_CNT_VERIFIER_CACHE 0
#define STAT_CNT_VERIFIER_WORKER_R_THREADS 1
#define STAT_CNT_VERIFIER_WORKER_THREADS 2
#define STAT_CNT_VERIFIER_WORKER_THREADS_FAILED 3
#define STAT_CNT_VERIFIER_WORKER_THREADS_TIMEOUT 4
#define STAT_CNT_VERIFIER_CHECKER_R_THREADS 5
#define STAT_CNT_VERIFIER_CHECKER_THREADS 6
#define STAT_CNT_VERIFIER_CHECKER_THREADS_FAILED 7
#define STAT_CNT_VERIFIER_ANSWERED_FROM_CACHE 8
#define STAT_CNT_VERIFIER_RETURNED_OK 9
#define STAT_CNT_VERIFIER_RETURNED_NOK 10
#define STAT_CNT_VERIFIER_RETURNED_TNOK 11
counterDef_t *verify_counterDefs = NULL;
void verify_setupCounterList() {
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_GAUGE, "Verifier: entries in cache");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_GAUGE, "Verifier: running worker threads");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: worker threads");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: failed to start, worker threads");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: timed out worker threads");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_GAUGE, "Verifier: running checker threads");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: checker threads");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: failed to start, checker threads");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: answered from cache");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: returned OK");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: returned NOK");
verify_counterDefs = addOneCounterDef(verify_counterDefs, SMM_TYPE_COUNTER, "Verifier: returned TNOK");
};
struct verify_container_handle_s {
cfgl_t *cfg;
statCounter_t *statCounter;
int timeout_result;
int timeout_dialog;
@ -181,7 +215,13 @@ int verify_init(cfgl_t *cfg, void **handle) {
vch->cache = NULL;
}
verify_setupCounterList();
vch->statCounter = initStatCounter("verifier", verify_counterDefs);
*handle = vch;
return 0;
}
@ -194,6 +234,8 @@ int verify_destroy(void *handle) {
htcache_destroy(vch->cache);
}
/* FIXME The statCounter structure should be freed too, however, as this won't ever be called ... */
free(vch);
return 0;
}
@ -239,7 +281,7 @@ int verify_work_destroy(void *handle, void *work_handle) {
/* clean up the checker stuff */
pthread_join(ct->thread, NULL);
decStatCounter(STAT_CNT_VERIFIER_CHECKER_R_THREADS);
decStatCounter(vwh->vch->statCounter, STAT_CNT_VERIFIER_CHECKER_R_THREADS);
syslog(LOG_DEBUG, "verify (%p) verify_work_destroy, checker_thread (id=%d) joined",
work_handle, ct->id);
@ -250,7 +292,7 @@ int verify_work_destroy(void *handle, void *work_handle) {
}
err = pthread_join(wt->thread, NULL);
decStatCounter(STAT_CNT_VERIFIER_WORKER_R_THREADS);
decStatCounter(vwh->vch->statCounter, STAT_CNT_VERIFIER_WORKER_R_THREADS);
syslog(LOG_DEBUG, "verify (%p) verify_work_destroy, worker_thread (id=%d) joined",
work_handle, wt->id);
free(wt->input);
@ -349,11 +391,13 @@ int cache_lookup(verify_work_handle_t *vwh, const char* address, int *result, ch
#define PERM_NOK_RETURN(msg) \
syslog(LOG_ERR, "verify (%p) verify_work: %s", vwh, msg); \
snprintf(output, ANSWER_BUFSIZE, "verify_work: %s", msg); \
htbuffer_strcat(output, "verify_work: "); \
htbuffer_strcat(output, msg); \
return SMM_PERM_NOK;
#define TEMP_NOK_RETURN(msg) \
syslog(LOG_ERR, "verify (%p) verify_work: %s", vwh, msg); \
snprintf(output, ANSWER_BUFSIZE, "verify_work: %s", msg); \
htbuffer_strcat(output, "verify_work: "); \
htbuffer_strcat(output, msg); \
return SMM_TEMP_NOK;
int verify_work(void *handle, void *work_handle, char *input, htbuffer_t *output) {
@ -390,7 +434,7 @@ int verify_work(void *handle, void *work_handle, char *input, htbuffer_t *output
pthread_mutex_lock(vwh->result_mutex);
err = pthread_create(&tid, NULL, &worker_thread, wt);
if (-1 == err) {
incStatCounter(STAT_CNT_VERIFIER_WORKER_THREADS_FAILED);
incStatCounter(vwh->vch->statCounter, STAT_CNT_VERIFIER_WORKER_THREADS_FAILED);
free(wt->input);
free(wt);
PERM_NOK_RETURN("unable to create worker thread");
@ -402,7 +446,7 @@ int verify_work(void *handle, void *work_handle, char *input, htbuffer_t *output
err = pthread_cond_timedwait(vwh->result_cond, vwh->result_mutex, &ts);
pthread_mutex_unlock(vwh->result_mutex);
if (ETIMEDOUT == err) {
incStatCounter(STAT_CNT_VERIFIER_WORKER_THREADS_TIMEOUT);
incStatCounter(vwh->vch->statCounter, STAT_CNT_VERIFIER_WORKER_THREADS_TIMEOUT);
TEMP_NOK_RETURN("worker thread timed out");
}
@ -478,8 +522,8 @@ static void *checker_thread(void *arg) {
ct->thread = pthread_self();
incStatCounter(STAT_CNT_VERIFIER_CHECKER_THREADS);
incStatCounter(STAT_CNT_VERIFIER_CHECKER_R_THREADS);
incStatCounter(ct->vwh->vch->statCounter, STAT_CNT_VERIFIER_CHECKER_THREADS);
incStatCounter(ct->vwh->vch->statCounter, STAT_CNT_VERIFIER_CHECKER_R_THREADS);
/*
Connect to ct->ip_address using ct->email_address,
@ -604,8 +648,8 @@ static void *worker_thread(void *arg) {
wt->thread = pthread_self();
incStatCounter(STAT_CNT_VERIFIER_WORKER_R_THREADS);
incStatCounter(STAT_CNT_VERIFIER_WORKER_THREADS);
incStatCounter(wt->vwh->vch->statCounter, STAT_CNT_VERIFIER_WORKER_R_THREADS);
incStatCounter(wt->vwh->vch->statCounter, STAT_CNT_VERIFIER_WORKER_THREADS);
@ -618,7 +662,7 @@ static void *worker_thread(void *arg) {
if (0 == cache_lookup(wt->vwh, wt->input, &result, &cached_output)) {
syslog(LOG_DEBUG, "verify (%p) worker_thread: got a cached result for %s -> %d, %s",
wt->vwh, wt->input, result, cached_output);
incStatCounter(STAT_CNT_VERIFIER_ANSWERED_FROM_CACHE);
incStatCounter(wt->vwh->vch->statCounter, STAT_CNT_VERIFIER_ANSWERED_FROM_CACHE);
wt->output = cached_output;
} else {
domain_part += 1;
@ -650,7 +694,7 @@ static void *worker_thread(void *arg) {
err = pthread_create(&tid, NULL, &checker_thread, ct);
if (-1 == err) {
incStatCounter(STAT_CNT_VERIFIER_CHECKER_THREADS_FAILED);
incStatCounter(ct->vwh->vch->statCounter, STAT_CNT_VERIFIER_CHECKER_THREADS_FAILED);
syslog(LOG_ERR, "verify (%p) worker_thread: unable to create checker thread", wt->vwh);
free(ct);
} else {
@ -670,7 +714,7 @@ static void *worker_thread(void *arg) {
wt->input, ct->result, ct->output);
pthread_join(ct->thread, NULL);
decStatCounter(STAT_CNT_VERIFIER_CHECKER_R_THREADS);
decStatCounter(ct->vwh->vch->statCounter, STAT_CNT_VERIFIER_CHECKER_R_THREADS);
syslog(LOG_DEBUG, "verify (%p) worker_thread: checker thread joined", wt->vwh);
if ((SMM_LOCAL_TEMP_NOK != ct->result) &&
@ -710,17 +754,17 @@ static void *worker_thread(void *arg) {
switch (result) {
case SMM_LOCAL_TEMP_NOK:
sprintf(wt->result->output, "<TNOK><%s>", wt->output);
incStatCounter(STAT_CNT_VERIFIER_RETURNED_TNOK);
incStatCounter(wt->vwh->vch->statCounter, STAT_CNT_VERIFIER_RETURNED_TNOK);
result = SMM_OK;
break;
case SMM_LOCAL_PERM_NOK:
sprintf(wt->result->output, "<NOK><%s>", wt->output);
incStatCounter(STAT_CNT_VERIFIER_RETURNED_NOK);
incStatCounter(wt->vwh->vch->statCounter, STAT_CNT_VERIFIER_RETURNED_NOK);
result = SMM_OK;
break;
case SMM_LOCAL_OK:
sprintf(wt->result->output, "<OK><%s>", wt->output);
incStatCounter(STAT_CNT_VERIFIER_RETURNED_OK);
incStatCounter(wt->vwh->vch->statCounter, STAT_CNT_VERIFIER_RETURNED_OK);
result = SMM_OK;
break;
default: