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
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 */
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;
buffer, sizeof(buffer)),
home->port);
home->currently_outstanding = 0;
+ home->revive_time = now;
}
home->state = HOME_STATE_ALIVE;
home->currently_outstanding = 0;
+ home->revive_time = now;
}
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.
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)) {