| 1234567891011121314151617181920212223242526272829 |
- <?php
- declare(strict_types=1);
- namespace plugin\saiadmin\app\service\device;
- /** One mutually exclusive display policy for counters, filters, cards and exports. */
- final class DeviceStatusPolicy
- {
- public const LABELS = [
- 'online' => '在线',
- 'offline' => '离线',
- 'fault' => '告警',
- 'unconnected' => '未接入',
- ];
- public function __construct(private readonly \DateTimeImmutable $now)
- {
- }
- public function expression(): string
- {
- $cutoff = $this->now->modify('-15 minutes')->format('Y-m-d H:i:s');
- return "CASE
- WHEN TRIM(COALESCE(d.fault, '')) <> '' THEN 'fault'
- WHEN d.last_seen IS NULL THEN 'unconnected'
- WHEN d.last_seen < '$cutoff' THEN 'offline'
- ELSE 'online' END";
- }
- }
|