From: wessels <>
Date: Sat, 14 Sep 1996 05:16:36 +0000 (+0000)
Subject: - Added setting cachemgr.cgi fields from query string
X-Git-Tag: SQUID_3_0_PRE1~5807
X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a528eb8716a8fd4aa2340ddb3fa6f1da75f017e8;p=thirdparty%2Fsquid.git
- Added setting cachemgr.cgi fields from query string
(Neil Murray).
- Split log type TCP_IFMODSINCE into TCP_IMS_HIT and
TCP_IMS_MISS
- Replaced proto_hit() and proto_miss() with proto_count()
which looks at log_type argument to calcultate hits
and misses.
- Split CacheInfo into HTTPCacheInfo and ICPCacheInfo.
- Placed call to proto_count() just after log_append()
so we only need it in one place.
- Made a lot of proto.c functions static and added prototypes.
---
diff --git a/src/cachemgr.cc b/src/cachemgr.cc
index bfce415bb8..d1e3274b75 100644
--- a/src/cachemgr.cc
+++ b/src/cachemgr.cc
@@ -1,6 +1,6 @@
/*
- * $Id: cachemgr.cc,v 1.18 1996/09/13 18:51:21 wessels Exp $
+ * $Id: cachemgr.cc,v 1.19 1996/09/13 23:16:36 wessels Exp $
*
* DEBUG: Section 0 CGI Cache Manager
* AUTHOR: Harvest Derived
@@ -830,6 +830,7 @@ int main(int argc, char *argv[])
/* Have an element of the list, so parse reserve[] accordingly */
if (p_state == 3) {
+ int sn;
switch (op) {
case INFO:
case CACHED:
@@ -862,8 +863,15 @@ int main(int argc, char *argv[])
break;
case STATS_U:
p_state = 1;
- sscanf(reserve, "%s %d %d %d %d %f %d %d %d",
+ sn = sscanf(reserve, "%s %d %d %d %d %f %d %d %d",
s1, &d1, &d2, &d3, &d4, &f1, &d5, &d6, &d7);
+ if (sn == 1) {
+ if (hasTables)
+ printf("
| %s | %d | %d | %d | %d | %4.2f | %d | %d | %d",
s1, d1, d2, d3, d4, f1, d5, d6, d7);
diff --git a/src/main.cc b/src/main.cc
index 56470d462d..8819c8683c 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -1,5 +1,5 @@
/*
- * $Id: main.cc,v 1.71 1996/09/12 22:17:59 wessels Exp $
+ * $Id: main.cc,v 1.72 1996/09/13 23:16:39 wessels Exp $
*
* DEBUG: section 1 Startup and Main Loop
* AUTHOR: Harvest Derived
@@ -481,7 +481,8 @@ static void mainInitialize()
if (first_time) {
/* module initialization */
urlInitialize();
- stat_init(&CacheInfo, Config.Log.access);
+ stat_init(&HTTPCacheInfo, Config.Log.access);
+ stat_init(&ICPCacheInfo, NULL);
storeInit();
if (Config.effectiveUser) {
diff --git a/src/neighbors.cc b/src/neighbors.cc
index bf7b5e71e2..69650dc9ba 100644
--- a/src/neighbors.cc
+++ b/src/neighbors.cc
@@ -1,5 +1,5 @@
/*
- * $Id: neighbors.cc,v 1.48 1996/09/12 03:24:06 wessels Exp $
+ * $Id: neighbors.cc,v 1.49 1996/09/13 23:16:40 wessels Exp $
*
* DEBUG: section 15 Neighbor Routines
* AUTHOR: Harvest Derived
@@ -465,7 +465,8 @@ int neighborsUdpPing(proto)
&e->in_addr,
entry->flag,
ICP_OP_DECHO,
- LOG_TAG_NONE);
+ LOG_TAG_NONE,
+ PROTO_NONE);
} else {
e->header.reqnum = reqnum;
icpUdpSend(theOutIcpConnection,
@@ -474,7 +475,8 @@ int neighborsUdpPing(proto)
&e->in_addr,
entry->flag,
ICP_OP_QUERY,
- LOG_TAG_NONE);
+ LOG_TAG_NONE,
+ PROTO_NONE);
}
e->stats.ack_deficit++;
@@ -517,7 +519,8 @@ int neighborsUdpPing(proto)
&to_addr,
entry->flag,
ICP_OP_SECHO,
- LOG_TAG_NONE);
+ LOG_TAG_NONE,
+ PROTO_NONE);
} else {
debug(15, 6, "neighborsUdpPing: Source Ping: unknown host: %s\n",
host);
diff --git a/src/stat.cc b/src/stat.cc
index 87a4dfb40c..ff4986568b 100644
--- a/src/stat.cc
+++ b/src/stat.cc
@@ -1,5 +1,5 @@
/*
- * $Id: stat.cc,v 1.65 1996/09/13 20:50:51 wessels Exp $
+ * $Id: stat.cc,v 1.66 1996/09/13 23:16:42 wessels Exp $
*
* DEBUG: section 18 Cache Manager Statistics
* AUTHOR: Harvest Derived
@@ -134,12 +134,40 @@ char *diskFileName();
/* LOCALS */
char *open_bracket = "{\n";
char *close_bracket = "}\n";
+
+static void dummyhandler _PARAMS((cacheinfo *, StoreEntry *));
+static void info_get _PARAMS((cacheinfo *, StoreEntry *));
+static void info_get_mallstat _PARAMS((int, int, StoreEntry *));
+static void logReadEndHandler _PARAMS((int, int, log_read_data_t *));
+static void log_clear _PARAMS((cacheinfo *, StoreEntry *));
+static void log_disable _PARAMS((cacheinfo *, StoreEntry *));
+static void log_enable _PARAMS((cacheinfo *, StoreEntry *));
+static void log_get_start _PARAMS((cacheinfo *, StoreEntry *));
+static void log_status_get _PARAMS((cacheinfo *, StoreEntry *));
+static void parameter_get _PARAMS((cacheinfo *, StoreEntry *));
+static void proto_count _PARAMS((cacheinfo *, protocol_t, log_type));
+static void proto_newobj _PARAMS((cacheinfo *, protocol_t, int, int));
+static void proto_purgeobj _PARAMS((cacheinfo *, protocol_t, int));
+static void proto_touchobj _PARAMS((cacheinfo *, protocol_t, int));
+static void server_list _PARAMS((cacheinfo *, StoreEntry *));
+static void squidReadEndHandler _PARAMS((int, int, squid_read_data_t *));
+static void squid_get_start _PARAMS((cacheinfo *, StoreEntry *));
static void statFiledescriptors _PARAMS((StoreEntry *));
+static void stat_get _PARAMS((cacheinfo *, char *req, StoreEntry *));
+static void stat_io_get _PARAMS((StoreEntry *));
+static void stat_obj _PARAMS((cacheinfo *, StoreEntry *, int vm_or_not));
+static void stat_utilization_get _PARAMS((cacheinfo *, StoreEntry *, char *desc));
+static int cache_size_get _PARAMS((cacheinfo *));
+static int logReadHandler _PARAMS((int, char *, int, log_read_data_t *));
+static int squidReadHandler _PARAMS((int, char *, int, squid_read_data_t *));
+static int memoryAccounted _PARAMS((void));
+static int mallinfoTotal _PARAMS((void));
/* process utilization information */
-void stat_utilization_get(obj, sentry)
+static void stat_utilization_get(obj, sentry, desc)
cacheinfo *obj;
StoreEntry *sentry;
+ char *desc;
{
protocol_t proto_id;
proto_stat *p = &obj->proto_stat_data[PROTO_MAX];
@@ -147,9 +175,7 @@ void stat_utilization_get(obj, sentry)
int secs = 0;
secs = (int) (squid_curtime - squid_starttime);
-
- storeAppendPrintf(sentry, open_bracket);
-
+ storeAppendPrintf(sentry, "{ %s\n", desc); /* } */
strcpy(p->protoname, "TOTAL");
p->object_count = 0;
p->kb.max = 0;
@@ -160,12 +186,9 @@ void stat_utilization_get(obj, sentry)
p->miss = 0;
p->refcount = 0;
p->transferbyte = 0;
-
-
/* find the total */
for (proto_id = PROTO_NONE; proto_id < PROTO_MAX; ++proto_id) {
q = &obj->proto_stat_data[proto_id];
-
p->object_count += q->object_count;
p->kb.max += q->kb.max;
p->kb.min += q->kb.min;
@@ -176,7 +199,6 @@ void stat_utilization_get(obj, sentry)
p->refcount += q->refcount;
p->transferbyte += q->transferbyte;
}
-
/* dump it */
for (proto_id = PROTO_NONE; proto_id <= PROTO_MAX; ++proto_id) {
p = &obj->proto_stat_data[proto_id];
@@ -197,11 +219,10 @@ void stat_utilization_get(obj, sentry)
p->refcount,
p->transferbyte);
}
-
storeAppendPrintf(sentry, close_bracket);
}
-void stat_io_get(sentry)
+static void stat_io_get(sentry)
StoreEntry *sentry;
{
int i;
@@ -273,7 +294,7 @@ void stat_io_get(sentry)
/* return total bytes of all registered and known objects.
* may not reflect the retrieving object....
* something need to be done here to get more accurate cache size */
-int cache_size_get(obj)
+static int cache_size_get(obj)
cacheinfo *obj;
{
int size = 0;
@@ -285,7 +306,7 @@ int cache_size_get(obj)
}
/* process objects list */
-void stat_objects_get(obj, sentry, vm_or_not)
+static void stat_objects_get(obj, sentry, vm_or_not)
cacheinfo *obj;
StoreEntry *sentry;
int vm_or_not;
@@ -330,7 +351,7 @@ void stat_objects_get(obj, sentry, vm_or_not)
/* process a requested object into a manager format */
-void stat_get(obj, req, sentry)
+static void stat_get(obj, req, sentry)
cacheinfo *obj;
char *req;
StoreEntry *sentry;
@@ -349,7 +370,8 @@ void stat_get(obj, req, sentry)
} else if (strcmp(req, "redirector") == 0) {
redirectStats(sentry);
} else if (strcmp(req, "utilization") == 0) {
- stat_utilization_get(obj, sentry);
+ stat_utilization_get(HTTPCacheInfo, sentry, "HTTP");
+ stat_utilization_get(ICPCacheInfo, sentry, "ICP");
} else if (strcmp(req, "io") == 0) {
stat_io_get(sentry);
} else if (strcmp(req, "reply_headers") == 0) {
@@ -361,7 +383,7 @@ void stat_get(obj, req, sentry)
/* generate logfile status information */
-void log_status_get(obj, sentry)
+static void log_status_get(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -377,7 +399,7 @@ void log_status_get(obj, sentry)
/* log convert handler */
/* call for each line in file, use fileWalk routine */
-int logReadHandler(fd_unused, buf, size_unused, data)
+static int logReadHandler(fd_unused, buf, size_unused, data)
int fd_unused;
char *buf;
int size_unused;
@@ -389,7 +411,7 @@ int logReadHandler(fd_unused, buf, size_unused, data)
/* log convert end handler */
/* call when a walk is completed or error. */
-void logReadEndHandler(fd, errflag_unused, data)
+static void logReadEndHandler(fd, errflag_unused, data)
int fd;
int errflag_unused;
log_read_data_t *data;
@@ -403,7 +425,7 @@ void logReadEndHandler(fd, errflag_unused, data)
/* start converting logfile to processed format */
-void log_get_start(obj, sentry)
+static void log_get_start(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -436,7 +458,7 @@ void log_get_start(obj, sentry)
/* squid convert handler */
/* call for each line in file, use fileWalk routine */
-int squidReadHandler(fd_unused, buf, size_unused, data)
+static int squidReadHandler(fd_unused, buf, size_unused, data)
int fd_unused;
char *buf;
int size_unused;
@@ -448,7 +470,7 @@ int squidReadHandler(fd_unused, buf, size_unused, data)
/* squid convert end handler */
/* call when a walk is completed or error. */
-void squidReadEndHandler(fd_unused, errflag_unused, data)
+static void squidReadEndHandler(fd_unused, errflag_unused, data)
int fd_unused;
int errflag_unused;
squid_read_data_t *data;
@@ -461,7 +483,7 @@ void squidReadEndHandler(fd_unused, errflag_unused, data)
/* start convert squid.conf file to processed format */
-void squid_get_start(obj, sentry)
+static void squid_get_start(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -476,14 +498,14 @@ void squid_get_start(obj, sentry)
}
-void dummyhandler(obj, sentry)
+static void dummyhandler(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
storeAppendPrintf(sentry, "{ \"Not_Implemented_yet.\"}\n");
}
-void server_list(obj, sentry)
+static void server_list(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -541,7 +563,7 @@ void server_list(obj, sentry)
}
#if XMALLOC_STATISTICS
-void info_get_mallstat(size, number, sentry)
+static void info_get_mallstat(size, number, sentry)
int size, number;
StoreEntry *sentry;
{
@@ -622,7 +644,7 @@ static void statFiledescriptors(sentry)
storeAppendPrintf(sentry, close_bracket);
}
-int memoryAccounted()
+static int memoryAccounted()
{
return (int)
meta_data.store_entries * sizeof(StoreEntry) +
@@ -637,7 +659,7 @@ int memoryAccounted()
meta_data.misc;
}
-int mallinfoTotal()
+static int mallinfoTotal()
{
int total = 0;
#if HAVE_MALLINFO
@@ -648,7 +670,7 @@ int mallinfoTotal()
return total;
}
-void info_get(obj, sentry)
+static void info_get(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -840,7 +862,7 @@ void info_get(obj, sentry)
storeAppendPrintf(sentry, close_bracket);
}
-void parameter_get(obj, sentry)
+static void parameter_get(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -975,9 +997,9 @@ char *log_quote(header)
#if LOG_FULL_HEADERS
-void log_append(obj, url, caddr, size, action, method, http_code, msec, ident, hierData, request_hdr, reply_hdr)
+static void log_append(obj, url, caddr, size, action, method, http_code, msec, ident, hierData, request_hdr, reply_hdr)
#else
-void log_append(obj, url, caddr, size, action, method, http_code, msec, ident, hierData)
+static void log_append(obj, url, caddr, size, action, method, http_code, msec, ident, hierData)
#endif /* LOG_FULL_HEADERS */
cacheinfo *obj;
char *url;
@@ -1074,7 +1096,7 @@ void log_append(obj, url, caddr, size, action, method, http_code, msec, ident, h
}
}
-void log_enable(obj, sentry)
+static void log_enable(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -1094,7 +1116,7 @@ void log_enable(obj, sentry)
storeAppendPrintf(sentry, " ");
}
-void log_disable(obj, sentry)
+static void log_disable(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -1108,7 +1130,7 @@ void log_disable(obj, sentry)
-void log_clear(obj, sentry)
+static void log_clear(obj, sentry)
cacheinfo *obj;
StoreEntry *sentry;
{
@@ -1130,7 +1152,7 @@ void log_clear(obj, sentry)
-void proto_newobject(obj, proto_id, size, restart)
+static void proto_newobject(obj, proto_id, size, restart)
cacheinfo *obj;
protocol_t proto_id;
int size;
@@ -1150,7 +1172,7 @@ void proto_newobject(obj, proto_id, size, restart)
}
-void proto_purgeobject(obj, proto_id, size)
+static void proto_purgeobject(obj, proto_id, size)
cacheinfo *obj;
protocol_t proto_id;
int size;
@@ -1167,7 +1189,7 @@ void proto_purgeobject(obj, proto_id, size)
}
/* update stat for each particular protocol when an object is fetched */
-void proto_touchobject(obj, proto_id, size)
+static void proto_touchobject(obj, proto_id, size)
cacheinfo *obj;
protocol_t proto_id;
int size;
@@ -1176,18 +1198,23 @@ void proto_touchobject(obj, proto_id, size)
obj->proto_stat_data[proto_id].transferbyte += (1023 + size) >> 10;
}
-void proto_hit(obj, proto_id)
+static void proto_count(obj, proto_id, type)
cacheinfo *obj;
protocol_t proto_id;
+ log_type type;
{
- obj->proto_stat_data[proto_id].hit++;
-}
-
-void proto_miss(obj, proto_id)
- cacheinfo *obj;
- protocol_t proto_id;
-{
- obj->proto_stat_data[proto_id].miss++;
+ switch (type) {
+ case LOG_TCP_HIT:
+ case LOG_TCP_IMS_HIT:
+ case LOG_TCP_EXPIRED_HIT:
+ case LOG_UDP_HIT:
+ case LOG_UDP_HIT_OBJ:
+ obj->proto_stat_data[proto_id].hit++;
+ break;
+ default:
+ obj->proto_stat_data[proto_id].miss++;
+ break;
+ }
}
@@ -1199,7 +1226,6 @@ void stat_init(object, logfilename)
int i;
debug(18, 5, "stat_init: Initializing...\n");
-
obj = xcalloc(1, sizeof(cacheinfo));
obj->stat_get = stat_get;
obj->info_get = info_get;
@@ -1214,23 +1240,22 @@ void stat_init(object, logfilename)
obj->squid_get_start = squid_get_start;
obj->parameter_get = parameter_get;
obj->server_list = server_list;
-
- xmemcpy(obj->logfilename, logfilename, (int) (strlen(logfilename) + 1) % 256);
- obj->logfile_fd = file_open(obj->logfilename, NULL, O_WRONLY | O_CREAT);
- if (obj->logfile_fd == DISK_ERROR) {
- debug(18, 0, "%s: %s\n", obj->logfilename, xstrerror());
- fatal("Cannot open logfile.");
+ if (logfilename) {
+ memset(obj->logfilename, '0', MAX_FILE_NAME_LEN);
+ strncpy(obj->logfilename, logfilename, MAX_FILE_NAME_LEN - 1);
+ obj->logfile_fd = file_open(obj->logfilename, NULL, O_WRONLY | O_CREAT);
+ if (obj->logfile_fd == DISK_ERROR) {
+ debug(18, 0, "%s: %s\n", obj->logfilename, xstrerror());
+ fatal("Cannot open logfile.");
+ }
+ obj->logfile_access = file_write_lock(obj->logfile_fd);
}
- obj->logfile_access = file_write_lock(obj->logfile_fd);
-
obj->proto_id = urlParseProtocol;
obj->proto_newobject = proto_newobject;
obj->proto_purgeobject = proto_purgeobject;
obj->proto_touchobject = proto_touchobject;
- obj->proto_hit = proto_hit;
- obj->proto_miss = proto_miss;
+ obj->proto_count = proto_count;
obj->NotImplement = dummyhandler;
-
for (i = PROTO_NONE; i <= PROTO_MAX; i++) {
switch (i) {
case PROTO_HTTP:
@@ -1263,14 +1288,11 @@ void stat_init(object, logfilename)
obj->proto_stat_data[i].transferrate = 0;
obj->proto_stat_data[i].refcount = 0;
obj->proto_stat_data[i].transferbyte = 0;
-
obj->proto_stat_data[i].kb.max = 0;
obj->proto_stat_data[i].kb.min = 0;
obj->proto_stat_data[i].kb.avg = 0;
obj->proto_stat_data[i].kb.now = 0;
-
}
-
*object = obj;
}
@@ -1388,7 +1410,7 @@ void stat_rotate_log()
LOCAL_ARRAY(char, to, MAXPATHLEN);
char *fname = NULL;
- if ((fname = CacheInfo->logfilename) == NULL)
+ if ((fname = HTTPCacheInfo->logfilename) == NULL)
return;
debug(18, 1, "stat_rotate_log: Rotating\n");
@@ -1407,17 +1429,17 @@ void stat_rotate_log()
}
/* Close and reopen the log. It may have been renamed "manually"
* before HUP'ing us. */
- file_close(CacheInfo->logfile_fd);
- CacheInfo->logfile_fd = file_open(fname, NULL, O_WRONLY | O_CREAT);
- if (CacheInfo->logfile_fd == DISK_ERROR) {
+ file_close(HTTPCacheInfo->logfile_fd);
+ HTTPCacheInfo->logfile_fd = file_open(fname, NULL, O_WRONLY | O_CREAT);
+ if (HTTPCacheInfo->logfile_fd == DISK_ERROR) {
debug(18, 0, "stat_rotate_log: Cannot open logfile: %s\n", fname);
- CacheInfo->logfile_status = LOG_DISABLE;
+ HTTPCacheInfo->logfile_status = LOG_DISABLE;
fatal("Cannot open logfile.");
}
- CacheInfo->logfile_access = file_write_lock(CacheInfo->logfile_fd);
+ HTTPCacheInfo->logfile_access = file_write_lock(HTTPCacheInfo->logfile_fd);
}
void statCloseLog()
{
- file_close(CacheInfo->logfile_fd);
+ file_close(HTTPCacheInfo->logfile_fd);
}
diff --git a/src/store.cc b/src/store.cc
index a1d38f3609..eb6a4b766e 100644
--- a/src/store.cc
+++ b/src/store.cc
@@ -1,6 +1,6 @@
/*
- * $Id: store.cc,v 1.106 1996/09/12 22:18:00 wessels Exp $
+ * $Id: store.cc,v 1.107 1996/09/13 23:16:44 wessels Exp $
*
* DEBUG: section 20 Storeage Manager
* AUTHOR: Harvest Derived
@@ -1315,7 +1315,7 @@ void storeSwapOutHandle(fd, flag, e)
e->url, storeSwapFullPath(e->swap_file_number, NULL));
put_free_8k_page(mem->e_swap_buf);
storeSwapLog(e);
- CacheInfo->proto_newobject(CacheInfo,
+ HTTPCacheInfo->proto_newobject(HTTPCacheInfo,
mem->request->protocol,
e->object_len,
FALSE);
@@ -1538,7 +1538,7 @@ static int storeDoRebuildFromDisk(data)
timestamp,
lastmod);
storeSwapLog(e);
- CacheInfo->proto_newobject(CacheInfo,
+ HTTPCacheInfo->proto_newobject(HTTPCacheInfo,
urlParseProtocol(url),
(int) size,
TRUE);
@@ -1744,7 +1744,7 @@ void storeAbort(e, msg)
storeLockObject(e, NULL, NULL);
/* Count bytes faulted through cache but not moved to disk */
- CacheInfo->proto_touchobject(CacheInfo,
+ HTTPCacheInfo->proto_touchobject(HTTPCacheInfo,
mem->request ? mem->request->protocol : PROTO_NONE,
mem->e_current_len);
mk_mime_hdr(mime_hdr,
@@ -2195,7 +2195,7 @@ int storeRelease(e)
file_map_bit_reset(e->swap_file_number);
e->swap_file_number = -1;
store_swap_size -= (e->object_len + 1023) >> 10;
- CacheInfo->proto_purgeobject(CacheInfo,
+ HTTPCacheInfo->proto_purgeobject(HTTPCacheInfo,
urlParseProtocol(e->url),
e->object_len);
}
|