On Mon, 21 Jan 2002, Artem wrote:

> Проверялось просто: через iptables подсчитали трафик с порта 3128 на
> ip юзеров.
>
> У человека по логу Oops'a: 710MB (это на 1kb/sec за 3 дня)
> По iptables: 120MB.
>
> Получается, что толку от логов .. хмм .. мало - мягко говоря.
> Надеюсь, что авторы разберутся и пофиксят эту проблему к следующему
> релизу.

проблема известна и состоит том, что в лог пишется полный размер отданного
файла, даже если скачивание клиентом и было прервано.
Мы натолкнулись на это при использовании oops в http accelerator режиме.

Некоторое приближение к реальным цифрам (снятым с интерфейса) дает патч в
аттаче, но добайтно все равно не сходится :(

*** WBR, Alexey Zakirov ([EMAIL PROTECTED])
diff -ruN oops-1.5.18.p2/src/lib.c oops-1.5.18.tp2/src/lib.c
--- oops-1.5.18.p2/src/lib.c    Wed Aug 29 14:49:52 2001
+++ oops-1.5.18.tp2/src/lib.c   Wed Aug 29 14:15:05 2001
@@ -192,7 +192,8 @@
     meth       = rq->method;
     tag                = rq->tag;
     hierarchy  = rq->hierarchy;
-    size       = rq->received;
+    /* size    = rq->received; */
+    size       = rq->doc_sent;
     code       = rq->code;
 
     if ( obj && obj->headers && (content = attr_value(obj->headers, "Content-Type")) 
) {
@@ -245,6 +246,8 @@
                         + strlen(content) + strlen(source)
                         + strlen(user) + 128);
     if ( sbuf && urlp ) {
+       if ( size < 0 )
+           size = 0;
        sprintf(sbuf, "%u.000 %d %s %s/%d %d %s %-.128s %s %s/%s %s\n",
        (unsigned)global_sec_timer, elapsed, s,
        tag, code, size, meth, urlp, user,
diff -ruN oops-1.5.18.p2/src/modules/custom_log.c 
oops-1.5.18.tp2/src/modules/custom_log.c
--- oops-1.5.18.p2/src/modules/custom_log.c     Wed Aug 29 14:49:52 2001
+++ oops-1.5.18.tp2/src/modules/custom_log.c    Wed Aug 29 14:14:07 2001
@@ -170,7 +170,10 @@
                    /* bytes sent (actualy received)    */
                    {
                    char w[20];
-                   sprintf(w,"%u", rq->received);
+                   /* sprintf(w,"%u", rq->received); */
+                   if ( rq->doc_sent < 0 )
+                       rq->doc_sent = 0;
+                   sprintf(w,"%u", rq->doc_sent);
                    strncat(d, w, sizeof(res)-(d-res)-2);
                    d+= MIN(strlen(w), sizeof(res)-(d-res)-2) - 1;
                    }


Дати відповідь електронним листом