]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Reorganized cachePerf.cacheProtoStats to cacheProtoAggregateStats and
authorkostas <>
Thu, 26 Feb 1998 16:01:10 +0000 (16:01 +0000)
committerkostas <>
Thu, 26 Feb 1998 16:01:10 +0000 (16:01 +0000)
cacheMedianSvcTable, which is a table who's row represents the minutes
of history used for medians.
Fixed cacheTimeout bug which returned cacheLogLevel
Fixed netdb, ipcache and fqdn returning wrong "timeticks"
Fixed cacheUptime to return SMI_TIMETICS.
Several memory allocation fixes (used dmalloc-3.3 to find them).

include/cache_snmp.h
snmplib/mib.c
src/cache_cf.cc
src/defines.h
src/fqdncache.cc
src/ipcache.cc
src/mib.txt
src/net_db.cc
src/snmp_agent.cc
src/stat.cc

index 82fff92d7f6ff5c009b8cb6d3ea39057267108ee..85e956d65ca40f96b4faafbd552ef7963cc9a033 100644 (file)
@@ -204,6 +204,7 @@ enum {
 enum {
     PERF_PROTOSTAT_START,
     PERF_PROTOSTAT_AGGR,
+    PERF_PROTOSTAT_MEDIAN,
     PERF_PROTOSTAT_END
 };
 
@@ -212,22 +213,33 @@ enum {
     PERF_PROTOSTAT_AGGR_HTTP_REQ,
     PERF_PROTOSTAT_AGGR_HTTP_HITS,
     PERF_PROTOSTAT_AGGR_HTTP_ERRORS,
+    PERF_PROTOSTAT_AGGR_HTTP_KBYTES_IN,
+    PERF_PROTOSTAT_AGGR_HTTP_KBYTES_OUT,
     PERF_PROTOSTAT_AGGR_ICP_S,
     PERF_PROTOSTAT_AGGR_ICP_R,
     PERF_PROTOSTAT_AGGR_ICP_SKB,
     PERF_PROTOSTAT_AGGR_ICP_RKB,
+    PERF_PROTOSTAT_AGGR_REQ,
+    PERF_PROTOSTAT_AGGR_ERRORS,
     PERF_PROTOSTAT_AGGR_KBYTES_IN,
     PERF_PROTOSTAT_AGGR_KBYTES_OUT,
     PERF_PROTOSTAT_AGGR_CURSWAP,
-    PERF_PROTOSTAT_AGGR_HTTP_SVC_5,
-    PERF_PROTOSTAT_AGGR_HTTP_SVC_60,
-    PERF_PROTOSTAT_AGGR_ICP_SVC_5,
-    PERF_PROTOSTAT_AGGR_ICP_SVC_60,
-    PERF_PROTOSTAT_AGGR_DNS_SVC_5,
-    PERF_PROTOSTAT_AGGR_DNS_SVC_60,
     PERF_PROTOSTAT_AGGR_END
 };
 
+enum {
+    PERF_MEDIAN_START,
+    PERF_MEDIAN_TIME,
+    PERF_MEDIAN_HTTP_ALL,
+    PERF_MEDIAN_HTTP_MISS,
+    PERF_MEDIAN_HTTP_NM,
+    PERF_MEDIAN_HTTP_HIT,
+    PERF_MEDIAN_ICP_QUERY,
+    PERF_MEDIAN_ICP_REPLY,
+    PERF_MEDIAN_DNS,
+    PERF_MEDIAN_END
+};
+
 enum {
     SYS_FD_START,
     SYS_FD_NUMBER,
index 5a46723bedf93647af67022f1ac1cf6afa8517ff..04c0988a329739d43334f914dc80343e779abe52 100644 (file)
@@ -531,7 +531,6 @@ set_functions(subtree)
 
 void init_mib(char *file)
 {
-    snmplib_debug(6, "init_mib: Called.\n");
     if (Mib != NULL)
        return;
 
index 4abd8b78a3160614c0b6e715e32c554a8f8d5420..7678a0ebb52bec68bf9dfa639f0f12b156ac22eb 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: cache_cf.cc,v 1.252 1998/02/25 19:15:06 kostas Exp $
+ * $Id: cache_cf.cc,v 1.253 1998/02/26 09:01:11 kostas Exp $
  *
  * DEBUG: section 3     Configuration File Parsing
  * AUTHOR: Harvest Derived
@@ -384,6 +384,7 @@ parse_snmp_conf(snmpconf ** s)
 {
     static char buff[256];
     static char *tokens[10], *p;
+
     if (Mib == NULL) {
        if (Config.Snmp.mibPath)
            init_mib(Config.Snmp.mibPath);
index 2518fa7d813477e1958b9e3ddd121fc1ab9c3309..cea8ac84144a31ca825c69e7c03fc6ca04cc82a1 100644 (file)
 
 #define SKIP_BASIC_SZ ((size_t) 6)
 
+/* stat.c */
+#define N_COUNT_HIST 61
+
 /* were to look for errors if config path fails */
 #define DEFAULT_SQUID_ERROR_DIR "/usr/local/squid/etc/errors"
index 8cbe965143c9af62c9ffb0f32dd377c6a1a3cf29..ad1b6f9933d9185e80769882262c4056af0ecae9 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: fqdncache.cc,v 1.85 1998/02/25 09:53:57 rousskov Exp $
+ * $Id: fqdncache.cc,v 1.86 1998/02/26 09:01:12 kostas Exp $
  *
  * DEBUG: section 35    FQDN Cache
  * AUTHOR: Harvest Derived
@@ -936,8 +936,8 @@ snmp_fqdncacheFn(variable_list * Var, long *ErrP)
     switch (Var->name[11]) {
     case NET_FQDN_ID:
        Answer->type = ASN_INTEGER;
-       Answer->val.integer = xmalloc(Answer->val_len);
        Answer->val_len = sizeof(long);
+       Answer->val.integer = xmalloc(Answer->val_len);
        *(Answer->val.integer) = Var->name[12];
        break;
     case NET_FQDN_NAME:
@@ -947,33 +947,35 @@ snmp_fqdncacheFn(variable_list * Var, long *ErrP)
        break;
     case NET_FQDN_IP:
        Answer->type = SMI_IPADDRESS;
-       Answer->val.integer = xmalloc(Answer->val_len);
        Answer->val_len = sizeof(long);
+       Answer->val.integer = xmalloc(Answer->val_len);
        safe_inet_addr(fq->name, &fqaddr);
        *(Answer->val.integer) = (long) fqaddr.s_addr;
        break;
     case NET_FQDN_LASTREF:
        Answer->type = SMI_TIMETICKS;
-       Answer->val.integer = xmalloc(Answer->val_len);
        Answer->val_len = sizeof(long);
-       *(Answer->val.integer) = fq->lastref;
+       Answer->val.integer = xmalloc(Answer->val_len);
+       *(Answer->val.integer) = squid_curtime-fq->lastref;
        break;
     case NET_FQDN_EXPIRES:
        Answer->type = SMI_TIMETICKS;
-       Answer->val.integer = xmalloc(Answer->val_len);
        Answer->val_len = sizeof(long);
-       *(Answer->val.integer) = fq->expires;
+       Answer->val.integer = xmalloc(Answer->val_len);
+       *(Answer->val.integer) = fq->expires-squid_curtime;
        break;
     case NET_FQDN_STATE:
        Answer->type = ASN_INTEGER;
-       Answer->val.integer = xmalloc(Answer->val_len);
        Answer->val_len = sizeof(long);
+       Answer->val.integer = xmalloc(Answer->val_len);
        *(Answer->val.integer) = fq->status;
        break;
     default:
        *ErrP = SNMP_ERR_NOSUCHNAME;
        snmp_var_free(Answer);
+#if 0
        xfree(Answer->val.integer);
+#endif
        return (NULL);
     }
     return Answer;
index b9d7c235f1c70b484d7a4033d358ac4b72930bc5..1ea027727bb1176eff3ac25b0aa01391503443b2 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ipcache.cc,v 1.160 1998/02/25 09:53:59 rousskov Exp $
+ * $Id: ipcache.cc,v 1.161 1998/02/26 09:01:13 kostas Exp $
  *
  * DEBUG: section 14    IP Cache
  * AUTHOR: Harvest Derived
@@ -1088,8 +1088,8 @@ snmp_ipcacheFn(variable_list * Var, long *ErrP)
     }
     Answer = snmp_var_new(Var->name, Var->name_length);
     *ErrP = SNMP_ERR_NOERROR;
-    Answer->val.integer = xmalloc(Answer->val_len);
     Answer->val_len = sizeof(long);
+    Answer->val.integer = xmalloc(Answer->val_len);
     switch (Var->name[11]) {
     case NET_IPC_ID:
        Answer->type = SMI_INTEGER;
index bca95a852bc4c1f8f2b782ca4b2f3b58a591f844..8c3c2bd9c4ee55a5c01674163edf0fbab7933f5e 100644 (file)
@@ -1,7 +1,7 @@
 -- File: SQUID.MIB
 -- Maintained by: kostas@nlanr.net
 --
--- $Id: mib.txt,v 1.9 1998/02/23 06:34:04 kostas Exp $
+-- $Id: mib.txt,v 1.10 1998/02/26 09:01:14 kostas Exp $
 
 -- SQUID-MIB DEFINITIONS ::= BEGIN
 --             IMPORTS
        -- cacheProtoStats
        --
 
+               -- cacheProtoAggregateStats
+               --
+
        cacheProtoAggregateStats OBJECT IDENTIFIER ::= { cacheProtoStats 1 }
 
+
        cacheClientHttpRequests  OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
                 ::= { cacheProtoAggregateStats 3 }
 
-       cacheICPpktsSent OBJECT-TYPE
+        cacheHttpInKb OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
                 ::= { cacheProtoAggregateStats 4 }
 
-       cacheICPpktsRecv OBJECT-TYPE
+        cacheHttpOutKb OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
                 ::= { cacheProtoAggregateStats 5 }
 
-        cacheICPkbSent OBJECT-TYPE
+       cacheICPpktsSent OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
                 ::= { cacheProtoAggregateStats 6 }
 
-        cacheICPkbRecv OBJECT-TYPE
+       cacheICPpktsRecv OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
                 ::= { cacheProtoAggregateStats 7 }
 
-        cacheHttpInKb OBJECT-TYPE
+        cacheICPkbSent OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
                 ::= { cacheProtoAggregateStats 8 }
 
-        cacheHttpOutKb OBJECT-TYPE
+        cacheICPkbRecv OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
                 ::= { cacheProtoAggregateStats 9 }
 
+        cacheServerRequests OBJECT-TYPE
+                SYNTAX INTEGER
+                ACCESS read-only
+                STATUS mandatory
+                ::= { cacheProtoAggregateStats 10 }
+
+        cacheServerErrors OBJECT-TYPE
+                SYNTAX INTEGER
+                ACCESS read-only
+                STATUS mandatory
+                ::= { cacheProtoAggregateStats 11 }
+
+       cacheServerInKb OBJECT-TYPE
+                SYNTAX Counter32
+                ACCESS read-only
+                STATUS mandatory
+                ::= { cacheProtoAggregateStats 12 }
+
+        cacheServerOutKb OBJECT-TYPE
+                SYNTAX Counter32
+                ACCESS read-only
+                STATUS mandatory
+                ::= { cacheProtoAggregateStats 13 }
+
        cacheCurrentSwapSize OBJECT-TYPE
                 SYNTAX Counter32
                 ACCESS read-only
                 STATUS mandatory
-                ::= { cacheProtoAggregateStats 10 }
+                ::= { cacheProtoAggregateStats 14 }
+
+
+       --
+       -- cacheProtoMedianSvcStats group
 
 
-       cacheHttpMedianSvcFiveMin OBJECT-TYPE
+       cacheMedianSvcTable OBJECT-TYPE
+                SYNTAX SEQUENCE OF cacheMedianSvcEntry
+                ACCESS read-only
+                STATUS current
+               ::= { cacheProtoStats 2 }
+
+        cacheMedianSvcEntry OBJECT-TYPE
+                SYNTAX CacheMedianSvcEntry
+                MAX-ACCESS not-accessible
+                STATUS current
+                DESCRIPTION 
+                        " An entry in cacheFdTable " 
+                INDEX   { cacheMedianTime }
+                ::= { cacheMedianSvcTable 1 }
+
+        CacheMedianSvcEntry ::= SEQUENCE {
+               cacheMedianTime INTEGER,
+               cacheHttpAllSvcTime INTEGER,
+               cacheHttpMissSvcTime INTEGER,   
+               cacheHttpNmSvcTime INTEGER,
+               cacheHttpHitSvcTime INTEGER,
+               cacheIcpQuerySvcTime INTEGER,
+               cacheIcpReplySvcTime INTEGER,
+               cacheDnsSvcTime INTEGER
+       }
+
+       cacheMedianTime OBJECT-TYPE
                 SYNTAX INTEGER
                 ACCESS read-only
                 STATUS mandatory
-                ::= { cacheProtoAggregateStats 11 }
+                ::= { cacheMedianSvcEntry 1 }
 
-        cacheICPMedianSvcFiveMin OBJECT-TYPE
+       cacheHttpAllSvcTime OBJECT-TYPE
                 SYNTAX INTEGER
                 ACCESS read-only
                 STATUS mandatory
-                ::= { cacheProtoAggregateStats 13 }
+                ::= { cacheMedianSvcEntry 2 } 
 
-        cacheDNSMedianSvcFiveMin OBJECT-TYPE
+       cacheHttpMissSvcTime OBJECT-TYPE
                 SYNTAX INTEGER
                 ACCESS read-only
                 STATUS mandatory
-                ::= { cacheProtoAggregateStats 15 }
+                ::= { cacheMedianSvcEntry 3 } 
 
-        cacheHttpMedianSvcHour OBJECT-TYPE
+       cacheHttpNmSvcTime OBJECT-TYPE
                 SYNTAX INTEGER
                 ACCESS read-only
                 STATUS mandatory
-                ::= { cacheProtoAggregateStats 12 }
+                ::= { cacheMedianSvcEntry 4 } 
 
-        cacheICPMedianSvcHour OBJECT-TYPE
+
+       cacheHttpHitSvcTime OBJECT-TYPE
                 SYNTAX INTEGER
                 ACCESS read-only
                 STATUS mandatory
-                ::= { cacheProtoAggregateStats 14 }
+                ::= { cacheMedianSvcEntry 5 } 
 
-        cacheDNSMedianSvcHour OBJECT-TYPE
+
+       cacheIcpQuerySvcTime OBJECT-TYPE
                 SYNTAX INTEGER
                 ACCESS read-only
                 STATUS mandatory
-                ::= { cacheProtoAggregateStats 16 }
+                ::= { cacheMedianSvcEntry 6 } 
+
 
+       cacheIcpReplySvcTime OBJECT-TYPE
+                SYNTAX INTEGER
+                ACCESS read-only
+                STATUS mandatory
+                ::= { cacheMedianSvcEntry 7 } 
+
+       cacheDnsSvcTime OBJECT-TYPE
+                SYNTAX INTEGER
+                ACCESS read-only
+                STATUS mandatory
+                ::= { cacheMedianSvcEntry 8 } 
 
        
        -- 
index 0c31344b4bfec51536d585ddcb59f6eeed09ba68..b70e6abda21083939e9617e6a64ab305a43b567c 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: net_db.cc,v 1.68 1998/02/23 21:05:18 kostas Exp $
+ * $Id: net_db.cc,v 1.69 1998/02/26 09:01:14 kostas Exp $
  *
  * DEBUG: section 37    Network Measurement Database
  * AUTHOR: Duane Wessels
@@ -748,12 +748,12 @@ snmp_netdbFn(variable_list * Var, long *ErrP)
        return (NULL);
     }
 #if USE_ICMP
-    Answer->val.integer = xmalloc(Answer->val_len);
     Answer->val_len = sizeof(long);
+    Answer->val.integer = xmalloc(Answer->val_len);
     switch (Var->name[10]) {
     case NETDB_ID:
        Answer->type = SMI_INTEGER;
-       *(Answer->val.integer) = (long) cnt - 1;
+       *(Answer->val.integer) = (long) Var->name[11];
        break;
     case NETDB_NET:
        Answer->type = SMI_IPADDRESS;
@@ -778,11 +778,11 @@ snmp_netdbFn(variable_list * Var, long *ErrP)
        break;
     case NETDB_PINGTIME:
        Answer->type = SMI_TIMETICKS;
-       *(Answer->val.integer) = (long) n->next_ping_time;
+       *(Answer->val.integer) = (long) n->next_ping_time-squid_curtime;
        break;
     case NETDB_LASTUSE:
        Answer->type = SMI_TIMETICKS;
-       *(Answer->val.integer) = (long) n->last_use_time;
+       *(Answer->val.integer) = (long) squid_curtime-n->last_use_time;
        break;
     default:
        *ErrP = SNMP_ERR_NOSUCHNAME;
index 7029ddfaae25ec37d8845d9b424613788f992082..ecbc593866fa18ab14e53d364b81a2f8da15c321 100644 (file)
@@ -20,7 +20,9 @@ static struct snmp_pdu *snmp_agent_response(struct snmp_pdu *PDU);
 static int community_check(char *b, oid *name, int namelen);
 struct snmp_session *Session;
 extern int get_median_svc(int, int);
+extern StatCounters *snmpStatGet(int);
 extern void snmp_agent_parse_done(int, snmp_request_t *);
+
 void snmpAclCheckStart(snmp_request_t *rq);
 
 
@@ -88,6 +90,7 @@ snmpAclCheckDone(int answer, void *data)
     rq->acl_checklist = NULL;
     PDU=rq->PDU;
     Community=rq->community;
+
     if (answer==ACCESS_DENIED) {
                debug(49,5)("snmpAclCheckDone: failed on acl.\n");
                snmp_agent_parse_done(0, rq);
@@ -99,7 +102,7 @@ snmpAclCheckDone(int answer, void *data)
         VarPtrP = &((*VarPtrP)->next_variable)) {
         VarPtr = *VarPtrP;
 
-       debug(49,5)("snmpAclCheckDone: checking.");
+       debug(49,5)("snmpAclCheckDone: checking.\n");
        /* access check for each variable */
 
        if (!community_check(Community, VarPtr->name, VarPtr->name_length)) {
@@ -222,7 +225,7 @@ snmp_agent_response(struct snmp_pdu *PDU)
        /* Done.  Return this PDU */
        return (Answer);
     }                          /* end SNMP_PDU_GETNEXT */
-#
+
     debug(49, 9) ("Ignoring PDU %d\n", PDU->command);
     snmp_free_pdu(Answer);
     return (NULL);
@@ -312,7 +315,7 @@ snmp_basicFn(variable_list * Var, long *ErrP)
     case SYSORLASTCHANGE:
        Answer->val_len = sizeof(long);
        Answer->val.integer = xmalloc(Answer->val_len);
-       Answer->type = ASN_INTEGER;
+       Answer->type = SMI_TIMETICKS;
        *(Answer->val.integer) = tvSubDsec(squid_start, current_time);
        break;
     case SYSCONTACT:
@@ -561,6 +564,7 @@ snmp_confFn(variable_list * Var, long *ErrP)
            snmp_var_free(Answer);
            return (NULL);
        }
+       break;
     case CONF_LOG_LVL:
        if (!(cp = Config.debugOptions))
            cp = "None";
@@ -613,8 +617,8 @@ snmp_confPtblFn(variable_list * Var, long *ErrP)
        break;
     case CONF_PTBL_IP:
        Answer->type = SMI_IPADDRESS;
-       Answer->val.integer = xmalloc(Answer->val_len);
        Answer->val_len = sizeof(long);
+       Answer->val.integer = xmalloc(Answer->val_len);
        *(Answer->val.integer) = (long) (p->in_addr.sin_addr.s_addr);
        break;
     case CONF_PTBL_HTTP:
@@ -687,7 +691,7 @@ snmp_prfSysFn(variable_list * Var, long *ErrP)
        break;
     case PERF_SYS_CURLRUEXP:
        Answer->type = SMI_TIMETICKS;
-       *(Answer->val.integer) = (long) ((double) storeExpiredReferenceAge() / 86400.0);
+       *(Answer->val.integer) = (long) storeExpiredReferenceAge();
        break;
     case PERF_SYS_CURUNLREQ:
        *(Answer->val.integer) = (long) Counter.unlink.requests;
@@ -775,13 +779,18 @@ variable_list *
 snmp_prfProtoFn(variable_list * Var, long *ErrP)
 {
     variable_list *Answer;
+    static StatCounters *f=NULL;
+    static StatCounters *l=NULL;
+    double x;
+    int minutes;
 
     debug(49, 5) ("snmp_prfProtoFn: Processing request with magic %d!\n", Var->name[8]);
 
     Answer = snmp_var_new(Var->name, Var->name_length);
     *ErrP = SNMP_ERR_NOERROR;
 
-    if (Var->name[9] == 1) {   /* cacheProtoAggregateStats */
+    switch(Var->name[9]) { 
+    case PERF_PROTOSTAT_AGGR:  /* cacheProtoAggregateStats */
        Answer->type = SMI_COUNTER32;
        Answer->val_len = sizeof(long);
        Answer->val.integer = xmalloc(Answer->val_len);
@@ -795,6 +804,12 @@ snmp_prfProtoFn(variable_list * Var, long *ErrP)
        case PERF_PROTOSTAT_AGGR_HTTP_ERRORS:
            *(Answer->val.integer) = (long) Counter.client_http.errors;
            break;
+        case PERF_PROTOSTAT_AGGR_HTTP_KBYTES_IN:
+            *(Answer->val.integer) = (long) Counter.client_http.kbytes_in.kb;
+            break;
+        case PERF_PROTOSTAT_AGGR_HTTP_KBYTES_OUT:
+            *(Answer->val.integer) = (long) Counter.client_http.kbytes_out.kb;
+            break;
        case PERF_PROTOSTAT_AGGR_ICP_S:
            *(Answer->val.integer) = (long) Counter.icp.pkts_sent;
            break;
@@ -806,52 +821,88 @@ snmp_prfProtoFn(variable_list * Var, long *ErrP)
            break;
        case PERF_PROTOSTAT_AGGR_ICP_RKB:
            *(Answer->val.integer) = (long) Counter.icp.kbytes_recv.kb;
-           break;
+           break; 
+        case PERF_PROTOSTAT_AGGR_REQ:
+            *(Answer->val.integer) = (long) Counter.server.requests;
+            break;
+        case PERF_PROTOSTAT_AGGR_ERRORS:
+            *(Answer->val.integer) = (long) Counter.server.errors;
+            break;
        case PERF_PROTOSTAT_AGGR_KBYTES_IN:
-           *(Answer->val.integer) = (long) Counter.client_http.kbytes_in.kb;
+           *(Answer->val.integer) = (long) Counter.server.kbytes_in.kb;
            break;
        case PERF_PROTOSTAT_AGGR_KBYTES_OUT:
-           *(Answer->val.integer) = (long) Counter.client_http.kbytes_out.kb;
+           *(Answer->val.integer) = (long) Counter.server.kbytes_out.kb;
            break;
        case PERF_PROTOSTAT_AGGR_CURSWAP:
            *(Answer->val.integer) = (long) store_swap_size;
            break;
-       case PERF_PROTOSTAT_AGGR_HTTP_SVC_5:
-           Answer->type = ASN_INTEGER;
-           *(Answer->val.integer) = (long) get_median_svc(5, HTTP_SVC);
-           break;
-       case PERF_PROTOSTAT_AGGR_ICP_SVC_5:
-           Answer->type = ASN_INTEGER;
-           *(Answer->val.integer) = (long) get_median_svc(5, ICP_SVC);
-           break;
-       case PERF_PROTOSTAT_AGGR_DNS_SVC_5:
-           Answer->type = ASN_INTEGER;
-           *(Answer->val.integer) = (long) get_median_svc(5, DNS_SVC);
-           break;
-       case PERF_PROTOSTAT_AGGR_HTTP_SVC_60:
-           Answer->type = ASN_INTEGER;
-           *(Answer->val.integer) = (long) get_median_svc(60, HTTP_SVC);
-           break;
-       case PERF_PROTOSTAT_AGGR_ICP_SVC_60:
-           Answer->type = ASN_INTEGER;
-           *(Answer->val.integer) = (long) get_median_svc(60, ICP_SVC);
-           break;
-       case PERF_PROTOSTAT_AGGR_DNS_SVC_60:
-           Answer->type = ASN_INTEGER;
-           *(Answer->val.integer) = (long) get_median_svc(60, DNS_SVC);
-           break;
        default:
+#if 0
            xfree(Answer->val.integer);
+#endif
            *ErrP = SNMP_ERR_NOSUCHNAME;
            snmp_var_free(Answer);
            return (NULL);
        }
-    } else {
-       *ErrP = SNMP_ERR_NOSUCHNAME;
-       snmp_var_free(Answer);
-       return (NULL);
+       return Answer;
+    case PERF_PROTOSTAT_MEDIAN:
+       
+       minutes= Var->name[12];
+
+       f= snmpStatGet(0);
+        l= snmpStatGet(minutes);
+
+       debug(49,8)("median: min= %d, %d l= %x , f = %x\n",minutes, 
+                       Var->name[11], l, f);
+       Answer->type = SMI_INTEGER;
+       Answer->val_len = sizeof(long);
+       Answer->val.integer = xmalloc(Answer->val_len);
+
+       debug(49,8)("median: l= %x , f = %x\n",l, f);
+       switch (Var->name[11]) {
+               case PERF_MEDIAN_TIME:
+                       x= minutes;
+                       break;
+               case PERF_MEDIAN_HTTP_ALL:
+                       x = statHistDeltaMedian(&l->client_http.all_svc_time,
+                               &f->client_http.all_svc_time);
+                       break;
+               case PERF_MEDIAN_HTTP_MISS:
+                       x = statHistDeltaMedian(&l->client_http.miss_svc_time,
+                               &f->client_http.miss_svc_time);
+                       break;
+               case PERF_MEDIAN_HTTP_NM:
+                       x = statHistDeltaMedian(&l->client_http.nm_svc_time,
+                               &f->client_http.nm_svc_time);
+                       break;
+               case PERF_MEDIAN_HTTP_HIT:
+                       x = statHistDeltaMedian(&l->client_http.hit_svc_time,
+                               &f->client_http.hit_svc_time);
+                       break;
+               case PERF_MEDIAN_ICP_QUERY:
+                       x = statHistDeltaMedian(&l->icp.query_svc_time, &f->icp.query_svc_time);
+                       break;
+               case PERF_MEDIAN_ICP_REPLY:
+                       x = statHistDeltaMedian(&l->icp.reply_svc_time, &f->icp.reply_svc_time);
+                       break;
+               case PERF_MEDIAN_DNS:
+                       x = statHistDeltaMedian(&l->dns.svc_time, &f->dns.svc_time);
+                       break;
+               default:
+#if 0
+                       xfree(Answer->val.integer);
+#endif
+                       *ErrP = SNMP_ERR_NOSUCHNAME;
+                       snmp_var_free(Answer);
+                       return (NULL);
+       }
+       *(Answer->val.integer) = (long) x;
+       return Answer;
     }
-    return Answer;
+    *ErrP = SNMP_ERR_NOSUCHNAME;
+    snmp_var_free(Answer);
+    return (NULL);
 }
 
 
index f3c2cd3214e3774e5be896c2767e6b4467705489..d74b506ccdaf8b07c9a5cb8ee21cbf8fd3a21a3e 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: stat.cc,v 1.208 1998/02/25 23:56:54 rousskov Exp $
+ * $Id: stat.cc,v 1.209 1998/02/26 09:01:16 kostas Exp $
  *
  * DEBUG: section 18    Cache Manager Statistics
  * AUTHOR: Harvest Derived
@@ -134,7 +134,9 @@ static void info_get_mallstat(int, int, StoreEntry *);
 /*
  * An hour's worth, plus the 'current' counter
  */
+#if 0 /* moved to defines.h to get from snmp_oidlist.c */
 #define N_COUNT_HIST 61
+#endif 
 StatCounters CountHist[N_COUNT_HIST];
 static int NCountHist = 0;
 
@@ -891,3 +893,9 @@ get_median_svc(int interval, int which)
     }
     return (int) x;
 }
+
+StatCounters *
+snmpStatGet(int minutes)
+{
+  return &CountHist[minutes];
+}