- HealthProbe: Datenbank, Cache, Queue (sync / database / Horizon), fehlgeschlagene Jobs (24 h), Scheduler-Herzschlag, Plattenplatz - /health auf jeder Domain, ohne web-Gruppe, nur mit MONITORING_HEALTH_TOKEN - monitoring:heartbeat minuetlich im Scheduler - Sysadmin -> Systemstatus (my.mivita.care/sysadmin/status) mit Version, Umgebung und zuletzt fehlgeschlagenen Jobs - Anleitung Abschnitt G Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
78 lines
2.2 KiB
PHP
78 lines
2.2 KiB
PHP
<?php
|
|
|
|
use App\Models\UserAccount;
|
|
use App\Services\Monitoring\HealthProbe;
|
|
use App\User;
|
|
use Tests\TestCase;
|
|
|
|
uses(TestCase::class);
|
|
|
|
/**
|
|
* Systemstatus unter Sysadmin (my.mivita.care/sysadmin/status). Die
|
|
* CRM-Routen werden host-abhängig geladen, daher startet die App mit dem
|
|
* CRM-Host neu.
|
|
*/
|
|
beforeEach(function () {
|
|
$this->previousHttpHost = $_SERVER['HTTP_HOST'] ?? null;
|
|
$_SERVER['HTTP_HOST'] = config('domains.domains.crm.host');
|
|
$this->refreshApplication();
|
|
$this->artisan('migrate');
|
|
config()->set('cache.default', 'array');
|
|
config()->set('queue.default', 'sync');
|
|
@unlink(HealthProbe::heartbeatPath());
|
|
});
|
|
|
|
afterEach(function () {
|
|
@unlink(HealthProbe::heartbeatPath());
|
|
|
|
if ($this->previousHttpHost === null) {
|
|
unset($_SERVER['HTTP_HOST']);
|
|
} else {
|
|
$_SERVER['HTTP_HOST'] = $this->previousHttpHost;
|
|
}
|
|
});
|
|
|
|
function statusPageUser(int $admin): User
|
|
{
|
|
$account = UserAccount::create([
|
|
'first_name' => 'Sys',
|
|
'last_name' => 'Admin',
|
|
'm_first_name' => 'Sys',
|
|
'm_last_name' => 'Admin',
|
|
'm_account' => 'M'.random_int(1000, 9999),
|
|
]);
|
|
|
|
return User::forceCreate([
|
|
'email' => 'sys-'.uniqid('', true).'@example.com',
|
|
'password' => bcrypt('secret'),
|
|
'lang' => 'de',
|
|
'active' => 1,
|
|
'blocked' => 0,
|
|
'wizard' => 100,
|
|
'admin' => $admin,
|
|
'payment_account' => now()->addYear(),
|
|
'account_id' => $account->id,
|
|
])->fresh();
|
|
}
|
|
|
|
test('system admins see the checks, the version and the menu entry', function () {
|
|
config()->set('app.version', 'v1.0.2');
|
|
app(HealthProbe::class)->recordHeartbeat();
|
|
|
|
$this->actingAs(statusPageUser(4))
|
|
->get(route('sysadmin_status'))
|
|
->assertOk()
|
|
->assertSee('Systemstatus')
|
|
->assertSee('Datenbank')
|
|
->assertSee('Scheduler')
|
|
->assertSee('Fehlgeschlagene Jobs')
|
|
->assertSee('v1.0.2')
|
|
->assertSee(route('sysadmin_status'), false)
|
|
->assertSee('Kein Token');
|
|
});
|
|
|
|
test('other admins are not allowed to open the page', function () {
|
|
$this->actingAs(statusPageUser(3))
|
|
->get(route('sysadmin_status'))
|
|
->assertForbidden();
|
|
});
|