OpenStats - analýza sesbíraných dat
V jednom z předchozích článků byla popsána knihovna pro logování statistik - v tomto článku se podíváme na knihovnu pro analýzu těchto dat, čímž je míněna zejména agregace sesbíraných dat dle různých kritérií. Tato knihovna sice není volána přímo ale pouze prostřednictvím cronových skriptů, nicméně porozumění jejím "vnitřnostem" je užitečné při konfiguraci procesu analýzy. Podíváme se také na cronový skript a jeho konfiguraci.
Hlavním souborem této části je nepochybně samotná knihovna OpenStats_Analysis, tj. soubor lib/openstats_analysis.php. Funkce v něm obsažené lze rozdělit na dvě skupiny - funkce které mají na starosti aktualizaci informací o jednotlivých sessions (browser, země, ...), a funkce agregující data sesbíraná knihovnou OpenStats_Logging.
Aktualizace informací o sessions
Ať již využíváte možnost odložené detekce některých položek, nebo je určujete již při vytváření session, volají se tyto funkce:
- detectBrowser - detekce browseru na základě HTTP hlavičky User-Agent
- parseBrowserVersion - detekce verze browseru na základě HTTP hlavičky User-Agent
- detectCountry - detekce země (na základě IP adresy)
- detectArchitecture - detekce architektury na základě HTTP hlavičky User-Agent
- detectOperatingSystem - detekce operačního systému na základě HTTP hlavičky User-Agent
Tyto funkce jsou poměrně jednoduché - většinou porovnávají obsah HTTP hlavičky User-Agent s regulárními výrazy v tabulkách Architectures, Browsers a Operating_systems (viz. článek o databázové struktuře projektu OpenStats), případně na základě IP adresy. V případě úspěšného určení browseru je také z HTTP hlavičky User-Agent dále zjišťována verze.
Agregace sesbíraných dat
Hlavní součástí funkcí pro agregaci sesbíraných dat jsou v podstatě pouze jednoduchým SQL dotazem, který agreguje data z relevantních tabulek (vždy Actions a Sessions, případně další potřebné tabulky) a vkládá je to k tomu určených tabulek.
Všechny funkce agregují data dle všech časových intervalů (měsíc, týden, den), a jednotlivé funkce případně přidávají další parametry (stránka, browser, OS, apod.).
Aktuálně implementované funkce jsou (vždy :
- buildGlobalStats - žádné další parametry nejsou při agregaci využity
- buildStatsOfPages - agregace dat dle stránek (Actions.page_id)
- buildStatsOfActionTypes - agregace dat dle typů akcí (Actions.type_id)
- buildStatsOfBrowsers - agregace dat dle browseru (Sessions.browser_id)
- buildStatsOfArchitectures - agregace dat dle architektury (Sessions.arch_id)
- buildStatsOfOperatingSystems - agregace dat dle operačního systému (Sessions.os_id)
Není příliš složité implementovat další statistiky, případně rozšířit již existující (například implementace statistik vlastních parametrů).
Všechny uvedené funkce mají stejnou signaturu - tvoří ji následující parametry:
- dateFrom - počáteční datum (výzhozí hodnota "nyní")
- dateTo - koncové datum (výzhozí hodnota "nyní")
- buildDaily - generovat denní statistiky (výchozí hodnota "ano")
- buildWeekly - generovat týdenní statistiky (výchozí hodnota "ano")
- buildMonthly - generovat měsíční statistiky (výchozí hodnota "ano")
Vysvětlení si zaslouží zejména první dva parametry - počáteční a koncové datum. Tyto dva parametry slouží pro omezení rozsahu zpracovávaných dat (aplikovány jsou na sloupec Actions.action_date), nejsou však použita přímo ale skutečná časová omezení jsou z nich odvozena až pro jednotlivé typy statistik (denní, týdenní, měsíční).
- denní - od začátku dne obsahujícího dateFrom do konce dne obsahujícího dateTo
- týdenní - od začátku týdne obsahujícího dateFrom do konce týdne obsahujícího dateTo
- měsíční - od začátku měsíce obsahujícího dateFrom do konce měsíce obsahujícího dateTo
Například pokud jako "dateFrom" zadáte čas "2008-01-30 13:57:03" a jako "dateTo" zadáte "2008-02-06 21:34:19" (resp. jemu odpovídající unix timestamp), budou skutečně použitá časová omezení tato:
| typ statistiky | počáteční datum | koncové datum | komentář |
|---|---|---|---|
| denní | 2008-01-30 00:00:00 | 2008-02-07 00:00:00 | 8 dní |
| týdenní | 2008-01-28 00:00:00 | 2008-02-11 00:00:00 | 2 týdny |
| měsíční | 2008-01-01 00:00:00 | 2008-03-01 00:00:00 | 2 měsíce |
Zbývající tři parametry (buildDaily, buildWeekly, buildMonthly) lze využít pro optimalizaci generování ve smyslu kdy mají být generovány statistiky daného typu. Například pokud týdenní nebo měsíční statistiky nechcete generovat "průběžně" ale vždy až po kompletním posbírání relevantních dat (po skončení daného období), stačí jejich generování během období vypnout nastavením proměnné na "false" (viz. další odstavce).
Cronové skripty
Cronový skript je sice jediný, ale má dva hlavní úkoly - zaprvé aktualizaci údajů o sessions (toto potřebujete pouze pokud využíváte možnost odloženého určování údajů), zadruhé vlastní agregaci dat. Kromě toho adresář "cron" obsahuje také konfigurační soubor, a jeho obsah tedy je:
- config.php - konfigurační soubor (spojení na databázi, apod.)
- run-analysis.php - aktualizace informací o sessions a vlastní agregace dat
Konfigurace je velmi jednoduchá - soubor cron-config.php obsahuje v podstatě pouze následující konstanty:
- DB_HOSTNAME - hostname pro připojení k databázi
- DB_PORT - port pro připojení k databázi
- DB_DATABASE - název používané databáze
- DB_USERNAME - jméno uživatele
- DB_PASSWORD - heslo uživatele
- UPDATE_SESSION_DATA - aktualizovat informace o sessions
- BUILD_DAILY - generovat denní data (výchozí hodnota "ano")
- BUILD_WEEKLY - generovat týdenní data (výchozí hodnota "ano")
- BUILD_MONTHLY - generovat měsíční data (výchozí hodnota "ano")
- BUILD_FINAL_DATA_ONLY - zpracovávat pouze data za skončená období (výchozí hodnota "ne")
Význam konstant s předponou "DB_" je myslím celkem zřejmý - jedná se o nastavení přístupu k databázi. Další proměnné se týkají vlastního generování statistik, přičemž význam voleb BUILD_DAILY, BUILD_WEEKLY a BUILD_MONTHLY je opět zřejmý již z jejich názvu. Pokud je volba UPDATE_SESSION_DATA nastavena na "ano" (true), budou před samotným generováním statistik zpracovány informace o sessions (detekce browseru, architektury, země, apod.).
Poslední volba BUILD_FINAL_DATA_ONLY je poněkud komplikovanější, a význam má zejména pro týdenní a měsíční statistiky. Standardní chování (BUILD_FINAL_DATA_ONLY = false) je takové, že jsou počítány i průběžné statistiky za ještě neskončené období, například v polovině měsíce (resp. týdne) budou vypočteny statistiky i za první polovinu měsíce (resp. týdne). Při příštím generování statistik jsou tato průběžná data smazána a znovu vygenerována, díky čemuž ale vznikají "dead tuples" (a tedy nutnost vacuování tabulek se statistikami).
Pokud je těchto odstraňovaných dat velké množství, může to způsobovat různé problémy (výkonnostní, při údržbě, apod.) takže pokud tyto průběžné statistiky nepotřebujete, negenerujte je. Stačí prostě nastavit "true" a statistiky budou generovány pouze za již skončená období (nikoliv za tento den, týden či měsíc).




