{"id":17226368,"url":"https://github.com/ccforward/perp","last_synced_at":"2026-04-16T04:03:24.852Z","repository":{"id":150262645,"uuid":"61529239","full_name":"ccforward/perp","owner":"ccforward","description":"Performance and Error Report Platform","archived":false,"fork":false,"pushed_at":"2017-09-26T01:36:56.000Z","size":725,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-29T10:09:48.790Z","etag":null,"topics":["error-log","error-monitoring","koa2","performance-monitoring","vue"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ccforward.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-20T08:22:40.000Z","updated_at":"2017-10-15T16:02:09.000Z","dependencies_parsed_at":"2023-04-12T17:16:50.169Z","dependency_job_id":null,"html_url":"https://github.com/ccforward/perp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ccforward/perp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccforward%2Fperp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccforward%2Fperp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccforward%2Fperp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccforward%2Fperp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ccforward","download_url":"https://codeload.github.com/ccforward/perp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccforward%2Fperp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31870516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["error-log","error-monitoring","koa2","performance-monitoring","vue"],"created_at":"2024-10-15T04:16:03.028Z","updated_at":"2026-04-16T04:03:24.815Z","avatar_url":"https://github.com/ccforward.png","language":"JavaScript","readme":"# 前端性能、异常监控平台 PERP\n\nPerformance and Errors Report Platform for FrontEnd\n\n## 技术栈\nKoa2 + MongoDB + Vue.js\n\n* Koa2 做web框架，log4js做日志服务\n* 通过定时任务将日志存入 MongoDB 中\n* 后台前端页面基于 Vue.js 和 Rubik UI 搭建\n* node.js 版本 \u003e= 7.6.0\n\n## 功能\n\n### 定时任务\n\n* 扫描任务，每 5min 扫描一次异常缓存中的数据，如果同一异常数据过高，则会发送报警邮件或报警短信\n* 准实时日志任务，每 3min 扫描一次当天的日志文件，将最新的日志数据添增量添加进数据库\n* 每日任务，每天 00:05 将前一天异常、性能日志全量入库\n\n### 数据统计\n\n* 使用 MongoDB 统计每一天的遗产数据 并可以根据系统、连接、日期多个维度查询\n* 通过 URL 搜索该页面的最近5日的错误数据\n\n### 代码翻译、还原\n\n通过异常信息中的 line(行) column(列) 和对应的 surcemap 文件，将压缩后的代码出错位置还原到压缩前源码位置上。\n\n### demo\n\ndemo暂时无数据\n\n* [异常数据统计](http://perp.ccforward.net/) \n* [性能数据统计](http://perp.ccforward.net/#/performance)\n* [代码翻译demo](http://perp.ccforward.net/translate)  \n  直接点解析源码和翻译源码按钮即可查看默认代码的翻译\n\n### 前端 SDK\n\n性能统计是根据浏览器的 `timing` API 来完成上报的，如果不支持 `timing` API，则不上报，可以手动上报性能统计数据。\n\n异常统计通过监听浏览器的 `error` 事件获取异常信息上报。  \n其中通过用 `arguments.callee.caller` 来兼容不支持 `onerror` 事件中 `stack` 参数的情况。\n\n## 数据 MongoDB\n\n### 异常上报数据字段\n\n``` js\nlink: '异常页面链接',\nos: '系统',\nua: '浏览器UA',\nip: 'IP地址',\ntitle: '页面title',\nsize: '页面width*height',\nreferer: 'referer',\ntimestamp: '客户端上报时间',\nmsg: '异常信息',\nurl: '异常 js 链接',\nline: '异常 line',\ncol: '异常 column',\nerrStack: '异常stack',\nother: '可自定义的其他信息',\ndtime: '日期 20170101 格式',\ndmonth: '月份 201701 格式',\ndate: '服务端上报时间',\n```\n\n### 性能统计数据字段\n\n```js\nlink: '异常页面链接',\nos: '系统',\nua: '浏览器UA',\nip: 'IP地址',\ntitle: '页面title',\nsize: '页面width*height',\nreferer: 'referer',\ntimestamp: '客户端上报时间',\n\n// timing.loadEventEnd - timing.fetchStart;\ntotal: '总时间 start 到 load',\n// timing.domComplete - timing.domInteractive;\ndomReady: '构建DOM时间',\n// timing.fetchStart - timing.navigationStart;\nreadyStart: '新页面准备时间',\n// timing.redirectEnd - timing.redirectStart;\nredirect: 'redirect时间',\n// timing.domainLookupStart - timing.fetchStart;\nappcache: '缓存时间',\n// timing.unloadEventEnd - timing.unloadEventStart;\nunloadEvent: 'unload document 时间',\n// timing.domainLookupEnd - timing.domainLookupStart;\ndnsLookup: 'DNS查询时间',\n// timing.connectEnd - timing.connectStart;\nconnect: 'TCP连接时间',\n// timing.responseEnd - timing.requestStart;\nrequest: '请求时间',\n// timing.domInteractive - timing.responseEnd;\ninitDomTree: 'DOM可交互时间',\n// timing.loadEventEnd - timing.loadEventStart;\nloadEvent: 'load事件时间',\n\nother: '可自定义的其他信息',\ndtime: '日期 20170101 格式',\ndmonth: '月份 201701 格式',\ndate: '服务端上报时间',\n```\n\n## Usage\n\n### 创建数据库\n\n进入mongo\n\n```js\nuse perp\ndb.createUser({\n  user: \"username\",\n  pwd: \"password\",\n  \"roles\" : [\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"report\"\n  },{\n    \"role\" : \"dbAdmin\",\n    \"db\" : \"report\"\n  }]\n})\n```\n\n### 启动\n\n修改配置文件 \n\n* `./src/config/default.js` 端口配置\n* 根据 mail.sample 新建文件 `./src/config/mail.js` 邮件配置\n* 根据 mongo.sample 新建文件 `./src/config/mongo.js` MongoDB 数据库配置\n\n```shell\nyarn install \n# 或者\nnpm install\n\n# 开发\nnpm run dev\n\n# 前端页面开发\nnpm run dev:fe\n\n# 部署\nnpm run deploy\n\n# 线上用 PM2 部署\npm2 start src/index.js\n```\n\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccforward%2Fperp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fccforward%2Fperp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccforward%2Fperp/lists"}