Add pageview logging via PostHog

This commit is contained in:
floppydiskette 2024-06-11 21:36:58 +01:00
parent 210363d173
commit e89a7bb329
Signed by: fwoppydwisk
SSH key fingerprint: SHA256:Hqn452XQ1ETzUt/FthJu6+OFkS4NBxCv5VQSEvuk7CE
7 changed files with 114 additions and 14 deletions

View file

@ -26,3 +26,6 @@ MEMCACHED_HOST=127.0.0.1
LASTFM_KEY=
LASTFM_USER=
POSTHOG_KEY=
POSTHOG_HOST=

View file

@ -0,0 +1,28 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use PostHog\PostHog;
use Symfony\Component\HttpFoundation\Response;
class PageView
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
PostHog::capture([
'distinctId' => request()->ip(),
'event' => '$pageview',
'properties' => array(
'$current_url' => url()->current(),
),
]);
return $next($request);
}
}

View file

@ -2,23 +2,27 @@
namespace App\Providers;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\ServiceProvider;
use PostHog\PostHog;
class AppServiceProvider extends ServiceProvider
{
class AppServiceProvider extends ServiceProvider {
/**
* Register any application services.
*/
public function register(): void
{
public function register(): void {
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
//
public function boot(): void {
PostHog::init(
Config::get('services.posthog.key'),
[
'host' => 'https://'.Config::get('services.posthog.host')
]
);
}
}

View file

@ -10,6 +10,7 @@
"guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10",
"laravel/tinker": "^2.8",
"posthog/posthog-php": "^3.3",
"scrivo/highlight.php": "v9.18.1.10",
"sentry/sentry-laravel": "^4.1",
"spatie/laravel-honeypot": "^4.3",

56
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "c228a32331b8e43e449ba12dc4439757",
"content-hash": "3204be06a1b7a37cc0af50a0babca0a0",
"packages": [
{
"name": "auth0/auth0-php",
@ -3041,6 +3041,60 @@
],
"time": "2023-11-12T21:59:55+00:00"
},
{
"name": "posthog/posthog-php",
"version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/PostHog/posthog-php.git",
"reference": "34301d0f20e20b785d465c574557278d18620f31"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PostHog/posthog-php/zipball/34301d0f20e20b785d465c574557278d18620f31",
"reference": "34301d0f20e20b785d465c574557278d18620f31",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": ">=8.0"
},
"require-dev": {
"overtrue/phplint": "^3.0",
"phpunit/phpunit": "^9.0",
"slope-it/clock-mock": "^0.4.0",
"squizlabs/php_codesniffer": "^3.7"
},
"bin": [
"bin/posthog"
],
"type": "library",
"autoload": {
"psr-4": {
"PostHog\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PostHog <hey@posthog.com>",
"homepage": "https://posthog.com/"
}
],
"description": "PostHog PHP Library",
"homepage": "https://github.com/PostHog/posthog-php",
"keywords": [
"posthog"
],
"support": {
"issues": "https://github.com/PostHog/posthog-php/issues",
"source": "https://github.com/PostHog/posthog-php/tree/3.3.2"
},
"time": "2024-04-03T13:19:42+00:00"
},
{
"name": "psr-discovery/all",
"version": "1.0.1",

View file

@ -17,5 +17,10 @@
'lastfm' => [
'key' => env('LASTFM_KEY'),
'user' => env('LASTFM_USER'),
],
'posthog' => [
'key' => env('POSTHOG_KEY'),
'host' => env('POSTHOG_HOST'),
]
];

View file

@ -9,6 +9,7 @@
use App\Http\Controllers\GuestbookController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\MusicController;
use App\Http\Middleware\PageView;
use Illuminate\Support\Facades\Route;
/*
@ -22,14 +23,18 @@
|
*/
Route::get('/', [HomeController::class, 'show']);
Route::get('/bookmarks', [BookmarksController::class, 'show']);
Route::get('/guestbook', [GuestbookController::class, 'show']);
// Run the PageView middleware for *all* public GET routes
Route::middleware(PageView::class)->group(function () {
Route::get('/', [HomeController::class, 'show']);
Route::get('/bookmarks', [BookmarksController::class, 'show']);
Route::get('/guestbook', [GuestbookController::class, 'show']);
Route::get('/calculators', [CalculatorsController::class, 'show']);
Route::get('/computers', [ComputersController::class, 'show']);
Route::get('/music', [MusicController::class, 'show']);
});
Route::post('/guestbook', [GuestbookController::class, 'addEntry'])
->middleware('rate_limit');
Route::get('/calculators', [CalculatorsController::class, 'show']);
Route::get('/computers', [ComputersController::class, 'show']);
Route::get('/music', [MusicController::class, 'show']);
// Admin pages
Route::get('/admin/guestbook', [AdminGuestbookController::class, 'show'])