
📋 项目简介
RouterOS Queue Monitor 是一个专为 MikroTik RouterOS 设计的现代化队列监控系统。它提供实时的队列状态监控、数据可视化和告警功能,帮助网络管理员更好地监控和管理网络流量。
✨ 核心特性
- 🔄 实时监控: WebSocket 实时数据更新,无需手动刷新
- 📊 数据可视化: 直观的图表和进度条显示队列状态
- 🎨 科技感UI: 现代化的深色主题界面设计
- 📱 响应式设计: 完美适配桌面、平板和手机设备
- ⚡ 高性能: Go 语言后端,快速响应和低资源占用
- 🔍 智能过滤: 支持队列搜索、分类和排序
- 📈 多视图模式: 网格视图和列表视图自由切换
- 💾 数据导出: 支持 JSON 格式数据导出
- 🔔 状态告警: 高负载队列自动告警提醒
- ⌨️ 快捷键支持: 提高操作效率的键盘快捷键
🎯 功能特性
📊 监控功能
- 队列状态监控: 实时显示所有队列的当前状态
- 流量统计: 上行/下行流量统计和趋势分析
- 利用率监控: 队列利用率实时计算和告警
- 历史数据: 保存历史监控数据用于趋势分析
🎨 用户界面
- 现代化设计: 科技感十足的深色主题界面
- 数据可视化: 进度条、状态指示器、统计卡片
- 交互体验: 流畅的动画效果和悬停反馈
- 自定义控件: 美化的下拉选择框和搜索框
🔧 管理功能
- 智能过滤: 按队列类型、状态、名称过滤
- 多种排序: 支持按名称、利用率、速率排序
- 实时搜索: 队列名称实时搜索功能
- 数据导出: 一键导出监控数据
🚀 技术特性
- WebSocket 通信: 实时双向数据传输
- RESTful API: 标准的 REST API 接口
- 并发安全: Go 协程安全的并发处理
- 错误处理: 完善的错误处理和恢复机制
🛠 系统要求
服务器端
- 操作系统: Linux Windows macOS
- Go 版本: 1.21 或更高版本
- 内存: 最小 512MB RAM
- 存储: 最小 100MB 可用空间
- 网络: 能够访问 RouterOS 设备的网络连接
RouterOS 设备
- RouterOS 版本: 6.40 或更高版本
- API 访问: 启用 API 服务(默认端口 8728)
- 用户权限: 具有读取队列信息权限的用户账户
客户端浏览器
- 现代浏览器: Chrome 80+, Firefox 75+, Safari 13+, Edge 80+
- JavaScript: 启用 JavaScript 支持
- WebSocket: 支持 WebSocket 协议
🚀 快速开始
方式一:直接运行
1. 克隆项目
<span class="code-line"><span class="token function">git</span> clone https://github.com/uouuou/routeros-queue-monitor.git</span>
<span class="code-line"><span class="token builtin class-name">cd</span> routeros-queue-monitor</span>1. 安装依赖
<span class="code-line">go mod tidy</span>1. 配置文件
<span class="code-line"><span class="token function">cp</span> config.json.example config.json</span>
<span class="code-line"><span class="token comment"># 编辑 config.json 文件,填入你的 RouterOS 连接信息</span></span>1. 运行程序
<span class="code-line">go run main.go</span>1. 访问界面
<span class="code-line"><span class="token literal-property property">打开浏览器访问</span><span class="token operator">:</span> http<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>localhost<span class="token operator">:</span><span class="token number">5000</span></span>方式二:编译运行
1. 编译程序
<span class="code-line">go build <span class="token parameter variable">-o</span> routeros-queue-monitor</span>1. 运行程序
<span class="code-line">./routeros-queue-monitor</span>⚙️ 配置说明
配置文件 (config.json)
<span class="code-line"><span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"server"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"port"</span><span class="token operator">:</span> <span class="token string">"5000"</span></span>
<span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"routeros"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"host"</span><span class="token operator">:</span> <span class="token string">"192.168.1.1"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"username"</span><span class="token operator">:</span> <span class="token string">"admin"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"password"</span><span class="token operator">:</span> <span class="token string">"password"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"port"</span><span class="token operator">:</span> <span class="token string">"8728"</span></span>
<span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"monitor"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"interval"</span><span class="token operator">:</span> <span class="token number">2</span></span>
<span class="code-line"> <span class="token punctuation">}</span></span>
<span class="code-line"><span class="token punctuation">}</span></span>环境变量
可以通过环境变量覆盖配置文件设置:
<span class="code-line"><span class="token builtin class-name">export</span> <span class="token assign-left variable">ROS_HOST</span><span class="token operator">=</span><span class="token number">192.168</span>.1.1</span>
<span class="code-line"><span class="token builtin class-name">export</span> <span class="token assign-left variable">ROS_USERNAME</span><span class="token operator">=</span>admin</span>
<span class="code-line"><span class="token builtin class-name">export</span> <span class="token assign-left variable">ROS_PASSWORD</span><span class="token operator">=</span>your_password</span>
<span class="code-line"><span class="token builtin class-name">export</span> <span class="token assign-left variable">ROS_PORT</span><span class="token operator">=</span><span class="token number">8728</span></span>
<span class="code-line"><span class="token builtin class-name">export</span> <span class="token assign-left variable">SERVER_PORT</span><span class="token operator">=</span><span class="token number">5000</span></span>RouterOS 配置
1. 启用 API 服务
<span class="code-line"><span class="token operator">/</span>ip service enable api</span>
<span class="code-line"><span class="token operator">/</span>ip service <span class="token keyword">set</span> api port<span class="token operator">=</span><span class="token number">8728</span></span>1. 创建监控用户(推荐)
<span class="code-line"><span class="token operator">/</span>user add name<span class="token operator">=</span>monitor password<span class="token operator">=</span>monitor_password group<span class="token operator">=</span>read</span>1. 防火墙规则(如需要)
<span class="code-line"><span class="token operator">/</span>ip firewall filter add chain<span class="token operator">=</span>input protocol<span class="token operator">=</span>tcp dst<span class="token operator">-</span>port<span class="token operator">=</span><span class="token number">8728</span> src<span class="token operator">-</span>address<span class="token operator">=</span>监控服务器<span class="token constant">IP</span> action<span class="token operator">=</span>accept</span>📱 使用说明
界面概览
1. 顶部导航栏
- 连接状态指示器
- 刷新按钮
- 全屏切换按钮
2. 统计概览区域
- 活跃队列数量
- 总上行/下行流量
- 高负载队列数量
3. 控制面板
- 队列筛选:全部/上行/下行/高负载/正常
- 排序方式:名称/利用率/速率/流量
- 搜索框:实时搜索队列名称
- 视图切换:网格视图/列表视图
- 导出按钮:导出当前数据
4. 队列监控区域
- 队列卡片显示详细信息
- 实时利用率进度条
- 状态颜色指示(绿色/黄色/红色)
快捷键
- Ctrl + R: 刷新数据
- Ctrl + F: 聚焦搜索框
- F11: 全屏切换
- Esc: 关闭弹窗
状态说明
| 状态 | 颜色 | 利用率范围 | 说明 |
|---|---|---|---|
| 正常 | 🟢 绿色 | 0% - 69% | 队列运行正常 |
| 警告 | 🟡 黄色 | 70% - 89% | 队列负载较高,需要关注 |
| 危险 | 🔴 红色 | 90% - 100% | 队列负载过高,需要立即处理 |
🐳 部署方式
Docker 部署
1. 创建 Dockerfile
<span class="code-line"><span class="token instruction"><span class="token keyword">FROM</span> golang:1.21-alpine <span class="token keyword">AS</span> builder</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">WORKDIR</span> /app</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">COPY</span> . .</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">RUN</span> go mod tidy && go build -o routeros-queue-monitor</span></span>
<span class="code-line"></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">FROM</span> alpine:latest</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">RUN</span> apk --no-cache add ca-certificates tzdata</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">WORKDIR</span> /root/</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">COPY</span> <span class="token options"><span class="token property">--from</span><span class="token punctuation">=</span><span class="token string">builder</span></span> /app/routeros-queue-monitor .</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">COPY</span> <span class="token options"><span class="token property">--from</span><span class="token punctuation">=</span><span class="token string">builder</span></span> /app/static ./static</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">COPY</span> <span class="token options"><span class="token property">--from</span><span class="token punctuation">=</span><span class="token string">builder</span></span> /app/config.json.example ./config.json</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">EXPOSE</span> 5000</span></span>
<span class="code-line"><span class="token instruction"><span class="token keyword">CMD</span> [<span class="token string">"./queue-monitor"</span>]</span></span>1. 构建镜像
<span class="code-line"><span class="token function">docker</span> build <span class="token parameter variable">-t</span> queue-monitor <span class="token builtin class-name">.</span></span>1. 运行容器
<span class="code-line"><span class="token function">docker</span> run <span class="token parameter variable">-d</span> <span class="token punctuation">\</span> </span>
<span class="code-line"> <span class="token parameter variable">--name</span> queue-monitor <span class="token punctuation">\</span> </span>
<span class="code-line"> <span class="token parameter variable">--restart</span> unless-stopped <span class="token punctuation">\</span> </span>
<span class="code-line"> <span class="token parameter variable">-p</span> <span class="token number">5000</span>:5000 <span class="token punctuation">\</span> </span>
<span class="code-line"> <span class="token parameter variable">-v</span> <span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">pwd</span><span class="token variable">)</span></span>/config.json:/root/config.json:ro <span class="token punctuation">\</span> </span>
<span class="code-line"> queue-monitor</span>Docker Compose 部署
<span class="code-line"><span class="token key atrule">version</span><span class="token punctuation">:</span> <span class="token string">'3.8'</span></span>
<span class="code-line"></span>
<span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token key atrule">routeros-queue-monitor</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token key atrule">build</span><span class="token punctuation">:</span> .</span>
<span class="code-line"> <span class="token key atrule">container_name</span><span class="token punctuation">:</span> routeros<span class="token punctuation">-</span>queue<span class="token punctuation">-</span>monitor</span>
<span class="code-line"> <span class="token key atrule">restart</span><span class="token punctuation">:</span> unless<span class="token punctuation">-</span>stopped</span>
<span class="code-line"> <span class="token key atrule">ports</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"5000:5000"</span></span>
<span class="code-line"> <span class="token key atrule">environment</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token punctuation">-</span> ROS_HOST=$<span class="token punctuation">{</span>ROS_HOST<span class="token punctuation">:</span><span class="token punctuation">-</span>192.168.1.1<span class="token punctuation">}</span></span>
<span class="code-line"> <span class="token punctuation">-</span> ROS_USERNAME=$<span class="token punctuation">{</span>ROS_USERNAME<span class="token punctuation">:</span><span class="token punctuation">-</span>admin<span class="token punctuation">}</span></span>
<span class="code-line"> <span class="token punctuation">-</span> ROS_PASSWORD=$<span class="token punctuation">{</span>ROS_PASSWORD<span class="token punctuation">:</span><span class="token punctuation">-</span>password<span class="token punctuation">}</span></span>
<span class="code-line"> <span class="token punctuation">-</span> SERVER_PORT=5000</span>
<span class="code-line"> <span class="token key atrule">volumes</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token punctuation">-</span> ./config.json<span class="token punctuation">:</span>/app/config.json<span class="token punctuation">:</span>ro</span>
<span class="code-line"> <span class="token punctuation">-</span> ./logs<span class="token punctuation">:</span>/app/logs</span>
<span class="code-line"> <span class="token key atrule">healthcheck</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token key atrule">test</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"CMD"</span><span class="token punctuation">,</span> <span class="token string">"wget"</span><span class="token punctuation">,</span> <span class="token string">"--quiet"</span><span class="token punctuation">,</span> <span class="token string">"--tries=1"</span><span class="token punctuation">,</span> <span class="token string">"--spider"</span><span class="token punctuation">,</span> <span class="token string">"http://localhost:5000/api/queue-stats"</span><span class="token punctuation">]</span></span>
<span class="code-line"> <span class="token key atrule">interval</span><span class="token punctuation">:</span> 30s</span>
<span class="code-line"> <span class="token key atrule">timeout</span><span class="token punctuation">:</span> 10s</span>
<span class="code-line"> <span class="token key atrule">retries</span><span class="token punctuation">:</span> <span class="token number">3</span></span>
<span class="code-line"> <span class="token key atrule">start_period</span><span class="token punctuation">:</span> 40s</span>
<span class="code-line"></span>
<span class="code-line"> <span class="token comment"># 可选:Nginx 反向代理</span></span>
<span class="code-line"> <span class="token key atrule">nginx</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> nginx<span class="token punctuation">:</span>alpine</span>
<span class="code-line"> <span class="token key atrule">container_name</span><span class="token punctuation">:</span> routeros<span class="token punctuation">-</span>queue<span class="token punctuation">-</span>monitor<span class="token punctuation">-</span>nginx</span>
<span class="code-line"> <span class="token key atrule">restart</span><span class="token punctuation">:</span> unless<span class="token punctuation">-</span>stopped</span>
<span class="code-line"> <span class="token key atrule">ports</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"80:80"</span></span>
<span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"443:443"</span></span>
<span class="code-line"> <span class="token key atrule">volumes</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token punctuation">-</span> ./nginx.conf<span class="token punctuation">:</span>/etc/nginx/nginx.conf<span class="token punctuation">:</span>ro</span>
<span class="code-line"> <span class="token punctuation">-</span> ./ssl<span class="token punctuation">:</span>/etc/nginx/ssl<span class="token punctuation">:</span>ro</span>
<span class="code-line"> <span class="token key atrule">depends_on</span><span class="token punctuation">:</span></span>
<span class="code-line"> <span class="token punctuation">-</span> routeros<span class="token punctuation">-</span>queue<span class="token punctuation">-</span>monitor</span>系统服务部署
1. 创建服务文件
<span class="code-line"><span class="token function">sudo</span> <span class="token function">tee</span> /etc/systemd/system/routeros-queue-monitor.service <span class="token operator">></span> /dev/null <span class="token operator"><<</span><span class="token string">EOF</span></span>
<span class="code-line"><span class="token string">[Unit]</span></span>
<span class="code-line"><span class="token string">Description=RouterOS Queue Monitor</span></span>
<span class="code-line"><span class="token string">After=network.target</span></span>
<span class="code-line"></span>
<span class="code-line"><span class="token string">[Service]</span></span>
<span class="code-line"><span class="token string">Type=simple</span></span>
<span class="code-line"><span class="token string">User=monitor</span></span>
<span class="code-line"><span class="token string">WorkingDirectory=/opt/routeros-queue-monitor</span></span>
<span class="code-line"><span class="token string">ExecStart=/opt/queue-monitor/routeros-queue-monitor</span></span>
<span class="code-line"><span class="token string">Restart=always</span></span>
<span class="code-line"><span class="token string">RestartSec=5</span></span>
<span class="code-line"><span class="token string">Environment=GIN_MODE=release</span></span>
<span class="code-line"></span>
<span class="code-line"><span class="token string">[Install]</span></span>
<span class="code-line"><span class="token string">WantedBy=multi-user.target</span></span>
<span class="code-line"><span class="token string">EOF</span></span>1. 启用并启动服务
<span class="code-line"><span class="token function">sudo</span> systemctl daemon-reload</span>
<span class="code-line"><span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> routeros-queue-monitor</span>
<span class="code-line"><span class="token function">sudo</span> systemctl start routeros-queue-monitor</span>1. 查看服务状态
<span class="code-line"><span class="token function">sudo</span> systemctl status routeros-queue-monitor</span>
<span class="code-line"><span class="token function">sudo</span> journalctl <span class="token parameter variable">-u</span> routeros-queue-monitor <span class="token parameter variable">-f</span></span>🔧 API 文档
REST API 端点
获取队列统计
<span class="code-line">GET /api/queue-stats</span>**响应示例:**
<span class="code-line"><span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"queues"</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
<span class="code-line"> <span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"User_001_OUT"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"rate"</span><span class="token operator">:</span> <span class="token string">"15.50 Mbps"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"max_limit"</span><span class="token operator">:</span> <span class="token string">"100.00 Mbps"</span><span class="token punctuation">,</span> </span>
<span class="code-line"> <span class="token property">"utilization"</span><span class="token operator">:</span> <span class="token number">15.5</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"bytes"</span><span class="token operator">:</span> <span class="token number">1048576000</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"packets"</span><span class="token operator">:</span> <span class="token number">1000000</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"status"</span><span class="token operator">:</span> <span class="token string">"normal"</span></span>
<span class="code-line"> <span class="token punctuation">}</span></span>
<span class="code-line"> <span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"system_stats"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"total_queues"</span><span class="token operator">:</span> <span class="token number">10</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"total_upload"</span><span class="token operator">:</span> <span class="token string">"150.00 Mbps"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"total_download"</span><span class="token operator">:</span> <span class="token string">"300.00 Mbps"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"high_utilization"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"average_utilization"</span><span class="token operator">:</span> <span class="token number">45.5</span></span>
<span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"timestamp"</span><span class="token operator">:</span> <span class="token number">1640995200</span></span>
<span class="code-line"><span class="token punctuation">}</span></span>WebSocket API
连接端点
<span class="code-line"><span class="token literal-property property">ws</span><span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>localhost<span class="token operator">:</span><span class="token number">5000</span><span class="token operator">/</span>api<span class="token operator">/</span>ws</span>消息格式
**队列更新消息:**
<span class="code-line"><span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"queue_update"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"data"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"queues"</span><span class="token operator">:</span> <span class="token punctuation">[</span>...<span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"system_stats"</span><span class="token operator">:</span> <span class="token punctuation">{</span>...<span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"timestamp"</span><span class="token operator">:</span> <span class="token number">1640995200</span></span>
<span class="code-line"> <span class="token punctuation">}</span></span>
<span class="code-line"><span class="token punctuation">}</span></span>**错误消息:**
<span class="code-line"><span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"error"</span><span class="token punctuation">,</span></span>
<span class="code-line"> <span class="token property">"message"</span><span class="token operator">:</span> <span class="token string">"连接RouterOS失败"</span></span>
<span class="code-line"><span class="token punctuation">}</span></span>**心跳消息:**
<span class="code-line"><span class="token punctuation">{</span></span>
<span class="code-line"> <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"ping"</span></span>
<span class="code-line"><span class="token punctuation">}</span></span>🔍 故障排除
常见问题
1. 无法连接到 RouterOS
**问题**: 显示"连接RouterOS失败"
**解决方案**:
- 检查 RouterOS IP 地址是否正确
- 确认 API 服务已启用:/ip service print
- 检查防火墙规则是否允许 8728 端口
- 验证用户名和密码是否正确
- 确认网络连通性:ping RouterOS_IP
2. 页面加载缓慢或卡顿
**问题**: 界面响应缓慢
**解决方案**:
- 检查网络延迟到 RouterOS 设备
- 调整配置文件中的 monitor.interval 参数
- 减少 monitor.max_history 历史数据点数量
- 检查服务器资源使用情况
3. WebSocket 连接失败
**问题**: 实时更新不工作
**解决方案**:
- 检查浏览器是否支持 WebSocket
- 确认防火墙没有阻止 WebSocket 连接
- 查看浏览器开发者工具的网络标签页
- 尝试刷新页面重新建立连接
4. 数据显示不准确
**问题**: 队列数据显示异常
**解决方案**:
- 检查 RouterOS 队列配置是否正确
- 确认监控用户有足够的权限读取队列信息
- 查看应用日志文件获取详细错误信息
- 重启监控服务
启用调试模式
<span class="code-line"><span class="token comment"># 设置日志级别为 debug</span></span>
<span class="code-line"><span class="token builtin class-name">export</span> <span class="token assign-left variable">LOG_LEVEL</span><span class="token operator">=</span>debug</span>
<span class="code-line">./queue-monitor</span>🤝 贡献指南
我们欢迎所有形式的贡献!
如何贡献
1. Fork 项目
2. 创建功能分支 (git checkout -b feature/AmazingFeature)
3. 提交更改 (git commit -m 'Add some AmazingFeature')
4. 推送到分支 (git push origin feature/AmazingFeature)
5. 创建 Pull Request
开发环境设置
1. 克隆项目
<span class="code-line"><span class="token function">git</span> clone https://github.com/uouuou/routeros-queue-monitor.git</span>1. 安装依赖
<span class="code-line">go mod tidy</span>1. 运行测试
<span class="code-line">go <span class="token builtin class-name">test</span> ./<span class="token punctuation">..</span>.</span>1. 启动开发服务器
<span class="code-line">go run main.go</span>代码规范
- 遵循 Go 官方代码规范
- 使用 gofmt 格式化代码
- 添加适当的注释和文档
- 编写单元测试
报告问题
如果你发现了 bug 或有功能建议,请:
1. 检查是否已有相关 issue
2. 创建新的 issue 并提供详细信息
3. 包含复现步骤和环境信息
📄 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
🙏 致谢
- MikroTik - RouterOS 操作系统
- Gin - Go Web 框架
- Gorilla WebSocket - WebSocket 库
- Font Awesome - 图标库
- Chart.js - 图表库
📞 联系方式
- 项目主页: GitHub Repository
- 问题反馈: GitHub Issues
- 邮箱: hrinvay@gmail.com
🔄 更新日志
v1.0.0 (2024-01-15)
- 🎉 初始版本发布
- 📊 基础队列监控功能
- 🔌 RouterOS API 集成
- 🌐 Web 界面
- ✨ 科技感 UI 设计
- 🚀 WebSocket 实时数据更新
- 📊 增强的数据可视化
- 📱 完全响应式设计
- 🔍 智能搜索和过滤功能
- 💾 数据导出功能
📄 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
MIT 许可证说明
MIT 许可证是一个宽松的开源许可证,允许你:
✅ **商业使用** - 可以用于商业项目
✅ **修改** - 可以修改源代码
✅ **分发** - 可以分发原始或修改后的代码
✅ **私人使用** - 可以私人使用
✅ **专利使用** - 提供专利使用权
**唯一要求**:在所有副本中包含原始许可证和版权声明
**免责声明**:软件按"原样"提供,不提供任何形式的保证
**⭐ 如果这个项目对你有帮助,请给它一个星标!**
Made with ❤️ by [Rinvay]