several changes in statistics, fix in verifier
This commit is contained in:
@ -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:
|
||||
|
Reference in New Issue
Block a user