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", s1); + else + printf("%8s", s1); + break; + } 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); }