XteVision Error Tracker 是什么,为谁而设计?
XteVision Error Tracker(xtevision-error-tracker v1.2.6)是一个厂商中立、完全离线、自托管的完整栈 Web 应用程序,用于管理错误案例、支持工单、项目分配和人员调度。它被设计为可重新品牌化,由任何公司——制造业、自动化或服务型组织——在其自有硬件上运行,无需依赖外部云。
data-lang-* 属性支持 EN/DE/ZH/… 在客户端进行翻译该应用程序出厂时不带任何第三方品牌。更改产品名称、替换标志,并在配置中设置您自己的公司名称、公共服务器 URL 和 API 密钥。所有品牌字符串都集中在少量位置(见部署),使单一公司能够几分钟内重新品牌化该平台。
高层设计和通信流程
┌─────────────────────────────────────────────────────────────────┐
│ 浏览器(客户端) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 原生 HTML/CSS/JS(单页应用) │ │
│ │ ┌────────┐ ┌──────────┐ ┌────────┐ ┌────────┐ ┌──────┐ │ │
│ │ │ 登录 │ │ 项目 │ 案例 │ 工单 │ 人员 │ │ │
│ │ └────────┘ └──────────┘ └────────┘ └────────┘ └──────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
│ HTTP/REST API
┌──────────────────────────────┴──────────────────────────────────┐
│ 局域网服务器 —— Express.js(端口 5003) │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────────┐ │
│ │ 认证 │ │ 工单 │ │ 案例 │ │ 人员 │ │ AI(翻译 │ │
│ │ │ │ 同步 │ │ CRUD │ │ CRUD │ │ + 相似案例)│ │
│ └────────┘ └────────┘ └────────┘ └────────┘ └──────────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
│
┌──────────┴──────────┐
│ MySQL 8.0(mysql2) │
│ error_tracker │
│ 8 个核心表 │
└─────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ 公共服务器(工单接收) │
│ HTTPS 表单 → 存储工单 → 由局域网服务器同步 │
└──────────────────────────────────────────────────────────┘mysql2 使用原始 SQL 查询——全程使用参数化查询XteVision Error Tracker 专为自托管、完全离线运行而设计:
error_tracker前端、后端和基础设施技术
| 层级 | 技术 | 用途 |
|---|---|---|
| 运行时 | Node.js | 服务器运行时 |
| 框架 | Express.js 4.x | Web 服务器 + API 路由 |
| 数据库 | MySQL 8.0(通过 mysql2) | 主数据存储 |
| 认证 | JWT(jsonwebtoken)+ bcryptjs | 密码哈希 + 会话 |
| 文件上传 | multer(磁盘存储) | 案例和工单附件 |
| 翻译 | Ollama 本地 LLM(aya-expanse:8b) | 客户端界面翻译 |
| AI 搜索 | Ollama(nomic-embed-text:latest) | 嵌入 + 相似案例搜索 |
| 前端 | 原生 HTML/CSS/JS + Font Awesome | 无框架单页应用 |
让 XteVision Error Tracker 在您的服务器上运行
安装依赖并启动服务器。服务器从项目根目录提供静态文件,并在 /api/* 暴露 API。
# 1. 安装依赖
npm install
# 2. 启动服务器(端口 5003)
npm start
# 或:node server.js
http://your-server-ip:5003
局域网服务器默认运行在端口 5003。从您的内部网络连接。
error_tracker 数据库并应用来自 backup.sql 的 schemadb.js 和 routes/auth.js——将这些移动到 .env 文件components.json 和 new_parameters/*.txt 以匹配您的设备和故障分类index.html 登录并开始添加项目、案例和工单目录结构和模块组织
xtevision-error-tracker/ ├── server.js # 主 Express 服务器:路由、认证、上传、AI、静态 ├── db.js # MySQL 连接单例 ├── routes/ │ ├── auth.js # 用户注册和登录端点 │ ├── users.js # 用户列表端点(用于下拉框) │ └── tickets.js # 工单 CRUD、公共服务器同步、推送到公共 ├── index.html # 主单页应用 —— 登录、项目、任务、案例、工单 ├── register.html # 公开用户注册页面 ├── register.js # 客户端注册逻辑 ├── styles.css # 完整样式表 —— 深色/浅色主题、响应式、动画 ├── components.json # 分层组件分类体系 ├── new_parameters/ # 下拉选项列表(集成商、故障类型、…) ├── backup.sql # 数据库的完整 MySQL 转储 └── license.txt # 专有许可证协议
| 文件 | 用途 |
|---|---|
| server.js | 主 Express 服务器 —— 所有 API 路由、认证中间件、文件上传、翻译 AI、AI 知识助手、静态文件服务 |
| db.js | MySQL 连接单例 |
| routes/auth.js | 用户注册和登录端点 |
| routes/users.js | 用户列表端点(用于下拉框) |
| routes/tickets.js | 工单 CRUD、公共服务器同步、推送到公共逻辑 |
| index.html | 主单页应用 —— 登录、项目、任务、案例、工单标签页 |
| register.html | 公开用户注册页面 |
| register.js | 客户端注册逻辑 |
| styles.css | 完整样式表 —— 深色/浅色主题、响应式布局、动画 |
| components.json | 分层组件分类体系(RAM、IFC 系统、计量系统、施胶系统等) |
| new_parameters/*.txt | 下拉选项列表(集成商、故障类型、子类型、人员等) |
| backup.sql | 数据库的完整 MySQL 转储 |
| license.txt | 专有许可证协议 |
关键表及其用途
| 表 | 用途 | 关键字段 |
|---|---|---|
| users | 认证用户 | id, username, email, password_hash, full_name, role |
| tasks | 项目/任务 | id, pm_number, pm_name, integrator, capture_date, start_at, finished_at |
| projects | 更高层的项目分组 | id, project_number, project_name |
| error_cases | 详细错误报告(约 40 个字段) | case_id, system info, error description, root cause, severity, resolution, lessons learned |
| case_attachments | 链接到错误案例的文件附件 | case_id, file_path, original_filename, file_type |
| tickets | 支持工单 | id, public_id, customer_name, subject, description, source, status, linked_case_id, sync_required |
| ticket_attachments | 链接到工单的文件附件 | |
| personell_arrangement | 人员部署记录 | project_number, integrator, personnel, trip_start_date, trip_return_date, duration_days, work_description, show_flag |
平台关键能力
跨工业设备跟踪硬件/软件错误,包含约 40 个字段、根因分析、严重度跟踪、解决方案文档化和经验教训。
通过公开表单接收外部客户的支持工单,然后在内部管理、关联和解决它们,并与您的公共服务器同步。
管理项目分配和现场部署——出行日期、时长、工作描述——与项目和错误案例关联。
周期性同步将本地状态更新推送并导入新的公共工单,同时下载并本地存储附件。
为工单的标题/描述生成嵌入,并通过余弦相似度找到最相似的 Top-N 错误案例。
客户端翻译链接触发本地 LLM;通过 data-lang-* 属性支持多种目标语言。
案例和工单附件使用时间戳文件名通过 multer 存储,经由两个静态挂载提供服务。
设备结构、故障类型和人员列表由简单的配置文件(components.json、new_parameters/*.txt)驱动。
完整的深色/浅色主题支持,带有响应式布局和动画,全部集中在一个样式表中。
深入的功能文档
基于 JWT 的认证,具有以下机制:
authenticateToken 检查 Authorization: Bearer <token> 头.env 文件,而不是硬编码在 routes/auth.js 和 db.js 中。uploads/case_<id>/,使用时间戳文件名uploads/(从公共服务器同步)和 web_tickets/uploads/(公开表单上传)express.static 挂载覆盖 /uploads 两个目录POST /api/translate → Ollama aya-expanse:8bPOST /api/ai/find-similar-cases —— 使用 nomic-embed-text 为工单的标题/描述生成嵌入,然后通过余弦相似度找到最相似的 Top-N 错误案例routes/tickets.js 导出 syncTicketsFromPublicServer(),其功能包括:
sync_required = 1)推送到公共服务器customer_name + subject + created_at)对工单的状态更新会自动设置 sync_required = 1 以用于回推。
https://error-tracker.example.com)由本地 LLM 驱动的知识助手
所有 AI 功能都在本地 Ollama 实例上运行,将客户数据完全保留在私有环境内:
aya-expanse:8b 用于客户端界面翻译nomic-embed-text:latest 用于相似案例搜索| 功能 | 描述 |
|---|---|
| 端点 | POST /api/ai/find-similar-cases |
| 嵌入模型 | nomic-embed-text:latest |
| 匹配 | 通过余弦相似度找到最相似的 Top-N 错误案例 |
| 存储 | 嵌入存储在数据库中以供复用 |
在您的服务器上运行和管理平台
mysql2)# 安装依赖
npm install
# 启动服务器(端口 5003)
npm start
# 或:node server.js
| 设置 | 位置 | 描述 |
|---|---|---|
| 数据库密码 | db.js | MySQL 连接凭据 |
| JWT 密钥 | routes/auth.js | 会话签名密钥——更改为您自己的值 |
| 公共服务器 URL | routes/tickets.js | 您自己的接收域名(替换占位符) |
| 公共推送 API 密钥 | routes/tickets.js | 上线前更改为您自己的密钥 |
| 产品名称/标志 | index.html | 白标品牌——设置您自己的公司名称 |
重新品牌化清单:在 index.html 中设置您自己的产品名称和标志,将公共服务器 URL 替换为您自己的域名,并轮换 JWT 密钥和公共服务器 API 密钥。然后将所有密钥移动到 .env 文件。
# 1. 停止服务器
npm stop
# 2. 备份您的数据和配置
cp backup.sql /tmp/et-backup.sql
cp db.js /tmp/et-db.bak
# 3. 安装新版本,然后恢复配置
npm install
# 4. 重启
npm start
升级前始终备份 backup.sql(您的数据)和 db.js / routes/auth.js(您的凭据)。
版本历史和发布说明
data-lang-* 属性进行 EN/DE/ZH/… 翻译常见问题和解决方案
db.js 凭据。确保 error_tracker 数据库存在。重新应用来自 backup.sql 的 schema。db.js 中的数据库连接。aya-expanse:8b / nomic-embed-text:latest)。AI 功能是可选的——核心跟踪无需它即可工作。routes/tickets.js 中的公共服务器 URL 和 API 密钥。检查网络连通性,并确认状态更新设置了 sync_required = 1。uploads/ 目录是否存在并具有写权限。检查上传 API 路由,并确认已配置 multer 中间件。