More stats for home servers
authoraland <aland>
Fri, 20 Jun 2008 13:47:11 +0000 (13:47 +0000)
committeraland <aland>
Fri, 20 Jun 2008 13:47:11 +0000 (13:47 +0000)
share/dictionary.freeradius
src/include/realms.h
src/main/event.c
src/main/realms.c
src/main/stats.c

index f98e780..e858bde 100644 (file)
@@ -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
index f220e70..0512ced 100644 (file)
@@ -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 */
 
index 9d35cd6..9c55b11 100644 (file)
@@ -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;
 }
 
 
index e8c4d7b..f566e44 100644 (file)
@@ -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.
index 6063f4c..5f070fc 100644 (file)
@@ -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)) {