Analytics - v1.0.0-beta1

Services

ArtisanPack UI Analytics provides several service classes for analytics operations.

AnalyticsQuery

The main query service for retrieving analytics data.

Usage

use ArtisanPackUI\Analytics\Services\AnalyticsQuery;
use ArtisanPackUI\Analytics\Data\DateRange;

$query = app(AnalyticsQuery::class);
$range = DateRange::last30Days();

Methods

getStats()

Get comprehensive statistics:

$stats = $query->getStats($range, $withCompare = true, $filters = []);

// Returns:
[
    'pageviews' => 1234,
    'visitors' => 567,
    'sessions' => 890,
    'bounce_rate' => 45.5,
    'avg_session_duration' => 180,
    'pages_per_session' => 2.3,
    'comparison' => [
        'pageviews' => ['value' => 1100, 'change' => 12.2],
        // ...
    ],
]

getPageViews()

Get page views over time:

$pageViews = $query->getPageViews($range, $granularity = 'day', $filters = []);

// Returns Collection:
[
    ['date' => '2024-01-01', 'pageviews' => 100, 'visitors' => 80],
    ['date' => '2024-01-02', 'pageviews' => 150, 'visitors' => 90],
    // ...
]

getVisitors()

Get unique visitor count:

$count = $query->getVisitors($range, $filters = []);
// Returns: int

getTopPages()

Get most viewed pages:

$topPages = $query->getTopPages($range, $limit = 10, $filters = []);

// Returns Collection:
[
    ['path' => '/products', 'title' => 'Products', 'views' => 500, 'unique_views' => 350],
    // ...
]

getTrafficSources()

Get traffic source breakdown:

$sources = $query->getTrafficSources($range, $limit = 10, $filters = []);

// Returns Collection:
[
    ['source' => 'google', 'medium' => 'organic', 'sessions' => 450, 'percentage' => 25.5],
    // ...
]

getDeviceBreakdown()

Get device type distribution:

$devices = $query->getDeviceBreakdown($range, $filters = []);

// Returns Collection:
[
    ['device' => 'desktop', 'sessions' => 600, 'percentage' => 60],
    ['device' => 'mobile', 'sessions' => 350, 'percentage' => 35],
    ['device' => 'tablet', 'sessions' => 50, 'percentage' => 5],
]

getBrowserBreakdown()

Get browser distribution:

$browsers = $query->getBrowserBreakdown($range, $limit = 10, $filters = []);

getCountryBreakdown()

Get geographic distribution:

$countries = $query->getCountryBreakdown($range, $limit = 10, $filters = []);

getRealtime()

Get real-time visitor data:

$realtime = $query->getRealtime($minutes = 5);

// Returns:
[
    'active_visitors' => 23,
    'active_pages' => [...],
    'sources' => [...],
    'devices' => [...],
]

TrackingService

Handles page view and event tracking.

Usage

use ArtisanPackUI\Analytics\Services\TrackingService;
use ArtisanPackUI\Analytics\Data\PageViewData;
use ArtisanPackUI\Analytics\Data\EventData;

$service = app(TrackingService::class);

Methods

trackPageView()

$pageViewData = new PageViewData(
    path: '/products',
    title: 'Products',
);

$service->trackPageView($pageViewData);

trackEvent()

$eventData = new EventData(
    name: 'purchase',
    properties: ['product_id' => 123],
    value: 99.99,
    category: 'ecommerce',
);

$service->trackEvent($eventData);

canTrack()

Check if tracking is allowed:

if ($service->canTrack()) {
    // Proceed with tracking
}

SessionManager

Manages visitor sessions.

Usage

use ArtisanPackUI\Analytics\Services\SessionManager;

$sessionManager = app(SessionManager::class);

Methods

startSession()

$session = $sessionManager->startSession($sessionData);

getSession()

$session = $sessionManager->getSession($sessionId);

endSession()

$sessionManager->endSession($sessionId);

extendSession()

$sessionManager->extendSession($sessionId);

isSessionActive()

$isActive = $sessionManager->isSessionActive($sessionId);

ConsentService

Handles GDPR consent management.

Usage

use ArtisanPackUI\Analytics\Services\ConsentService;

$consentService = app(ConsentService::class);

Methods

hasConsent()

Check if visitor has consent:

$hasConsent = $consentService->hasConsent($fingerprint, 'analytics');

grantConsent()

Grant consent for categories:

$consentService->grantConsent($fingerprint, ['analytics', 'marketing']);

revokeConsent()

Revoke consent:

$consentService->revokeConsent($fingerprint, ['marketing']);

getConsentStatus()

Get full consent status:

$status = $consentService->getConsentStatus($fingerprint);

// Returns:
[
    'analytics' => ['granted' => true, 'granted_at' => '2024-01-01 12:00:00'],
    'marketing' => ['granted' => false, 'revoked_at' => '2024-01-02 10:00:00'],
]

TenantManager

Manages multi-tenant site resolution.

Usage

use ArtisanPackUI\Analytics\Services\TenantManager;

$tenantManager = app(TenantManager::class);

Methods

currentSite()

Get the current site:

$site = $tenantManager->currentSite();

currentTenantId()

Get current tenant ID:

$tenantId = $tenantManager->currentTenantId();

setSite()

Set the current site:

$tenantManager->setSite($site);

resolveSite()

Resolve site from request:

$site = $tenantManager->resolveSite($request);

GoalService

Manages conversion goals.

Usage

use ArtisanPackUI\Analytics\Services\GoalService;

$goalService = app(GoalService::class);

Methods

checkGoals()

Check if a page view triggers any goals:

$goalService->checkGoals($pageView);

recordConversion()

Record a goal conversion:

$goalService->recordConversion($goal, $session, $value);

DataExportService

Handles data export for GDPR compliance.

Methods

exportVisitorData()

$data = $exportService->exportVisitorData($visitorId);

DataDeletionService

Handles data deletion for GDPR compliance.

Methods

deleteVisitorData()

$deletionService->deleteVisitorData($visitorId);

deleteOldData()

Delete data older than retention period:

$deletionService->deleteOldData($days = 90);