定制 rawand201/filament-connection-badge 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

rawand201/filament-connection-badge

Composer 安装命令:

composer require rawand201/filament-connection-badge

包简介

A Filament topbar badge that shows real-time network quality (full/medium/low/offline) with a live ping graph tooltip and a full-screen offline overlay. Works with Filament v4 and v5, supports RTL and multi-language.

README 文档

README

Filament Connection Badge

Latest Version on Packagist Total Downloads License CI

A drop-in connection status badge for Filament panels — shows a live signal-bars icon in the topbar next to the user avatar, a live ping graph on hover, and a full-screen overlay when the connection drops.

Works with Filament v4 and v5, uses Filament's design tokens so it follows your panel's theme and dark mode automatically, and fully supports RTL and multi-language UIs.

Requirements

Version
PHP ^8.2 (8.2 / 8.3 / 8.4)
Laravel 10.x / 11.x / 12.x / 13.x
Filament ^4.0 | ^5.0

Installation

composer require rawand201/filament-connection-badge

The service provider is auto-discovered, so no manual registration is needed.

Publish assets

php artisan filament:assets

Publish the config (optional)

php artisan vendor:publish --tag="filament-connection-badge-config"

Publish translations (optional)

php artisan vendor:publish --tag="filament-connection-badge-translations"

That's it — the badge is now rendered in the topbar of every Filament panel.

Configuration

The published config/filament-connection-badge.php:

return [

    'enabled' => env('FILAMENT_CONNECTION_BADGE_ENABLED', true),

    // Filament panel hook name (default: before the user menu). See Filament\View\PanelsRenderHook.
    'render_hook' => env(
        'FILAMENT_CONNECTION_BADGE_RENDER_HOOK',
        'panels::user-menu.before'
    ),

    // Optional Gate / policy ability — badge and ping require auth()->user()->can(...) when set
    'permission' => env('FILAMENT_CONNECTION_BADGE_PERMISSION'),

    'show_label' => true,

    'show_overlay' => true,

    'route' => [
        'prefix' => '_filament-connection-badge',
        'middleware' => ['web'],
        'throttle' => env('FILAMENT_CONNECTION_BADGE_THROTTLE'), // e.g. '60,1'; null = no throttle
    ],

    'ping_url' => env('FILAMENT_CONNECTION_BADGE_PING_URL'),

    'ping_interval' => 5000,

    'thresholds' => [
        'full' => 200,
        'medium' => 600,
    ],

    'max_samples' => 30,

];

Environment variables

FILAMENT_CONNECTION_BADGE_ENABLED=true
FILAMENT_CONNECTION_BADGE_RENDER_HOOK=panels::topbar.end
FILAMENT_CONNECTION_BADGE_PERMISSION=viewConnectionBadge
FILAMENT_CONNECTION_BADGE_PING_URL=/favicon.ico
FILAMENT_CONNECTION_BADGE_THROTTLE=60,1

Disabling the badge for a specific environment

FILAMENT_CONNECTION_BADGE_ENABLED=false

Features

  • Live signal bars in the topbar — full / medium / low / offline, colored with Filament's --success-*, --warning-*, --danger-* tokens
  • Real heartbeat endpoint — the package registers its own JSON /_filament-connection-badge/ping route, so the badge actually proves your Laravel application is responding (PHP + router + middleware), not just the static file server
  • Discord-style hover tooltip with:
    • Live sparkline of the last N ping samples
    • Average ping, last ping, packet-loss rate
    • Host indicator
  • Full-screen offline overlay that auto-dismisses when the connection comes back
  • Filament v4 & v5 — one package, single code path
  • Dark mode — all colors follow the panel theme via CSS variables
  • RTL support — built with CSS logical properties; numbers and the ping graph stay LTR (unicode-bidi: isolate) so measurements stay readable in RTL UIs
  • i18n — ships with English, Arabic, and Kurdish Sorani translations
  • Configurable — enable/disable, render hook, optional can() permission, optional heartbeat throttling, latency thresholds, route prefix & middleware, ping interval, history size, label visibility, overlay on/off
  • Zero build step — no Vite, no npm; assets are registered via FilamentAsset

How it works

  • On every Filament page, a tiny Alpine.js component is rendered via the configured render hook (default panels::user-menu.before, same as PanelsRenderHook::USER_MENU_BEFORE).
  • The package registers its own heartbeat route — a named GET endpoint at route('filament-connection-badge.ping') (default URI /_filament-connection-badge/ping) that returns a small JSON payload { ok: true, ts: ... } with Cache-Control: no-store.
  • The Alpine component pings that endpoint every ping_interval ms and measures the round-trip time with performance.now(). Because the request goes through the Laravel router and middleware stack, a successful ping proves your app is responding — not just nginx serving a static file.
  • The measured latency is mapped to a quality level using thresholds.
  • A rolling buffer of the last max_samples pings is kept in memory. Failed pings count toward the packet-loss rate and visually break the sparkline.
  • navigator.onLine and the online / offline events are used as an immediate hint; a confirmation ping always follows.
  • When the browser reports offline (or a ping fails), the badge flips to "Offline" and the optional overlay is shown until the next successful ping.

Nothing is persisted server-side — the route is stateless and the rolling sample buffer lives in the browser.

Securing the heartbeat route

By default the route uses the web middleware so sessions and cookies work, but it's publicly reachable. You can lock it down in two ways (combinable):

Middleware — require an authenticated session:

'route' => [
    'prefix' => '_filament-connection-badge',
    'middleware' => ['web', 'auth'],
],

Or Filament's panel auth middleware:

'middleware' => ['web', \Filament\Http\Middleware\Authenticate::class],

Permission — set permission (or FILAMENT_CONNECTION_BADGE_PERMISSION) to a Laravel Gate ability or policy method name. When set, the badge is hidden and the ping endpoint returns 403 unless auth()->user()->can($permission). Register the ability in a service provider (e.g. Gate::define('viewConnectionBadge', ...)).

You can also set route.throttle in config (or FILAMENT_CONNECTION_BADGE_THROTTLE, e.g. 60,1) to append Laravel’s throttle:{max},{decayMinutes} middleware to the heartbeat route only.

Localization

To add another language, publish the translations and copy any of the files:

php artisan vendor:publish --tag="filament-connection-badge-translations"

Customization

Override the view

php artisan vendor:publish --tag="filament-connection-badge-views"

Override the styles

You can either:

  • Publish and edit the asset files, or
  • Simply add your own CSS targeting the .fcb-* classes — every color is declared with var(--gray-*) / var(--success-*) / etc. so they automatically track your panel's theme.
composer sync-assets

Testing

composer test
composer analyse   # PHPStan (src/)

Changelog

See CHANGELOG.

Credits

License

The MIT License (MIT). See LICENSE.

统计信息

  • 总下载量: 1.1k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 5
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 1

GitHub 信息

  • Stars: 5
  • Watchers: 0
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-14

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固