chore: import upstream snapshot with attribution
MCP Bash Server CI / Test MCP Bash Server (dev) (push) Has been cancelled
MCP Bash Server CI / Test MCP Bash Server (release) (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 13:11:39 +08:00
commit c8cebdfeee
4654 changed files with 626756 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
Please add the corresponding e2e (aka end-to-end) test cases if you add or update APIs.
## How to work
* Start and watch the [Docker Compose](https://docs.docker.com/compose/) environment
* The Compose file is `e2e/docker-compose.yml`
* The `testing` container uses [api-testing](https://github.com/LinuxSuRen/api-testing)
* The main test definition file is `e2e/testsuite.yaml`
* Before starting the suite locally, build the `apache/hertzbeat:test` image from the repository root:
```bash
mvn clean -B package -Prelease -Dmaven.test.skip=true --file pom.xml
docker build -t apache/hertzbeat:test -f script/docker/server/Dockerfile ./dist
```
* Run the E2E tests via [api-testing](https://github.com/LinuxSuRen/api-testing)
* The test cases run from top to bottom
* You can add the necessary assertions there
* Test data files are under `e2e/data/`
* The test report is generated at `e2e/report/report.md`
* HertzBeat logs are written to `e2e/logs/`
## Run locally
Please follow these steps if you want to run the E2E tests locally.
> Please make sure that Docker Compose v2 is installed
* Build the local `apache/hertzbeat:test` image from the repository root
* Change the directory to `e2e`, then run:
```bash
docker compose up --exit-code-from testing --remove-orphans
```
* If your environment uses the standalone Compose binary, use `docker-compose` instead of `docker compose`
* After the run, check `e2e/report/report.md` and `e2e/logs/` for the test result and runtime logs
+46
View File
@@ -0,0 +1,46 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "ftp",
"instance": "127.0.0.1",
"name": "{{.param.monitorFTP}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "port",
"type": 0,
"paramValue": 21
},
{
"field": "direction",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "timeout",
"type": 0,
"paramValue": 1000
},
{
"field": "ssl",
"type": 1,
"paramValue": false
},
{
"field": "username",
"type": 1
},
{
"field": "password",
"type": 1
}
]
}
+83
View File
@@ -0,0 +1,83 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "api",
"instance": "127.0.0.1",
"name": "{{.param.monitorHTTP}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "port",
"type": 0,
"paramValue": 80
},
{
"field": "httpMethod",
"type": 1,
"paramValue": "GET"
},
{
"field": "uri",
"type": 1
},
{
"field": "ssl",
"type": 1,
"paramValue": false
},
{
"field": "headers",
"type": 3
},
{
"field": "params",
"type": 3
},
{
"field": "timeout",
"type": 0
},
{
"field": "contentType",
"type": 1
},
{
"field": "payload",
"type": 1
},
{
"field": "authType",
"type": 1
},
{
"field": "username",
"type": 1
},
{
"field": "password",
"type": 1
},
{
"field": "keyword",
"type": 1
},
{
"field": "successCode",
"type": 4,
"paramValue": "200, 201"
},
{
"field": "enableUrlEncoding",
"type": 1,
"paramValue": true
}
]
}
+23
View File
@@ -0,0 +1,23 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "ping",
"instance": "127.0.0.1",
"name": "{{.param.monitorPing}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "timeout",
"type": 0,
"paramValue": 6000
}
]
}
+28
View File
@@ -0,0 +1,28 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "port",
"instance": "127.0.0.1",
"name": "{{.param.monitorPort}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "port",
"type": 0,
"paramValue": 80
},
{
"field": "timeout",
"type": 0,
"paramValue": 6000
}
]
}
+33
View File
@@ -0,0 +1,33 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "fullsite",
"instance": "127.0.0.1",
"name": "{{.param.monitorSiteMap}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "port",
"type": 0,
"paramValue": 80
},
{
"field": "sitemap",
"type": 1,
"paramValue": "sitemap.xml"
},
{
"field": "ssl",
"type": 1,
"paramValue": false
}
]
}
+27
View File
@@ -0,0 +1,27 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "ssl_cert",
"instance": "127.0.0.1",
"name": "{{.param.monitorSSL}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "port",
"type": 0,
"paramValue": 443
},
{
"field": "uri",
"type": 1
}
]
}
+32
View File
@@ -0,0 +1,32 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "udp_port",
"instance": "127.0.0.1",
"name": "{{.param.monitorUDP}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "port",
"type": 0,
"paramValue": 81
},
{
"field": "timeout",
"type": 0,
"paramValue": 6000
},
{
"field": "content",
"type": 1
}
]
}
+52
View File
@@ -0,0 +1,52 @@
{
"detected": false,
"collector": "",
"monitor": {
"intervals": 60,
"tags": [],
"app": "website",
"instance": "127.0.0.1",
"name": "{{.param.monitorWebsite}}"
},
"params": [
{
"field": "host",
"type": 1,
"paramValue": "127.0.0.1"
},
{
"field": "port",
"type": 0,
"paramValue": 80
},
{
"field": "uri",
"paramValue": 1
},
{
"field": "ssl",
"type": 1,
"paramValue": false
},
{
"field": "timeout",
"type": 0
},
{
"field": "authType",
"type": 1
},
{
"field": "username",
"type": 1
},
{
"field": "password",
"type": 1
},
{
"field": "keyword",
"type": 1
}
]
}
+56
View File
@@ -0,0 +1,56 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
version: '3.8'
services:
testing:
image: ghcr.io/linuxsuren/api-testing:v0.0.19
environment:
SERVER: http://hertzbeat:1157
container_name: e2e-testing
volumes:
- ./data/:/work/data/
- ./testsuite.yaml:/work/testsuite.yaml
- ./report/report.md:/report.md
command: atest run -p /work/testsuite.yaml --level debug --thread 3 --report md --report-file /report.md
depends_on:
checker:
condition: service_healthy
links:
- hertzbeat
- checker
checker:
image: alpine:latest
container_name: e2e-checker
command: sh -c "apk add --update curl && tail -f /dev/null"
healthcheck:
test: [ "CMD-SHELL",
"curl -s -X POST -H \"Content-Type: application/json\" -d '{\"type\": 0,\"identifier\": \"admin\",\"credential\": \"hertzbeat\"}' http://hertzbeat:1157/api/account/auth/form | grep -q token"
]
interval: 3s
timeout: 60s
retries: 10
start_period: 10s
hertzbeat:
image: apache/hertzbeat:test
container_name: e2e-hertzbeat
volumes:
- ./logs/:/opt/hertzbeat/logs/
ports:
- "1157:1157"
environment:
ALLOW_NONE_AUTHENTICATION: "yes"
+39
View File
@@ -0,0 +1,39 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTkRVeU5ESTROamd3SGhjTk1qVXdOREl4TVRNME1UQTRXaGNOTXpVd05ERTVNVE0wTVRBNApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTkRVeU5ESTROamd3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUR2U2SW5hQko4RGRiQVdmZTRNM09yS3ZTR1IvWkROS0JJV2lMejZXckcKYmh4Mm5ncHJFQjhRYThEWDZocGRCVkI1RmN3L1hwTXZjRnNCeFh3MThPNkdvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWRXOEFySENLNVQ2OFdJeG1BUnlTCkJFcHJ6N1F3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYlhwYXV0c2RlTlJHNm4zRmhBRkkzbncvWUErYTBBdi8KUE9HZzNhYWRCSDBDSUU5NW4vQW5yOXV2Z0tyczVrakpGKzAwci96SWpFdnQxNmhkOGdabFEzb1IKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
server: https://172.29.0.11:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJZm5OdzUyby9ybDB3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOelExTWpReU9EWTRNQjRYRFRJMU1EUXlNVEV6TkRFd09Gb1hEVEkyTURReQpNVEV6TkRFd09Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJHa3UxWDQvRGNMU1h4cXcKSzczdGhMUFd5Y3JCendrL3ZMbzkzMTZ0dXNXRWE4WnNMdytnYk5wWEVOSFNxQk8zdGcrYUFSdGhWakF3OU5GaApZWXNtaTQyalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU1B5dEJrYlFaRmtxSEpOaHlHNjZ1K3ZqbjNhakFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQXZQVC9ENGs2S29tUUxaZjRNMTEvd1psT3QyZkpGTGhIY3EyOHMvUUVLcndDSUZVMWVzTGFFTnRWc2xUeAo0QTFtNkt4eEpUbmdNM0M3UXJ5OUs0Z2hzVDA0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTkRVeU5ESTROamd3SGhjTk1qVXdOREl4TVRNME1UQTRXaGNOTXpVd05ERTVNVE0wTVRBNApXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTkRVeU5ESTROamd3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSeENGL2FuNVUvS0xEUk9VUlZxdllWTHFsdWxXaE8rMzJpc1lRU1hlYUgKdnRBWHo3dFE2MkhrazNIdXZudnFmditvQlBKVUlzS3ExTyt6aytLT3JWa2dvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWo4clFaRzBHUlpLaHlUWWNodXVyCnZyNDU5Mm93Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnWmxiRkpoZWwzQiszQ2FyZjUrdE5taDhkWkRUOC9yVDAKR01VVXlBNzlWSUVDSVFDSUQ1NkVQbmtOa0xmZExEZXloclBGWks3VWRTc2x2QWZGN2N4czF1MDBxZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUpMOGJrS1FMbEdZWUE0Ny9Lek9CRm5iZnI0NGQ5VndUWXlPT0dJdnNLOXNvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFYVM3VmZqOE53dEpmR3JBcnZlMkVzOWJKeXNIUENUKzh1ajNmWHEyNnhZUnJ4bXd2RDZCcwoybGNRMGRLb0U3ZTJENW9CRzJGV01ERDAwV0ZoaXlhTGpRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
+1
View File
@@ -0,0 +1 @@
K10800b7e6b1f6390067e433bd30dff5f925893b60074f8c36f7725bfdce6a45917::server:ca7449eb0dddd8a4bb6e5ca86e2d0cdd
+37
View File
@@ -0,0 +1,37 @@
{
"detected": true,
"monitor": {
"intervals": 10,
"tags": [],
"app": "kubernetes",
"instance": "172.29.0.11",
"name": "Brave_Stingray_55yR"
},
"collector": "",
"params": [
{
"display": true,
"field": "host",
"type": 1,
"paramValue": "172.29.0.11"
},
{
"display": true,
"field": "port",
"type": 0,
"paramValue": 6443
},
{
"display": true,
"field": "authType",
"type": 1,
"paramValue": "Bearer Token"
},
{
"display": true,
"field": "token",
"type": 1,
"paramValue": "#TOKEN#"
}
]
}
+69
View File
@@ -0,0 +1,69 @@
#!api-testing
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# yaml-language-server: $schema=https://linuxsuren.github.io/api-testing/api-testing-schema.json
name: hertzbeat
api: |
{{default "http://localhost:1157" (env "SERVER")}}
param:
monitorHTTP: "{{randAlpha 6}}"
monitorSiteMap: "{{randAlpha 6}}"
monitorPort: "{{randAlpha 6}}"
monitorSSL: "{{randAlpha 6}}"
monitorPing: "{{randAlpha 6}}"
monitorUDP: "{{randAlpha 6}}"
monitorWebsite: "{{randAlpha 6}}"
monitorFTP: "{{randAlpha 6}}"
tagName: "{{randAlpha 3}}"
items:
- name: login
request:
api: /api/account/auth/form
method: POST
header:
Content-type: application/json
body: |
{
"type": 0,
"identifier": "admin",
"credential": "hertzbeat"
}
expect:
bodyFieldsExpect:
code: "0"
- name: detectMonitor
request:
api: /api/monitor/detect
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/tmp.json
expect:
statusCode: 200
- name: createMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/tmp.json
expect:
statusCode: 200
+123
View File
@@ -0,0 +1,123 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
version: '3.8'
services:
init:
image: bitnami/kubectl:latest
privileged: true
depends_on:
k3s:
condition: service_healthy
entrypoint: /bin/bash
networks:
k3s_network:
ipv4_address: 172.29.0.10
volumes:
- ./data/config/k3s.yaml:/.kube/config
- ./data:/testcase
command:
- -c
- |
# Wait for k3s to start
until kubectl cluster-info; do sleep 1; done
sleep 5
# Create serviceaccount and clusterrolebinding
kubectl create serviceaccount -n kube-system cluster-admin-sa
kubectl create clusterrolebinding -n kube-system cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:cluster-admin-sa
cd /testcase
kubectl create token cluster-admin-sa -n kube-system --duration=24h
echo $(sed "s/#TOKEN#/$(echo $(kubectl create token cluster-admin-sa -n kube-system --duration=24h))/g" create_k8s_monitor_data.json)>tmp.json
# install metrics server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
sleep 30
tail -f /dev/null
k3s:
image: rancher/k3s:v1.31.0-k3s1
container_name: k3s
privileged: true
ports:
- "6443:6443"
- "80:80"
command: server --bind-address 172.29.0.11
networks:
k3s_network:
ipv4_address: 172.29.0.11
healthcheck:
test: [ "CMD-SHELL",
"kubectl cluster-info && echo $(cat /var/lib/rancher/k3s/server/node-token)>node-token.txt" ]
interval: 3s
retries: 30
start_period: 10s
timeout: 10s
volumes:
- ./data/config/k3s.yaml:/etc/rancher/k3s/k3s.yaml
- ./data/config/node-token.txt:/node-token.txt
testing:
image: ghcr.io/linuxsuren/api-testing:v0.0.17
environment:
SERVER: http://hertzbeat:1157
container_name: e2e-testing
volumes:
- ./data/:/work/data/
- ./data/testsuite.yaml:/work/testsuite.yaml
command: atest run -p /work/testsuite.yaml --level debug --thread 3
networks:
k3s_network:
ipv4_address: 172.29.0.12
depends_on:
checker:
condition: service_healthy
k3s:
condition: service_healthy
links:
- hertzbeat
- checker
- k3s
checker:
image: alpine:latest
container_name: e2e-checker
command: sh -c "apk add --update curl && tail -f /dev/null"
healthcheck:
test: [ "CMD-SHELL",
"curl -s -X POST -H \"Content-Type: application/json\" -d '{\"type\": 0,\"identifier\": \"admin\",\"credential\": \"hertzbeat\"}' http://hertzbeat:1157/api/account/auth/form | grep -q token"
]
interval: 3s
timeout: 60s
retries: 10
start_period: 10s
networks:
k3s_network:
ipv4_address: 172.29.0.13
depends_on:
- init
hertzbeat:
image: apache/hertzbeat:test
container_name: e2e-hertzbeat
volumes:
- ./logs/:/opt/hertzbeat/logs/
ports:
- "1157:1157"
networks:
k3s_network:
ipv4_address: 172.29.0.14
networks:
k3s_network:
driver: bridge
ipam:
config:
- subnet: 172.29.0.0/16
+1
View File
@@ -0,0 +1 @@
keep, not delete!
+478
View File
@@ -0,0 +1,478 @@
#!api-testing
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# yaml-language-server: $schema=https://linuxsuren.github.io/api-testing/api-testing-schema.json
name: hertzbeat
api: |
{{default "http://localhost:1157" (env "SERVER")}}
param:
monitorHTTP: "{{randAlpha 6}}"
monitorSiteMap: "{{randAlpha 6}}"
monitorPort: "{{randAlpha 6}}"
monitorSSL: "{{randAlpha 6}}"
monitorPing: "{{randAlpha 6}}"
monitorUDP: "{{randAlpha 6}}"
monitorWebsite: "{{randAlpha 6}}"
monitorFTP: "{{randAlpha 6}}"
apiTokenName: "e2e-token-{{randAlpha 6}}"
labelName: "{{randAlpha 3}}"
items:
- name: login
request:
api: /api/account/auth/form
method: POST
header:
Content-type: application/json
body: |
{
"type": 0,
"identifier": "admin",
"credential": "hertzbeat"
}
expect:
bodyFieldsExpect:
code: "0"
- name: login-missing-content-type
request:
api: /api/account/auth/form
method: POST
body: |
{
"type": 0,
"identifier": "admin",
"credential": "hertzbeat"
}
expect:
statusCode: 500
- name: monitorList
request:
api: /api/monitors?pageIndex=0&pageSize=8
header:
Authorization: Bearer {{.login.data.token}}
expect:
bodyFieldsExpect:
code: "0"
- name: missing-auth-header
request:
api: /api/monitors
header:
Accept: application/json
expect:
statusCode: 401
- name: createSitemapMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-sitemap.json
- name: listSitemapMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=fullsite
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelSitemapMonitor
request:
api: /api/monitors/manage?ids={{(index .listSitemapMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deleteSitemapMonitor
request:
api: /api/monitors?ids={{(index .listSitemapMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: createPortMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-port.json
- name: listPortMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=port
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelPortMonitor
request:
api: /api/monitors/manage?ids={{(index .listPortMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deletePortMonitor
request:
api: /api/monitors?ids={{(index .listPortMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: createSSLMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-ssl.json
- name: listSSLMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=ssl_cert
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelSSLMonitor
request:
api: /api/monitors/manage?ids={{(index .listSSLMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deleteSSLMonitor
request:
api: /api/monitors?ids={{(index .listSSLMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: createPingMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-ping.json
- name: listPingMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=ping
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelPingMonitor
request:
api: /api/monitors/manage?ids={{(index .listPingMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deletePingMonitor
request:
api: /api/monitors?ids={{(index .listPingMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: createUDPMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-udp.json
- name: listUDPMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=udp_port
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelUDPMonitor
request:
api: /api/monitors/manage?ids={{(index .listUDPMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deleteUDPMonitor
request:
api: /api/monitors?ids={{(index .listUDPMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: createWebsiteMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-website.json
- name: listWebsiteMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=website
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelWebsiteMonitor
request:
api: /api/monitors/manage?ids={{(index .listWebsiteMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deleteWebsiteMonitor
request:
api: /api/monitors?ids={{(index .listWebsiteMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: createFTPMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-ftp.json
- name: listFTPMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=ftp
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelFTPMonitor
request:
api: /api/monitors/manage?ids={{(index .listFTPMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deleteFTPMonitor
request:
api: /api/monitors?ids={{(index .listFTPMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: createHTTPMonitor
request:
api: /api/monitor
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
bodyFromFile: data/monitor-http.json
- name: listHTTPMonitor
request:
api: /api/monitors?pageIndex=0&pageSize=8&app=api
header:
Authorization: Bearer {{.login.data.token}}
- name: cancelHTTPMonitor
request:
api: /api/monitors/manage?ids={{(index .listHTTPMonitor.data.content 0).id | int64}}
query:
type: JSON
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: deleteHTTPMonitor
request:
api: /api/monitors?ids={{(index .listHTTPMonitor.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: listAlertDefines
request:
api: /api/alert/defines
header:
Authorization: Bearer {{.login.data.token}}
- name: deleteAlertDefine
request:
api: /api/alert/defines?ids=1
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
- name: listAlertGroupConverges
request:
api: /api/alert/groups
header:
Authorization: Bearer {{.login.data.token}}
- name: listAlertSilences
request:
api: /api/alert/silences
header:
Authorization: Bearer {{.login.data.token}}
- name: listGroupAlerts
request:
api: /api/alerts/group
header:
Authorization: Bearer {{.login.data.token}}
- name: listReceivers
request:
api: /api/notice/receivers
header:
Authorization: Bearer {{.login.data.token}}
- name: listRules
request:
api: /api/notice/rules
header:
Authorization: Bearer {{.login.data.token}}
- name: listTemplates
request:
api: /api/notice/templates
header:
Authorization: Bearer {{.login.data.token}}
- name: listCollectors
request:
api: /api/collector
header:
Authorization: Bearer {{.login.data.token}}
## Label
- name: createLabel
request:
api: /api/label
method: POST
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
body: |
{
"name": "{{.param.labelName}}"
}
- name: listLabels
request:
api: /api/label?pageIndex=0&pageSize=8&type=1
header:
Authorization: Bearer {{.login.data.token}}
- name: updateLabel
request:
api: /api/label
method: PUT
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
body: |
{
"id": {{(index .listLabels.data.content 0).id | int64}},
"name": "{{randAlpha 3}}",
"tagValue": "{{randAlpha 3}}",
"type": 1,
"creator": "admin",
"modifier": "admin"
}
expect:
bodyFieldsExpect:
code: "0"
- name: deleteLabel
request:
api: /api/label?ids={{(index .listLabels.data.content 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
## API Token Management
- name: generateApiToken
request:
api: /api/account/token/generate?name={{.apiTokenName}}&expireSeconds=-1
method: POST
header:
Authorization: Bearer {{.login.data.token}}
expect:
bodyFieldsExpect:
code: "0"
- name: listApiTokens
request:
api: /api/account/token
header:
Authorization: Bearer {{.login.data.token}}
expect:
bodyFieldsExpect:
code: "0"
data.0.name: "{{.apiTokenName}}"
data.0.creator: "admin"
- name: listApiTokensByGeneratedToken
request:
api: /api/account/token
header:
Authorization: Bearer {{.generateApiToken.data.token}}
expect:
bodyFieldsExpect:
code: "0"
data.0.name: "{{.apiTokenName}}"
- name: useGeneratedTokenToCallApi
request:
api: /api/monitors?pageIndex=0&pageSize=8
header:
Authorization: Bearer {{.generateApiToken.data.token}}
expect:
bodyFieldsExpect:
code: "0"
- name: deleteApiToken
request:
api: /api/account/token/{{(index .listApiTokens.data 0).id | int64}}
method: DELETE
header:
Authorization: Bearer {{.login.data.token}}
expect:
bodyFieldsExpect:
code: "0"
## Config
- name: getConfigEmail
request:
api: /api/config/email
header:
Authorization: Bearer {{.login.data.token}}
- name: getConfigSystem
request:
api: /api/config/system
header:
Authorization: Bearer {{.login.data.token}}
- name: updateSystem
request:
api: /api/config/system
method: POST
body: |
{
"timeZoneId": "Asia/Shanghai",
"locale": "en_US",
"theme": null
}
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json
- name: getConfigOSS
request:
api: /api/config/oss
header:
Authorization: Bearer {{.login.data.token}}
- name: updateOSS
request:
api: /api/config/oss
method: POST
body: |
{
"type": "FILE",
"config": {}
}
header:
Authorization: Bearer {{.login.data.token}}
Content-type: application/json