Loki Notification Center 组件文档
目录
概述
Loki Notification Center 是一个用于展示和管理系统通知的 Web 组件。它提供了通知警报展示、严重程度标识、确认控制以及触发器配置功能。该组件通过每 5 秒轮询 /api/notifications 接口来获取最新通知,并提供两个主要标签页:Feed(通知列表)和 Triggers(启用/禁用警报规则)。
设计理念
该组件采用模块化设计,基于 LokiElement 基类构建,实现了通知管理的核心功能。它注重用户体验,提供了直观的通知展示、快速确认操作以及灵活的触发器配置界面。
组件架构
类继承关系
classDiagram
class LokiElement {
+getBaseStyles()
+connectedCallback()
+disconnectedCallback()
}
class LokiNotificationCenter {
-_notifications: Array
-_triggers: Array
-_summary: Object
-_connected: boolean
-_activeTab: string
-_pollInterval: any
+connectedCallback()
+disconnectedCallback()
+attributeChangedCallback()
+render()
-_loadNotifications()
-_loadTriggers()
-_acknowledgeNotification()
-_acknowledgeAll()
-_toggleTrigger()
-_startPolling()
-_stopPolling()
-_formatTime()
-_escapeHTML()
-_getSeverityColor()
-_switchTab()
-_bindEvents()
-_renderSummaryBar()
-_renderNotificationList()
-_renderTriggerList()
}
LokiElement <|-- LokiNotificationCenter
组件结构
Loki Notification Center 组件主要由以下几个部分组成:
- 数据获取层:负责从 API 获取通知和触发器数据
- 状态管理层:管理组件内部状态,如通知列表、触发器状态等
- 渲染层:负责将数据渲染成可视化界面
- 事件处理层:处理用户交互事件
- 轮询机制:定期更新数据
核心功能
1. 通知展示
组件以时间倒序展示通知列表,每个通知包含:
- 严重程度标识(颜色编码的圆点)
- 时间戳(相对时间格式)
- 通知消息
- 迭代信息(如适用)
- 确认按钮(未确认通知)
2. 通知确认
用户可以:
- 确认单个通知
- 批量确认所有未读通知
- 查看已确认通知(半透明显示)
3. 通知摘要
组件顶部显示摘要信息:
- 总通知数
- 未读通知数
- 严重通知数
4. 触发器管理
用户可以:
- 查看所有可用的触发器
- 启用/禁用特定触发器
- 查看触发器详细信息,如类型、严重程度、阈值等
5. 主题支持
组件支持明暗主题,并能自动检测系统主题设置。
使用指南
基本使用
<loki-notification-center api-url="http://localhost:57374" theme="dark"></loki-notification-center>
属性说明
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| api-url | string | window.location.origin | API 基础 URL |
| theme | string | 自动检测 | 主题设置,可选值为 'light' 或 'dark' |
API 接口要求
组件需要以下 API 接口:
-
获取通知列表
- 端点:
GET /api/notifications - 响应格式:
{ "notifications": [ { "id": "通知 ID", "timestamp": "ISO 8601 时间戳", "message": "通知消息", "severity": "严重程度 (critical/warning/info)", "acknowledged": false, "iteration": 1 } ], "summary": { "total": 10, "unacknowledged": 5, "critical": 2 } }
- 端点:
-
获取触发器列表
- 端点:
GET /api/notifications/triggers - 响应格式:
{ "triggers": [ { "id": "触发器 ID", "enabled": true, "type": "触发器类型", "severity": "严重程度", "threshold_pct": 80, "pattern": "模式" } ] }
- 端点:
-
确认通知
- 端点:
POST /api/notifications/:id/acknowledge - 响应:无内容或成功状态码
- 端点:
-
更新触发器
- 端点:
PUT /api/notifications/triggers - 请求体:
{ "triggers": [ { "id": "触发器 ID", "enabled": true, "type": "触发器类型", "severity": "严重程度", "threshold_pct": 80, "pattern": "模式" } ] }
- 端点:
API 参考
类方法
connectedCallback()
组件挂载到 DOM 时调用,初始化数据加载和轮询机制。
disconnectedCallback()
组件从 DOM 移除时调用,停止轮询机制。
attributeChangedCallback(name, oldValue, newValue)
监听属性变化,更新组件状态。
render()
渲染组件界面。
私有方法
_loadNotifications()
异步加载通知数据。
_loadTriggers()
异步加载触发器数据。
_acknowledgeNotification(id)
确认单个通知。
_acknowledgeAll()
确认所有未读通知。
_toggleTrigger(triggerId, enabled)
切换触发器启用状态。
_startPolling()
启动数据轮询机制,每 5 秒更新一次数据。
_stopPolling()
停止数据轮询机制。
_formatTime(timestamp)
格式化时间戳为相对时间格式。
_escapeHTML(str)
转义 HTML 特殊字符,防止 XSS 攻击。
_getSeverityColor(severity)
获取严重程度对应的颜色。
_switchTab(tab)
切换标签页。
_bindEvents()
绑定事件处理器。
_renderSummaryBar()
渲染摘要栏。
_renderNotificationList()
渲染通知列表。
_renderTriggerList()
渲染触发器列表。
配置与扩展
主题定制
组件使用 CSS 变量来定义样式,您可以通过覆盖这些变量来自定义主题:
loki-notification-center {
--loki-red: #ef4444;
--loki-yellow: #eab308;
--loki-blue: #3b82f6;
--loki-bg-tertiary: #1f2937;
--loki-text-muted: #9ca3af;
--loki-text-secondary: #d1d5db;
--loki-accent: #3b82f6;
--loki-bg-card: #111827;
--loki-border: #374151;
--loki-transition: 0.2s;
--loki-border-light: #4b5563;
--loki-text-primary: #f9fafb;
--loki-bg-hover: #1f2937;
}
扩展组件
您可以通过继承 LokiNotificationCenter 类来扩展组件功能:
import { LokiNotificationCenter } from './loki-notification-center.js';
class CustomNotificationCenter extends LokiNotificationCenter {
// 重写或添加新方法
_loadNotifications() {
// 自定义加载逻辑
super._loadNotifications();
}
// 添加新功能
_filterNotificationsBySeverity(severity) {
return this._notifications.filter(n => n.severity === severity);
}
}
customElements.define('custom-notification-center', CustomNotificationCenter);
注意事项与限制
错误处理
- 组件在 API 调用失败时会保持现有数据不变
- 连接状态会通过
_connected属性跟踪,并在界面上显示连接状态
性能考虑
- 组件每 5 秒轮询一次 API,可能会产生一定的网络流量
- 大量通知可能会影响渲染性能,建议在 API 端实现分页
安全注意事项
- 组件对显示的通知消息进行了 HTML 转义,防止 XSS 攻击
- 建议在 API 端验证和过滤通知内容
浏览器兼容性
- 组件使用 Web Components 技术,需要现代浏览器支持
- 建议使用 Chrome、Firefox、Safari 或 Edge 浏览器
已知限制
- 组件不支持通知过滤功能
- 组件不支持通知搜索功能
- 组件不支持通知导出功能