Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: vicanso/pingap
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.9.1
Choose a base ref
...
head repository: vicanso/pingap
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Loading
Showing with 25,642 additions and 14,409 deletions.
  1. +104 −24 .github/workflows/publish.yml
  2. +90 −63 .github/workflows/test.yml
  3. +2 −0 .gitignore
  4. +32 −30 Benchmark.md
  5. +455 −0 CHANGELOG.md
  6. +1,353 −694 Cargo.lock
  7. +126 −101 Cargo.toml
  8. +7 −5 Dockerfile
  9. +0 −31 Dockerfile-build
  10. +14 −10 Makefile
  11. +94 −50 README.md
  12. +81 −40 README_zh.md
  13. +82 −22 benches/bench.rs
  14. +1 −1 clippy.toml
  15. +91 −8 conf/basic.toml
  16. +24 −0 conf/certificates.toml
  17. +77 −0 conf/locations.toml
  18. +0 −217 conf/pingap.toml
  19. +505 −0 conf/plugins.toml
  20. +103 −0 conf/servers.toml
  21. +0 −22 conf/test.toml
  22. +129 −0 conf/upstreams.toml
  23. +4 −0 docs/README.md
  24. +36 −0 docs/acme_chart.md
  25. +65 −0 docs/modules.md
  26. +1 −1 error.html
  27. +15 −2 examples/README.md
  28. +1 −5 examples/grpc-web.toml
  29. +14 −11 examples/proxy-upstream.toml
  30. +0 −1 examples/static-serve.toml
  31. +73 −0 examples/transparent-proxy.toml
  32. +32 −0 pingap-acme/Cargo.toml
  33. +14 −0 pingap-acme/README.md
  34. +541 −0 pingap-acme/src/lets_encrypt.rs
  35. +71 −0 pingap-acme/src/lib.rs
  36. +41 −0 pingap-cache/Cargo.toml
  37. +11 −0 pingap-cache/README.md
  38. +544 −0 pingap-cache/src/file.rs
  39. +196 −95 {src/cache → pingap-cache/src}/http_cache.rs
  40. +196 −0 pingap-cache/src/lib.rs
  41. +60 −0 pingap-cache/src/prom.rs
  42. +172 −0 pingap-cache/src/tiny.rs
  43. +39 −0 pingap-certificate/Cargo.toml
  44. +14 −0 pingap-certificate/README.md
  45. 0 {src → pingap-certificate}/assets/e5.pem
  46. 0 {src → pingap-certificate}/assets/e6.pem
  47. 0 {src → pingap-certificate}/assets/r10.pem
  48. 0 {src → pingap-certificate}/assets/r11.pem
  49. +114 −0 pingap-certificate/src/chain.rs
  50. +241 −263 {src/proxy → pingap-certificate/src}/dynamic_certificate.rs
  51. +260 −0 pingap-certificate/src/lib.rs
  52. +270 −0 pingap-certificate/src/self_signed.rs
  53. +364 −0 pingap-certificate/src/tls_certificate.rs
  54. +110 −0 pingap-certificate/src/validity_checker.rs
  55. +55 −0 pingap-config/Cargo.toml
  56. +14 −0 pingap-config/README.md
  57. +461 −421 {src/config → pingap-config/src}/common.rs
  58. +60 −31 {src/config → pingap-config/src}/etcd.rs
  59. +53 −33 {src/config → pingap-config/src}/file.rs
  60. +72 −10 src/config/mod.rs → pingap-config/src/lib.rs
  61. +43 −0 pingap-core/Cargo.toml
  62. +7 −0 pingap-core/README.md
  63. +916 −0 pingap-core/src/ctx.rs
  64. +835 −0 pingap-core/src/http_header.rs
  65. +96 −51 {src/http_extra → pingap-core/src}/http_response.rs
  66. +69 −0 pingap-core/src/lib.rs
  67. +74 −0 pingap-core/src/notification.rs
  68. +123 −0 pingap-core/src/plugin.rs
  69. +289 −0 pingap-core/src/service.rs
  70. +151 −0 pingap-core/src/ttl_lru_limit.rs
  71. +58 −0 pingap-core/src/util.rs
  72. +33 −0 pingap-discovery/Cargo.toml
  73. +14 −0 pingap-discovery/README.md
  74. +117 −0 pingap-discovery/src/common.rs
  75. +97 −57 {src/discovery → pingap-discovery/src}/dns.rs
  76. +118 −81 {src/discovery → pingap-discovery/src}/docker.rs
  77. +47 −4 src/discovery/mod.rs → pingap-discovery/src/lib.rs
  78. +30 −0 pingap-health/Cargo.toml
  79. +19 −0 pingap-health/README.md
  80. +140 −0 pingap-health/src/grpc.rs
  81. +210 −0 pingap-health/src/http.rs
  82. +211 −0 pingap-health/src/lib.rs
  83. +32 −0 pingap-location/Cargo.toml
  84. +15 −0 pingap-location/README.md
  85. +5 −3 src/limit/mod.rs → pingap-location/src/lib.rs
  86. +830 −0 pingap-location/src/location.rs
  87. +106 −0 pingap-location/src/regex.rs
  88. +40 −0 pingap-logger/Cargo.toml
  89. +16 −0 pingap-logger/README.md
  90. +150 −79 src/proxy/logger.rs → pingap-logger/src/access.rs
  91. +5 −6 src/http_extra/mod.rs → pingap-logger/src/lib.rs
  92. +391 −0 pingap-logger/src/writer.rs
  93. +35 −0 pingap-otel/Cargo.toml
  94. +13 −0 pingap-otel/README.md
  95. +20 −0 pingap-otel/src/lib.rs
  96. +33 −11 {src/otel → pingap-otel/src}/provider.rs
  97. +328 −0 pingap-otel/src/tracer.rs
  98. +48 −0 pingap-performance/Cargo.toml
  99. +14 −0 pingap-performance/README.md
  100. +12 −13 src/state/mod.rs → pingap-performance/src/lib.rs
  101. +126 −0 pingap-performance/src/metrics.rs
  102. +59 −124 {src/state → pingap-performance/src}/process.rs
  103. +861 −0 pingap-performance/src/prom.rs
  104. +64 −0 pingap-plugin/Cargo.toml
  105. 0 pingap-plugin/README.md
  106. +9 −0 pingap-plugin/index.html
  107. +81 −22 {src/plugin → pingap-plugin/src}/accept_encoding.rs
  108. +105 −44 {src/plugin → pingap-plugin/src}/basic_auth.rs
  109. +553 −0 pingap-plugin/src/cache.rs
  110. +139 −37 {src/plugin → pingap-plugin/src}/combined_auth.rs
  111. +115 −31 {src/plugin → pingap-plugin/src}/compression.rs
  112. +145 −46 {src/plugin → pingap-plugin/src}/cors.rs
  113. +169 −64 {src/plugin → pingap-plugin/src}/csrf.rs
  114. +165 −35 {src/plugin → pingap-plugin/src}/directory.rs
  115. +129 −66 {src/plugin → pingap-plugin/src}/ip_restriction.rs
  116. +189 −59 {src/plugin → pingap-plugin/src}/jwt.rs
  117. +167 −56 {src/plugin → pingap-plugin/src}/key_auth.rs
  118. +145 −0 pingap-plugin/src/lib.rs
  119. +212 −56 {src/plugin → pingap-plugin/src}/limit.rs
  120. +289 −0 pingap-plugin/src/mock.rs
  121. +53 −39 {src/plugin → pingap-plugin/src}/ping.rs
  122. +84 −0 pingap-plugin/src/plugin.rs
  123. +239 −0 pingap-plugin/src/redirect.rs
  124. +112 −45 {src/plugin → pingap-plugin/src}/referer_restriction.rs
  125. +330 −0 pingap-plugin/src/request_id.rs
  126. +413 −0 pingap-plugin/src/response_headers.rs
  127. +375 −0 pingap-plugin/src/sub_filter.rs
  128. +338 −0 pingap-plugin/src/ua_restriction.rs
  129. +23 −0 pingap-pyroscope/Cargo.toml
  130. +3 −0 pingap-pyroscope/README.md
  131. +46 −13 src/pyro/mod.rs → pingap-pyroscope/src/lib.rs
  132. +16 −0 pingap-sentry/Cargo.toml
  133. +3 −0 pingap-sentry/README.md
  134. +3 −3 src/sentry/mod.rs → pingap-sentry/src/lib.rs
  135. +37 −0 pingap-upstream/Cargo.toml
  136. +21 −0 pingap-upstream/README.md
  137. +21 −0 pingap-upstream/src/lib.rs
  138. +1,060 −0 pingap-upstream/src/upstream.rs
  139. +38 −0 pingap-util/Cargo.toml
  140. +3 −0 pingap-util/README.md
  141. +50 −5 {src/util → pingap-util/src}/crypto.rs
  142. +112 −0 pingap-util/src/datetime.rs
  143. +167 −0 pingap-util/src/format.rs
  144. +89 −0 pingap-util/src/ip.rs
  145. +295 −0 pingap-util/src/lib.rs
  146. +20 −0 pingap-webhook/Cargo.toml
  147. +3 −0 pingap-webhook/README.md
  148. +215 −0 pingap-webhook/src/lib.rs
  149. +21 −0 pingap.service
  150. +0 −409 src/acme/lets_encrypt.rs
  151. +0 −189 src/acme/mod.rs
  152. +0 −153 src/acme/validity_checker.rs
  153. +69 −0 src/bin/generate-mermaid.rs
  154. +0 −240 src/cache/file.rs
  155. +0 −81 src/cache/mod.rs
  156. +0 −87 src/cache/tiny.rs
  157. +0 −59 src/discovery/common.rs
  158. +0 −384 src/health/mod.rs
  159. +0 −518 src/http_extra/http_header.rs
  160. +2 −15 src/lib.rs
  161. +0 −113 src/limit/ttl_lru_limit.rs
  162. +0 −275 src/logger/mod.rs
  163. +225 −149 src/main.rs
  164. +0 −210 src/otel/mod.rs
  165. +0 −29 src/perf/mod.rs
  166. +322 −246 src/plugin/admin.rs
  167. +0 −403 src/plugin/cache.rs
  168. +0 −229 src/plugin/mock.rs
  169. +171 −192 src/plugin/mod.rs
  170. +0 −161 src/plugin/redirect.rs
  171. +0 −216 src/plugin/request_id.rs
  172. +0 −255 src/plugin/response_headers.rs
  173. +139 −75 src/plugin/stats.rs
  174. +0 −237 src/plugin/ua_restriction.rs
  175. +534 −0 src/process/auto_restart.rs
  176. +177 −0 src/process/common.rs
  177. +7 −0 src/process/mod.rs
  178. +0 −788 src/proxy/location.rs
  179. +5 −15 src/proxy/mod.rs
  180. +664 −231 src/proxy/server.rs
  181. +149 −85 src/proxy/server_conf.rs
  182. +0 −738 src/proxy/upstream.rs
  183. +0 −408 src/service/auto_restart.rs
  184. +0 −91 src/service/mod.rs
  185. +0 −476 src/state/ctx.rs
  186. +0 −644 src/state/prom.rs
  187. +0 −50 src/util/ip.rs
  188. +0 −588 src/util/mod.rs
  189. +0 −246 src/webhook/mod.rs
  190. +8 −0 typos.toml
  191. +1,081 −1,532 web/package-lock.json
  192. +48 −46 web/package.json
  193. BIN web/src/assets/pingap-light.png
  194. BIN web/src/assets/pingap.png
  195. +7 −3 web/src/components/ex-form.tsx
  196. +25 −10 web/src/components/header.tsx
  197. +6 −6 web/src/components/nav.tsx
  198. +4 −4 web/src/components/sidebar-nav.tsx
  199. +6 −6 web/src/components/ui/card.tsx
  200. +1 −2 web/src/components/ui/checkbox.tsx
  201. +2 −5 web/src/components/ui/command.tsx
  202. +1 −2 web/src/components/ui/dialog.tsx
  203. +2 −7 web/src/components/ui/dropdown-menu.tsx
  204. +2 −5 web/src/components/ui/input.tsx
  205. +2 −3 web/src/components/ui/radio-group.tsx
  206. +4 −10 web/src/components/ui/select.tsx
  207. +15 −17 web/src/components/ui/textarea.tsx
  208. +1 −2 web/src/components/ui/toast.tsx
  209. +10 −7 web/src/constants.ts
  210. +13 −0 web/src/helpers/html.tsx
  211. +1 −0 web/src/helpers/http-error.ts
  212. +12 −1 web/src/helpers/request.ts
  213. +7 −6 web/src/helpers/util.ts
  214. +5 −5 web/src/hooks/use-toast.ts
  215. +45 −6 web/src/i18n/en.ts
  216. +43 −5 web/src/i18n/zh.ts
  217. +24 −8 web/src/pages/Basic.tsx
  218. +32 −19 web/src/pages/Certificates.tsx
  219. +98 −12 web/src/pages/Config.tsx
  220. +33 −9 web/src/pages/Home.tsx
  221. +30 −11 web/src/pages/Locations.tsx
  222. +93 −0 web/src/pages/Login.tsx
  223. +82 −45 web/src/pages/Plugins.tsx
  224. +24 −13 web/src/pages/Servers.tsx
  225. +11 −10 web/src/pages/Storages.tsx
  226. +17 −12 web/src/pages/Upstreams.tsx
  227. +10 −0 web/src/routers.tsx
  228. +4 −0 web/src/states/basic.ts
  229. +10 −0 web/src/states/config.ts
  230. +17 −0 web/src/states/token.ts
  231. +54 −52 web/tailwind.config.js
  232. +1 −1 web/tsconfig.app.tsbuildinfo
  233. +1 −1 web/tsconfig.node.tsbuildinfo
128 changes: 104 additions & 24 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ jobs:
uses: actions/setup-node@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.81.0
toolchain: 1.84.0
- name: build-web
run: make build-web
- name: Install target
@@ -52,7 +52,7 @@ jobs:
./.github/workflows/upload_asset.sh ./pingap-darwin-x86-full.tar.gz $GITHUB_TOKEN
linux-musl-x86:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: setup node
@@ -82,7 +82,7 @@ jobs:
./.github/workflows/upload_asset.sh ./pingap-linux-musl-x86-full.tar.gz $GITHUB_TOKEN
linux-musl-aarch64:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: setup node
@@ -112,7 +112,7 @@ jobs:
./.github/workflows/upload_asset.sh ./pingap-linux-musl-aarch64-full.tar.gz $GITHUB_TOKEN
linux-gnu-x86:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
timeout-minutes: 3600
steps:
- uses: actions/checkout@v4
@@ -126,6 +126,8 @@ jobs:
sudo apt install -y cmake libclang-dev wget gnupg ca-certificates lsb-release --no-install-recommends protobuf-compiler
- name: Install toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.84.0
- name: Run cargo release
run: |
make release-all
@@ -141,8 +143,10 @@ jobs:
./.github/workflows/upload_asset.sh ./pingap-linux-gnu-x86.tar.gz $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./pingap-linux-gnu-x86-full.tar.gz $GITHUB_TOKEN
linux-gnu-aarch64:
runs-on: ubuntu-20.04
# aarch64 full feature
linux-gnu-aarch64-full:
runs-on: ubuntu-22.04
timeout-minutes: 3600
steps:
- name: Change Swap Space
@@ -187,8 +191,9 @@ jobs:
uses: docker/build-push-action@v6
with:
platforms: linux/arm64
build-args: |
BUILD_ARGS=--features=full
outputs: type=local,dest=/tmp/pingap
# TODO 后续调整为不再使用docker的形式构建再支持full版本
- name: Upload Assets
run: |
cp /tmp/pingap/usr/local/bin/pingap ./pingap-linux-gnu-aarch64-full
@@ -197,6 +202,63 @@ jobs:
ls -lh pingap*.gz
./.github/workflows/upload_asset.sh ./pingap-linux-gnu-aarch64-full.tar.gz $GITHUB_TOKEN
linux-gnu-aarch64:
runs-on: ubuntu-22.04
timeout-minutes: 3600
steps:
- name: Change Swap Space
run: |
swapon --show=NAME | tail -n 1
df -lh
du -sh /usr/local/lib/android
sudo rm -rf /usr/local/lib/android
export SWAP_FILE=$(swapon --show=NAME | tail -n 1)
sudo swapoff $SWAP_FILE
sudo rm $SWAP_FILE
export SWAP_FILE=/swapfile
sudo fallocate -l 16G $SWAP_FILE
sudo chmod 600 $SWAP_FILE
sudo mkswap $SWAP_FILE
sudo swapon $SWAP_FILE
- name: Swap space report after modification
shell: bash
run: |
echo "Memory and swap:"
free -h
echo
swapon --show
df -lh
echo
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: |
vicanso/pingap
tags: |
type=raw,value=latest
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Build and export
uses: docker/build-push-action@v6
with:
platforms: linux/arm64
outputs: type=local,dest=/tmp/pingap
- name: Upload Assets
run: |
cp /tmp/pingap/usr/local/bin/pingap ./pingap-linux-gnu-aarch64
tar -czvf pingap-linux-gnu-aarch64.tar.gz ./pingap-linux-gnu-aarch64
ls -lh pingap*.gz
./.github/workflows/upload_asset.sh ./pingap-linux-gnu-aarch64.tar.gz $GITHUB_TOKEN
windows:
runs-on: windows-latest
name: ${{ matrix.target }}
@@ -246,23 +308,26 @@ jobs:
echo "PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
echo "OPENSSL_SRC_PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- name: Run cargo release
shell: bash
run: |
cargo --version
cargo build --release --features=full
mv target/release/pingap.exe ./pingap-windows.exe
- name: Zip
shell: powershell
run: |
Compress-Archive -Path pingap-windows.exe -Destination pingap-windows.exe.zip
- name: Upload asset
shell: bash
run: |
./.github/workflows/upload_asset.sh ./pingap-windows.exe.zip $GITHUB_TOKEN
# - name: Run cargo release
# shell: bash
# run: |
# cargo --version
# cargo build --release --features=full
# mv target/release/pingap.exe ./pingap-windows.exe
# - name: Zip
# shell: powershell
# run: |
# Compress-Archive -Path pingap-windows.exe -Destination pingap-windows.exe.zip
# - name: Upload asset
# shell: bash
# run: |
# ./.github/workflows/upload_asset.sh ./pingap-windows.exe.zip $GITHUB_TOKEN
docker:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
timeout-minutes: 3600
strategy:
matrix:
features: ['', 'full']
steps:
- name: Change Swap Space
run: |
@@ -289,14 +354,20 @@ jobs:
echo
- name: Checkout
uses: actions/checkout@v4
- name: Docker suffix
id: image_suffix
run: |
if [ "${{ matrix.features }}" != "" ]; then
echo "IMAGE_SUFFIX=-full" >> $GITHUB_OUTPUT
fi
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: |
vicanso/pingap
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{version}},suffix=${{ steps.image_suffix.outputs.IMAGE_SUFFIX }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
@@ -309,13 +380,22 @@ jobs:
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set build args
shell: bash
id: build_args
run: |
if [ "${{ matrix.features }}" != "" ]; then
echo "BUILD_ARGS=--features=${{ matrix.features }}" >> $GITHUB_OUTPUT
fi
- name: Build and push
id: docker_build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
platforms: linux/amd64, linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
build-args: |
BUILD_ARGS=${{ steps.build_args.outputs.BUILD_ARGS }}
- name: Image digest
run: |
echo ${{ steps.docker_build.outputs.digest }}
Loading