]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Export Queue PPS in/out via the "status" interface
authorAlan T. DeKok <aland@freeradius.org>
Thu, 23 Feb 2012 13:02:12 +0000 (14:02 +0100)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 23 Feb 2012 13:02:12 +0000 (14:02 +0100)
share/dictionary.freeradius
src/include/radiusd.h
src/main/stats.c
src/main/threads.c

index 99ca5c816d6272f1fd3cada6355cff00326c1029..9b04fbcf1bb1de4393bfbee63280a5666794a912 100644 (file)
@@ -136,4 +136,7 @@ ATTRIBUTE   FreeRADIUS-Server-EMA-Window            178     integer
 ATTRIBUTE      FreeRADIUS-Server-EMA-USEC-Window-1     179     integer
 ATTRIBUTE      FreeRADIUS-Server-EMA-USEC-Window-10    180     integer
 
+ATTRIBUTE      FreeRADIUS-Queue-PPS-In                 181     integer
+ATTRIBUTE      FreeRADIUS-Queue-PPS-Out                182     integer
+
 END-VENDOR FreeRADIUS
index 069937332ac1e68940b65605b846569ddd6cdde0..a0012058d96984c468004e61673b2063103361ab 100644 (file)
@@ -727,7 +727,7 @@ extern              pid_t rad_waitpid(pid_t pid, int *status);
 extern          int total_active_threads(void);
 extern          void thread_pool_lock(void);
 extern          void thread_pool_unlock(void);
-extern         void thread_pool_queue_stats(int *array);
+extern         void thread_pool_queue_stats(int array[RAD_LISTEN_MAX], int pps[2]);
 
 #ifndef HAVE_PTHREAD_H
 #define rad_fork(n) fork()
index 405a001407629294a9c8ea64b069fb6682c33b78..55f99d1a110309caac77c7bc9f3ebf64d862bade 100644 (file)
@@ -507,12 +507,11 @@ void request_stats_reply(REQUEST *request)
                if (vp) vp->vp_date = hup_time.tv_sec;
                
 #ifdef HAVE_PTHREAD_H
-               int i, array[RAD_LISTEN_MAX];
+               int i, array[RAD_LISTEN_MAX], pps[2];
 
-               thread_pool_queue_stats(array);
+               thread_pool_queue_stats(array, pps);
 
-#ifdef WITH_DETAIL
-               for (i = 0; i <= RAD_LISTEN_DETAIL; i++) {
+               for (i = 0; i <= 4; i++) {
                        vp = radius_paircreate(request, &request->reply->vps,
                                               162 + i, VENDORPEC_FREERADIUS,
                                               PW_TYPE_INTEGER);
@@ -520,7 +519,15 @@ void request_stats_reply(REQUEST *request)
                        if (!vp) continue;
                        vp->vp_integer = array[i];
                }
-#endif
+
+               for (i = 0; i < 2; i++) {
+                       vp = radius_paircreate(request, &request->reply->vps,
+                                              180 + i, VENDORPEC_FREERADIUS,
+                                              PW_TYPE_INTEGER);
+                       
+                       if (!vp) continue;
+                       vp->vp_integer = pps[i];
+               }
 #endif
        }
 
index 09b635c86ad00a5c710bc3dfab963e969126f754..68dffae771443310878c62679c7af46b656d22e2 100644 (file)
@@ -1227,21 +1227,37 @@ pid_t rad_waitpid(pid_t pid, int *status)
  */
 #endif
 
-void thread_pool_queue_stats(int *array)
+void thread_pool_queue_stats(int array[RAD_LISTEN_MAX], int pps[2])
 {
        int i;
 
 #ifndef WITH_GCD
        if (pool_initialized) {
+               struct timeval now;
+
                for (i = 0; i < RAD_LISTEN_MAX; i++) {
                        array[i] = fr_fifo_num_elements(thread_pool.fifo[i]);
                }
+
+               gettimeofday(&now, NULL);
+
+               pps[0] = rad_pps(&thread_pool.pps_in.pps_old,
+                                &thread_pool.pps_in.pps_now,
+                                &thread_pool.pps_in.time_old,
+                                &now);
+               pps[1] = rad_pps(&thread_pool.pps_out.pps_old,
+                                &thread_pool.pps_out.pps_now,
+                                &thread_pool.pps_out.time_old,
+                                &now);
+
        } else
 #endif /* WITH_GCD */
        {
                for (i = 0; i < RAD_LISTEN_MAX; i++) {
                        array[i] = 0;
                }
+
+               pps[0] = pps[1] = 0;
        }
 }
 #endif /* HAVE_PTHREAD_H */