From cdcf2ea15fc9586e89f1ce882cb941ce1c17deaa Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Mon, 18 Nov 2024 18:09:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20PageSpy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- .github/README.md | 1 + README.md | 1 + apps/page-spy-web/1.9.6/data.yml | 16 +++++++++++ apps/page-spy-web/1.9.6/docker-compose.yml | 21 +++++++++++++++ apps/page-spy-web/1.9.6/scripts/init.sh | 15 +++++++++++ apps/page-spy-web/1.9.6/scripts/uninstall.sh | 10 +++++++ apps/page-spy-web/1.9.6/scripts/upgrade.sh | 15 +++++++++++ apps/page-spy-web/README.md | 27 +++++++++++++++++++ apps/page-spy-web/data.yml | 15 +++++++++++ apps/page-spy-web/logo.png | Bin 0 -> 11255 bytes 10 files changed, 121 insertions(+) create mode 100644 apps/page-spy-web/1.9.6/data.yml create mode 100644 apps/page-spy-web/1.9.6/docker-compose.yml create mode 100644 apps/page-spy-web/1.9.6/scripts/init.sh create mode 100644 apps/page-spy-web/1.9.6/scripts/uninstall.sh create mode 100644 apps/page-spy-web/1.9.6/scripts/upgrade.sh create mode 100644 apps/page-spy-web/README.md create mode 100644 apps/page-spy-web/data.yml create mode 100644 apps/page-spy-web/logo.png diff --git a/.github/README.md b/.github/README.md index becc83b3d..01691ae1d 100644 --- a/.github/README.md +++ b/.github/README.md @@ -134,6 +134,7 @@ | 🟢 | | NocoDB | https://nocodb.com/ | 无代码数据库平台 | | | 🟢 | | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | | | 🟢 | | OutLine | https://www.getoutline.com/ | 快速、协作的团队知识库 | | +| 🟢 | | PageSpy | https://www.pagespy.org/ | 开源调试平台 | | | 🟢 | | PhotoPrism | https://www.photoprism.app/ | 面向去中心化网络的人工智能照片应用程序 | | | 🟢 | | Pixman | https://pixman.io/ | IPTV、M3U8 流媒体代理方案 | | | 🟢 | | Pingvin Share | https://github.com/stonith404/pingvin-share/ | 一个集轻盈与美观于一体的自托管文件共享平台 | | diff --git a/README.md b/README.md index 1619f630b..132c65973 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ | 🟢 | | NocoDB | https://nocodb.com/ | 无代码数据库平台 | | | 🟢 | | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | | | 🟢 | | OutLine | https://www.getoutline.com/ | 快速、协作的团队知识库 | | +| 🟢 | | PageSpy | https://www.pagespy.org/ | 开源调试平台 | | | 🟢 | | PhotoPrism | https://www.photoprism.app/ | 面向去中心化网络的人工智能照片应用程序 | | | 🟢 | | Pixman | https://pixman.io/ | IPTV、M3U8 流媒体代理方案 | | | 🟢 | | Pingvin Share | https://github.com/stonith404/pingvin-share/ | 一个集轻盈与美观于一体的自托管文件共享平台 | | diff --git a/apps/page-spy-web/1.9.6/data.yml b/apps/page-spy-web/1.9.6/data.yml new file mode 100644 index 000000000..9ebbec5ec --- /dev/null +++ b/apps/page-spy-web/1.9.6/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + - default: "/home/PageSpy" + edit: true + envKey: KIMAI2_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 6752 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number diff --git a/apps/page-spy-web/1.9.6/docker-compose.yml b/apps/page-spy-web/1.9.6/docker-compose.yml new file mode 100644 index 000000000..b7e11c35b --- /dev/null +++ b/apps/page-spy-web/1.9.6/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true + +services: + page-spy-web: + image: huolalatech/page-spy-web:v1.9.6 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6752 + env_file: + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${PAGE_SPY_WEB_ROOT_PATH}/log:/app/log + - ${PAGE_SPY_WEB_ROOT_PATH}/data:/app/data diff --git a/apps/page-spy-web/1.9.6/scripts/init.sh b/apps/page-spy-web/1.9.6/scripts/init.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/page-spy-web/1.9.6/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/page-spy-web/1.9.6/scripts/uninstall.sh b/apps/page-spy-web/1.9.6/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/page-spy-web/1.9.6/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/page-spy-web/1.9.6/scripts/upgrade.sh b/apps/page-spy-web/1.9.6/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/page-spy-web/1.9.6/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/page-spy-web/README.md b/apps/page-spy-web/README.md new file mode 100644 index 000000000..e20df2355 --- /dev/null +++ b/apps/page-spy-web/README.md @@ -0,0 +1,27 @@ +# PageSpy + +PageSpy 是一个用于在 Web、小程序和 HarmonyOS 应用等平台上调试项目的工具。 + +![PageSpy](https://file.lifebus.top/imgs/pagespy_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +PageSpy 是一款兼容 Web / 小程序 / React Native / 鸿蒙 App 等平台项目的开源调试平台。基于对原生 API +的封装,它将调用原生方法时的参数进行过滤、转化,整理成一定格式的消息供调试端消费;调试端收到消息数据后,提供类似本地控制台的功能界面将数据呈现出来。 + +![PageSpy 流程图](https://file.lifebus.top/imgs/pagespy_process.png) + +## 何时使用 + +任何无法在本地使用控制台调试的场景,都是 PageSpy 可以大显身手的时候! 一起来看下面的几个场景案例: + +本地调试 H5、Webview 应用:以往有些产品提供了可以在 H5 上查看信息的面板,但移动端屏幕太小操作不便、显示不友好,以及信息被截断等问题; +远程办公、跨地区协同:传统沟通方式如邮件、电话、视频会议等,沟通效率不高、故障信息不全面,容易误解误判; +用户终端上出现白屏问题:传统定位问题的方式包括数据监控、日志分析等,这些方式依赖排障人员要理解业务需求场景、技术实现; +PageSpy 的目标,就是为包括以上场景的人员提供帮助。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/page-spy-web/data.yml b/apps/page-spy-web/data.yml new file mode 100644 index 000000000..651f4e101 --- /dev/null +++ b/apps/page-spy-web/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: page-spy-web + name: PageSpy + tags: + - WebSite + - Middleware + - Local + shortDescZh: 开源调试平台 + shortDescEn: Open source debugging platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.pagespy.org/ + github: https://github.com/HuolalaTech/page-spy-web/ + document: https://www.pagespy.org/ diff --git a/apps/page-spy-web/logo.png b/apps/page-spy-web/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..528a5d7e4ff372c7afcff46740f7a9645e3132b2 GIT binary patch literal 11255 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