From c6b5a439e794d123c6be96b0591dd0878311f7f0 Mon Sep 17 00:00:00 2001 From: aland Date: Fri, 20 Jun 2008 13:47:11 +0000 Subject: [PATCH] More stats for home servers --- share/dictionary.freeradius | 11 +++++++++++ src/include/realms.h | 2 +- src/main/event.c | 10 ++-------- src/main/realms.c | 13 ------------- src/main/stats.c | 23 ++++++++++++++++++++++- 5 files changed, 36 insertions(+), 23 deletions(-) diff --git a/share/dictionary.freeradius b/share/dictionary.freeradius index f98e780..e858bde 100644 --- a/share/dictionary.freeradius +++ b/share/dictionary.freeradius @@ -120,4 +120,15 @@ ATTRIBUTE FreeRADIUS-Stats-Client-Netmask 169 integer ATTRIBUTE FreeRADIUS-Stats-Server-IP-Address 170 ipaddr ATTRIBUTE FreeRADIUS-Stats-Server-Port 171 integer +ATTRIBUTE FreeRADIUS-Stats-Server-Outstanding-Requests 172 integer +ATTRIBUTE FreeRADIUS-Stats-Server-State 173 integer + +VALUE FreeRADIUS-Stats-Server-State Alive 0 +VALUE FreeRADIUS-Stats-Server-State Zombie 1 +VALUE FreeRADIUS-Stats-Server-State Dead 2 + +ATTRIBUTE FreeRADIUS-Stats-Server-Time-Of-Death 174 date +ATTRIBUTE FreeRADIUS-Stats-Server-Time-Of-Life 175 date + + END-VENDOR FreeRADIUS diff --git a/src/include/realms.h b/src/include/realms.h index f220e70..0512ced 100644 --- a/src/include/realms.h +++ b/src/include/realms.h @@ -47,8 +47,8 @@ typedef struct home_server { int response_window; int max_outstanding; /* don't overload it */ int currently_outstanding; - uint32_t total_requests_sent; + struct timeval revive_time; struct timeval zombie_period_start; int zombie_period; /* unresponsive for T, mark it dead */ diff --git a/src/main/event.c b/src/main/event.c index 9d35cd6..9c55b11 100644 --- a/src/main/event.c +++ b/src/main/event.c @@ -223,14 +223,6 @@ static int insert_into_proxy_hash(REQUEST *request) PTHREAD_MUTEX_LOCK(&proxy_mutex); request->home_server->currently_outstanding++; - request->home_server->total_requests_sent++; - - /* - * On overflow, back up to ~0. - */ - if (!request->home_server->total_requests_sent) { - request->home_server->total_requests_sent--; - } if (!fr_packet_list_id_alloc(proxy_list, request->proxy)) { int found; @@ -456,6 +448,7 @@ static void revive_home_server(void *ctx) buffer, sizeof(buffer)), home->port); home->currently_outstanding = 0; + home->revive_time = now; } @@ -511,6 +504,7 @@ static void received_response_to_ping(REQUEST *request) home->state = HOME_STATE_ALIVE; home->currently_outstanding = 0; + home->revive_time = now; } diff --git a/src/main/realms.c b/src/main/realms.c index e8c4d7b..f566e44 100644 --- a/src/main/realms.c +++ b/src/main/realms.c @@ -1718,19 +1718,6 @@ home_server *home_server_ldb(const char *realmname, continue; } - if (home->total_requests_sent < found->total_requests_sent) { - DEBUG3("Choosing %s: It's been less busy than %s", - home->name, found->name); - found = home; - continue; - } - - if (home->total_requests_sent > found->total_requests_sent) { - DEBUG3("Skipping %s: It's been busier than %s", - home->name, found->name); - continue; - } - /* * From the list of servers which have the same * load, choose one at random. diff --git a/src/main/stats.c b/src/main/stats.c index 6063f4c..5f070fc 100644 --- a/src/main/stats.c +++ b/src/main/stats.c @@ -536,12 +536,33 @@ void request_stats_reply(REQUEST *request) pairadd(&request->reply->vps, paircopyvp(server_port)); + vp = radius_paircreate(request, &request->reply->vps, + FR2ATTR(172), PW_TYPE_INTEGER); + if (vp) vp->vp_integer = home->currently_outstanding; + + vp = radius_paircreate(request, &request->reply->vps, + FR2ATTR(173), PW_TYPE_INTEGER); + if (vp) vp->vp_integer = home->state; + + if ((home->state == HOME_STATE_ALIVE) && + (home->revive_time.tv_sec != 0)) { + vp = radius_paircreate(request, &request->reply->vps, + FR2ATTR(175), PW_TYPE_DATE); + if (vp) vp->vp_date = home->revive_time.tv_sec; + } + + if (home->state == HOME_STATE_IS_DEAD) { + vp = radius_paircreate(request, &request->reply->vps, + FR2ATTR(174), PW_TYPE_DATE); + if (vp) vp->vp_date = home->zombie_period_start.tv_sec + home->zombie_period; + } + if (((flag->vp_integer & 0x01) != 0) && (request->listener->type == RAD_LISTEN_AUTH)) { request_stats_addvp(request, proxy_authvp, &home->stats); } - + #ifdef WITH_ACCOUNTING if (((flag->vp_integer & 0x02) != 0) && (request->listener->type == RAD_LISTEN_ACCT)) { -- 2.1.4