enum {
PERF_PROTOSTAT_START,
PERF_PROTOSTAT_AGGR,
+ PERF_PROTOSTAT_MEDIAN,
PERF_PROTOSTAT_END
};
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,
void init_mib(char *file)
{
- snmplib_debug(6, "init_mib: Called.\n");
if (Mib != NULL)
return;
/*
- * $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
{
static char buff[256];
static char *tokens[10], *p;
+
if (Mib == NULL) {
if (Config.Snmp.mibPath)
init_mib(Config.Snmp.mibPath);
#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"
/*
- * $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
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:
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;
/*
- * $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
}
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;
-- 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 }
--
/*
- * $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
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;
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;
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);
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);
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)) {
/* 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);
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:
snmp_var_free(Answer);
return (NULL);
}
+ break;
case CONF_LOG_LVL:
if (!(cp = Config.debugOptions))
cp = "None";
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:
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;
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);
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;
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);
}
/*
- * $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
/*
* 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;
}
return (int) x;
}
+
+StatCounters *
+snmpStatGet(int minutes)
+{
+ return &CountHist[minutes];
+}