]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/snmp_agent.cc
SourceFormat Enforcement
[thirdparty/squid.git] / src / snmp_agent.cc
index 200b742a67fdf49752dd5aff4f9521b18753479e..7d6ec81d56772b7b02fc5b403c965c8f4f30fafa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: snmp_agent.cc,v 1.98 2007/12/27 01:58:19 hno Exp $
+ * $Id$
  *
  * DEBUG: section 49    SNMP Interface
  * AUTHOR: Kostas Anagnostakis
  *  it under the terms of the GNU General Public License as published by
  *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *  
+ *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *  
+ *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 
 #include "squid.h"
 #include "cache_snmp.h"
-#include "Store.h"
+#include "globals.h"
 #include "mem_node.h"
+#include "protos.h"
+#include "StatCounters.h"
+#include "StatHist.h"
+#include "SquidMath.h"
 #include "SquidTime.h"
+#include "Store.h"
 
 /************************************************************************
+
  SQUID MIB Implementation
+
  ************************************************************************/
 
-/* 
- * cacheSystem group 
+/*
+ * cacheSystem group
  */
 
 variable_list *
 snmp_sysFn(variable_list * Var, snint * ErrP)
 {
     variable_list *Answer = NULL;
-    debugs(49, 5, "snmp_sysFn: Processing request:");
-    snmpDebugOid(5, Var->name, Var->name_length);
+    MemBuf tmp;
+    debugs(49, 5, "snmp_sysFn: Processing request:" << snmpDebugOid(Var->name, Var->name_length, tmp));
     *ErrP = SNMP_ERR_NOERROR;
 
     switch (Var->name[LEN_SQ_SYS]) {
@@ -66,7 +71,7 @@ snmp_sysFn(variable_list * Var, snint * ErrP)
 
     case SYSSTOR:
         Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                      store_swap_size,
+                                      Store::Root().currentSize() >> 10,
                                       ASN_INTEGER);
         break;
 
@@ -84,8 +89,8 @@ snmp_sysFn(variable_list * Var, snint * ErrP)
     return Answer;
 }
 
-/* 
- * cacheConfig group 
+/*
+ * cacheConfig group
  */
 variable_list *
 snmp_confFn(variable_list * Var, snint * ErrP)
@@ -124,13 +129,13 @@ snmp_confFn(variable_list * Var, snint * ErrP)
 
         case CONF_ST_MMAXSZ:
             Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                          (snint) Config.memMaxSize >> 20,
+                                          (snint) (Config.memMaxSize >> 20),
                                           ASN_INTEGER);
             break;
 
         case CONF_ST_SWMAXSZ:
             Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                          (snint) Store::Root().maxSize() >> 10,
+                                          (snint) (Store::Root().maxSize() >> 20),
                                           ASN_INTEGER);
             break;
 
@@ -156,7 +161,7 @@ snmp_confFn(variable_list * Var, snint * ErrP)
     case CONF_LOG_FAC:
         Answer = snmp_var_new(Var->name, Var->name_length);
 
-        if (!(cp = Config.debugOptions))
+        if (!(cp = Debug::debugOptions))
             cp = "None";
 
         Answer->type = ASN_OCTET_STR;
@@ -189,8 +194,7 @@ snmp_confFn(variable_list * Var, snint * ErrP)
     return Answer;
 }
 
-
-/* 
+/*
  * cacheMesh group
  *   - cachePeerTable
  */
@@ -199,37 +203,32 @@ snmp_meshPtblFn(variable_list * Var, snint * ErrP)
 {
     variable_list *Answer = NULL;
 
-    IPAddress laddr;
+    Ip::Address laddr;
     char *cp = NULL;
     peer *p = NULL;
     int cnt = 0;
     debugs(49, 5, "snmp_meshPtblFn: peer " << Var->name[LEN_SQ_MESH + 3] << " requested!");
     *ErrP = SNMP_ERR_NOERROR;
 
-    u_int index = Var->name[LEN_SQ_MESH + 3] ; 
-    for (p = Config.peers; p != NULL; p = p->next, cnt++)
-      {
-        if (p->index == index)
-         {
-           laddr = p->in_addr ;
-           break;
-         }
-      }
+    u_int index = Var->name[LEN_SQ_MESH + 3] ;
+    for (p = Config.peers; p != NULL; p = p->next, ++cnt) {
+        if (p->index == index) {
+            laddr = p->in_addr ;
+            break;
+        }
+    }
 
     if (p == NULL) {
-      *ErrP = SNMP_ERR_NOSUCHNAME;
-      return NULL;
+        *ErrP = SNMP_ERR_NOSUCHNAME;
+        return NULL;
     }
 
-
     switch (Var->name[LEN_SQ_MESH + 2]) {
-    case MESH_PTBL_INDEX: // FIXME INET6: Should be visible?
-        {
-            Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                          (snint)p->index, SMI_INTEGER);
-        }
-        break;
-
+    case MESH_PTBL_INDEX: { // FIXME INET6: Should be visible?
+        Answer = snmp_var_new_integer(Var->name, Var->name_length,
+                                      (snint)p->index, SMI_INTEGER);
+    }
+    break;
 
     case MESH_PTBL_NAME:
         cp = p->host;
@@ -240,27 +239,25 @@ snmp_meshPtblFn(variable_list * Var, snint * ErrP)
 
         break;
 
-    case MESH_PTBL_ADDR_TYPE:
-        {
-            int ival;
-            ival = laddr.IsIPv4() ? INETADDRESSTYPE_IPV4 : INETADDRESSTYPE_IPV6 ;
-            Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                          ival, SMI_INTEGER);
-        }
-        break;
-    case MESH_PTBL_ADDR:
-        {
-            Answer = snmp_var_new(Var->name, Var->name_length);
-            // InetAddress doesn't have its own ASN.1 type,
-            // like IpAddr does (SMI_IPADDRESS)
-            // See: rfc4001.txt
-            Answer->type = ASN_OCTET_STR;
-           char host[MAX_IPSTRLEN];
-           laddr.NtoA(host,MAX_IPSTRLEN);
-           Answer->val_len = strlen(host);
-           Answer->val.string =  (u_char *) xstrdup(host);
-        }
-        break;
+    case MESH_PTBL_ADDR_TYPE: {
+        int ival;
+        ival = laddr.IsIPv4() ? INETADDRESSTYPE_IPV4 : INETADDRESSTYPE_IPV6 ;
+        Answer = snmp_var_new_integer(Var->name, Var->name_length,
+                                      ival, SMI_INTEGER);
+    }
+    break;
+    case MESH_PTBL_ADDR: {
+        Answer = snmp_var_new(Var->name, Var->name_length);
+        // InetAddress doesn't have its own ASN.1 type,
+        // like IpAddr does (SMI_IPADDRESS)
+        // See: rfc4001.txt
+        Answer->type = ASN_OCTET_STR;
+        char host[MAX_IPSTRLEN];
+        laddr.NtoA(host,MAX_IPSTRLEN);
+        Answer->val_len = strlen(host);
+        Answer->val.string =  (u_char *) xstrdup(host);
+    }
+    break;
 
     case MESH_PTBL_HTTP:
         Answer = snmp_var_new_integer(Var->name, Var->name_length,
@@ -376,7 +373,7 @@ snmp_prfSysFn(variable_list * Var, snint * ErrP)
     case PERF_SYS_CPUUSAGE:
         squid_getrusage(&rusage);
         Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                      (snint) dpercent(rusage_cputime(&rusage), tvSubDsec(squid_start, current_time)),
+                                      (snint) Math::doublePercent(rusage_cputime(&rusage), tvSubDsec(squid_start, current_time)),
                                       ASN_INTEGER);
         break;
 
@@ -413,16 +410,16 @@ snmp_prfSysFn(variable_list * Var, snint * ErrP)
         break;
 
     case PERF_SYS_CURUSED_FD:
-       Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                     (snint) Number_FD,
-                                     SMI_GAUGE32);
-       break;
+        Answer = snmp_var_new_integer(Var->name, Var->name_length,
+                                      (snint) Number_FD,
+                                      SMI_GAUGE32);
+        break;
 
     case PERF_SYS_CURMAX_FD:
-       Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                     (snint) Biggest_FD,
-                                     SMI_GAUGE32);
-       break;
+        Answer = snmp_var_new_integer(Var->name, Var->name_length,
+                                      (snint) Biggest_FD,
+                                      SMI_GAUGE32);
+        break;
 
     case PERF_SYS_NUMOBJCNT:
         Answer = snmp_var_new_integer(Var->name, Var->name_length,
@@ -535,7 +532,7 @@ snmp_prfProtoFn(variable_list * Var, snint * ErrP)
 
         case PERF_PROTOSTAT_AGGR_CURSWAP:
             Answer = snmp_var_new_integer(Var->name, Var->name_length,
-                                          (snint) store_swap_size,
+                                          (snint) Store::Root().currentSize() >> 10,
                                           SMI_GAUGE32);
             break;
 
@@ -576,35 +573,35 @@ snmp_prfProtoFn(variable_list * Var, snint * ErrP)
             break;
 
         case PERF_MEDIAN_HTTP_ALL:
-            x = statHistDeltaMedian(&l->client_http.all_svc_time,
-                                    &f->client_http.all_svc_time);
+            x = statHistDeltaMedian(l->client_http.allSvcTime,
+                                    f->client_http.allSvcTime);
             break;
 
         case PERF_MEDIAN_HTTP_MISS:
-            x = statHistDeltaMedian(&l->client_http.miss_svc_time,
-                                    &f->client_http.miss_svc_time);
+            x = statHistDeltaMedian(l->client_http.missSvcTime,
+                                    f->client_http.missSvcTime);
             break;
 
         case PERF_MEDIAN_HTTP_NM:
-            x = statHistDeltaMedian(&l->client_http.nm_svc_time,
-                                    &f->client_http.nm_svc_time);
+            x = statHistDeltaMedian(l->client_http.nearMissSvcTime,
+                                    f->client_http.nearMissSvcTime);
             break;
 
         case PERF_MEDIAN_HTTP_HIT:
-            x = statHistDeltaMedian(&l->client_http.hit_svc_time,
-                                    &f->client_http.hit_svc_time);
+            x = statHistDeltaMedian(l->client_http.hitSvcTime,
+                                    f->client_http.hitSvcTime);
             break;
 
         case PERF_MEDIAN_ICP_QUERY:
-            x = statHistDeltaMedian(&l->icp.query_svc_time, &f->icp.query_svc_time);
+            x = statHistDeltaMedian(l->icp.querySvcTime, f->icp.querySvcTime);
             break;
 
         case PERF_MEDIAN_ICP_REPLY:
-            x = statHistDeltaMedian(&l->icp.reply_svc_time, &f->icp.reply_svc_time);
+            x = statHistDeltaMedian(l->icp.replySvcTime, f->icp.replySvcTime);
             break;
 
         case PERF_MEDIAN_DNS:
-            x = statHistDeltaMedian(&l->dns.svc_time, &f->dns.svc_time);
+            x = statHistDeltaMedian(l->dns.svcTime, f->dns.svcTime);
             break;
 
         case PERF_MEDIAN_RHR:
@@ -615,10 +612,10 @@ snmp_prfProtoFn(variable_list * Var, snint * ErrP)
             x = statByteHitRatio(minutes);
             break;
 
-       case PERF_MEDIAN_HTTP_NH:
-           x = statHistDeltaMedian(&l->client_http.nh_svc_time,
-                                   &f->client_http.nh_svc_time);
-           break;
+        case PERF_MEDIAN_HTTP_NH:
+            x = statHistDeltaMedian(l->client_http.nearHitSvcTime,
+                                    f->client_http.nearHitSvcTime);
+            break;
 
         default:
             *ErrP = SNMP_ERR_NOSUCHNAME;