[php] / [webalizer] onverklaarbare verschillen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 16:30
Hi

Ik snap er niks van :P

Op 1 van onze servers draait precies 1 project, een grote medialibrary. Op die server staat webalizer geinstalleerd die -per virtual- alle datatransfers logt.

So far so good. De webalizer heeft over de maand oktober tot nu toe zo'n 162GB aan datatransfer gelogd. Niet ondenkbaar.

Nu heb ik in de medialibrary applicatie een statistiek logger gemaakt, die van ieder mediabestand bij downloaden de filesize opvraagt, en deze in een (mysql) database samen met wat andere statistische gegevens opslaat.

Nu komt 't: Mijn applicatie logt over dezelfde periode 'slechts' 83GB .. da's bijna de helft van wat webalizer logt !

Ik vraag me dus af waar die verschillen vandaan komen!

Bestanden die gedownload worden worden -altijd- via dit script gedownload:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$productID = intval($_GET['productID']); // which product
$lngID = intval($_GET['lngID']); // language version of the brochure
$countryID = intval($_GET['countryID']); 
$btype = intval($_GET['btype']);

$query  = "select location from brochure where productID = $productID and languageID = $lngID ";
$query .= "and btype = $btype ";
$db->query($query);
if ($db->next_record() ) {
    $loc = $db->f('location');
    $fullPath = $config['DLDir'].$loc;

    if (file_exists($fullPath)) {
        $fsize = intval(filesize($fullPath));
        $stat = new Statistic;
        $stat->log($productID, $countryID, $lngID, $btype, $fsize);

        $loc = $config['pdfs'].$loc;
        header( "Content-Disposition: attachment; filename=$loc" );
        header( "Content-type: application/octet-stream;");
        $url = $config["URL"].substr($loc,1);
        Header("Location: $url");
    } else {
        echo "Sorry, Brochure: $loc does not exist";
    }
} else {
    $msg = "Sorry, Brochure with ID: $productID and languageID: $lngID does not exist";
    echo $msg;
}


En de log functie in Statistic:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    function log($productID, $countryID, $lngID, $version, $fsize) {
        global $languageID; // session value

        $languageID = intval($languageID); // languageDisplay inside the Library
        if ($languageID == 0) {
            $languageUD = $countryID;
        }
        $now = intval(date('Ymd'));
        // select number of downloads of this product, version, language & languagedisplay (country) made today
        $query  = "select count(*) as cnt from statistics ";
        $query .= "where productID = $productID ";
        $query .= "and version = $version ";
        $query .= "and typeID = 1 ";
        $query .= "and languageID = $lngID ";
        $query .= "and languageDisplayID = $languageID ";
        $query .= "and getDate = $now ";
        $this->db->query($query);
        $this->db->next_record();
        $cnt = $this->db->f('cnt');
        if ($cnt == 0) {
            // no downloads today, enter new record
            $ts = time();
            $query  = "insert into statistics (statisticID,productID, typeID, version, languageDisplayID, languageID, ";
            $query .= "counter, totalsize, getDate) values ($ts, $productID, 1, $version, $languageID, $lngID, ";
            $query .= "1, $fsize, $now) ";
            $this->db->query($query);
        } else {
            // update data for today's download.
            $query  = "update statistics set counter = counter + 1, totalsize = totalsize + $fsize, getDate = $now ";
            $query .= "where productID = $productID ";
            $query .= "and version = $version ";
            $query .= "and typeID = 1 ";
            $query .= "and languageID = $lngID ";
            $query .= "and languageDisplayID = $languageID ";
            $query .= "and getDate = $now ";
            $this->db->query($query);
        }
    }


Als er een fout optreedt in een query krijg ik automatisch een mailtje. Die heb ik niet gehad. Ik kan er dus alleen maar vanuit gaan dat alle queries gedaan worden.

Als het inserten van records in de statistieken ga testen, werkt 't in alle gevallen die ik kan verzinnen prima; op 't moment dat er een file gedownload wordt, wordt deze ook gelogged.

ERGENS verlies ik dus toch zo'n 80GB aan data. De hele applicatie, de html , css en alle requests eromheen zorgen natuurlijk wel voor wat overhead die wel door webalizer gelogged worden als datatransfer, maar natuurlijk niet in de library stats terugkomen. Ik schat dit zelf -al aan de hoge kant- op zo'n 5GB per maand; not nearly enough to cover die 80GB dus.

Mis ik hier nu iets heel triviaals? Ben ik zo vreselijk n00by bezig, of rekent webalizer compleet anders dan bovenstaande code ?

Iemand met ervaring, verstand en/of inzicht in dit raadsel !?

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Vergis je niet in je 'overhead', een zooi suffe gifjes veroorzaken nogal wat verkeer, al helemaal als er een zooi cookies e.d. meegestuurd worden en als er flink wat pageviews zijn.

Kan je niet eens de webalizer en database stats pakken samen met de logfile van je server. Dan laat je ff wat perl/grep/cut/whatever op je logfile los om alleen die regels te pakken die over downloads gaan (die ook in je DB zouden moeten staan) en je telt dan alle transfers bij elkaar op. Daarna kijk je of je script of webalizer goed zat :)

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
In webalizer kun je toch ook zien welke bestanden het meest zijn opgevraagd?
Is er niet een enorme index-pagina vol met thumnails en ander beeldmateriaal welke regelmatig wordt bekeken?

En mocht je inderdaad 80GB aan html/css/etc verkeer hebben zou ik eens naar mod_gzip kijken :X ;)

[ Voor 10% gewijzigd door frickY op 17-10-2004 22:14 ]


Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 16:30
U vraagt, wij draaien :P
de top 10 hits:
# - hits - % - KB - % - URL
1 1118175 22.07% 1178368 0.72% /site.php
2 443703 8.76% 881762 0.54% /product.php
3 292861 5.78% 1009861 0.61% /style.css
4 216881 4.28% 264321 0.16% /left.php
5 202148 3.99% 215770 0.13% /index2.php
6 163337 3.22% 57992 0.04% /top.html
7 148388 2.93% 943284 0.57% /category.php
8 132727 2.62% 105661 0.06% /
9 86865 1.71% 28941 0.02% /left.html
10 65657 1.30% 7590 0.00% /nav_home.php

valt dus in principe reuze mee, afgezien van 't feit dat die stylesheet absoluut compacter kan :X

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Die stylesheet komt niet in jouw custom logging systeem. Verder moet je er vanuit gaan dat alle gifjes ed. door je webserver geserveerd worden; met bijbehorende 403 headers :) Webalizer telt een dergelijke request echter gewoon mee.

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 16:30
Spider.007 schreef op 17 oktober 2004 @ 22:36:
Die stylesheet komt niet in jouw custom logging systeem. Verder moet je er vanuit gaan dat alle gifjes ed. door je webserver geserveerd worden; met bijbehorende 403 headers :) Webalizer telt een dergelijke request echter gewoon mee.
Klopt,

Op iedere pagina wordt die stylesheet geinclude, wat tot gevolg heeft dat er 1GB extra datatransfer is die WEL in de webalizer gelogd wordt, maar (inderdaad) NIET in mijn stats.

dan hebben we dus ongeveer 1,3% van de totale afwijking (80 GB) :X

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

TheDane schreef op 17 oktober 2004 @ 22:24:
[...]
valt dus in principe reuze mee, afgezien van 't feit dat die stylesheet absoluut compacter kan :X
CSS wordt in de meeste gevallen ook clientside gecached; als ik het aantal KB deel door het aantal requests kom ik nog niet eens op 4KB per request. De huidige CSS van GoT is 11KB en voor de nieuwe layout 33KB, maar daar maak ik me verder geen zorgen over ;)
Verder weet ik ook niet hoe webalizer rekent; of hij voor ieder request inderdaad de volledige filesize meetelt ook al geeft je webserver enkel een 403 terug, of dat hij daar rekening mee houdt.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

crisp schreef op 17 oktober 2004 @ 22:41:
[...]

Verder weet ik ook niet hoe webalizer rekent; of hij voor ieder request inderdaad de volledige filesize meetelt ook al geeft je webserver enkel een 403 terug, of dat hij daar rekening mee houdt.
Hij telt het mee in zijn totalen. Dat is dus iets wat je in theorie er weer vanaf mag halen; alleen de berekening daarvan zou lastig kunnen zijn :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate

Pagina: 1