Traefik tls enable
This commit is contained in:
4
Makefile
4
Makefile
@@ -182,9 +182,9 @@ wrk-search: ## Нагрузочный тест поиска (wrk2)
|
||||
http://localhost:8080/v1/search?type=event\&q=test
|
||||
|
||||
wrk-health: ## Нагрузочный тест health (wrk2)
|
||||
wrk -t4 -c10000 -d30s -t200 \
|
||||
wrk -t4 -c100 -d30s -t100 \
|
||||
-H "Host: api.eventhub.local" \
|
||||
http://localhost/health
|
||||
https://api.eventhub.local/health
|
||||
|
||||
# ============================================================================
|
||||
# CODE QUALITY
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
# docker/docker-compose.yml
|
||||
services:
|
||||
# ================== Балансировщик нагрузки ==================
|
||||
# ================== Балансировщик нагрузки (HTTPS/WSS) ==================
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
user: "0:1001" # группа docker на хосте (подберите при необходимости, см. ls -la /var/run/docker.sock)
|
||||
user: "0:1001" # группа docker на хосте (подберите под свою систему, см. ls -la /var/run/docker.sock)
|
||||
command:
|
||||
- "--api.insecure=true" # дашборд (можно отключить в production)
|
||||
- "--api.insecure=true" # дашборд (можно удалить в production)
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.web.address=:80" # пользовательский REST
|
||||
- "--entrypoints.ws.address=:8081" # пользовательский WebSocket
|
||||
- "--entrypoints.admin-web.address=:8445" # админский REST
|
||||
- "--entrypoints.admin-ws.address=:8446" # админский WebSocket
|
||||
# === Включаем метрики Prometheus ===
|
||||
- "--providers.file.filename=/etc/traefik/dynamic_conf.yml" # самоподписанный сертификат и редирект
|
||||
- "--entrypoints.web.address=:80" # HTTP (для редиректа)
|
||||
- "--entrypoints.websecure.address=:443" # HTTPS/WSS
|
||||
# Метрики Prometheus
|
||||
- "--metrics.prometheus=true"
|
||||
- "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
|
||||
- "--metrics.prometheus.addEntryPointsLabels=true"
|
||||
- "--metrics.prometheus.addServicesLabels=true"
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
# порт дашборда (опционально)
|
||||
- "8080:8080"
|
||||
- "8081:8081"
|
||||
- "8445:8445"
|
||||
- "8446:8446"
|
||||
volumes:
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
- "./traefik/certs:/etc/traefik/certs:ro" # самоподписанный сертификат
|
||||
- "./traefik/dynamic_conf.yml:/etc/traefik/dynamic_conf.yml:ro"
|
||||
networks:
|
||||
- eventhub-net
|
||||
restart: unless-stopped
|
||||
|
||||
# ================== Кластер EventHub ==================
|
||||
# ================== Кластер EventHub (3 ноды) ==================
|
||||
eventhub-node1:
|
||||
build:
|
||||
context: ..
|
||||
@@ -46,25 +46,41 @@ services:
|
||||
- eventhub-node1-data:/app/data
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
# REST API пользователей
|
||||
# --- REST API пользователей ---
|
||||
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
||||
- "traefik.http.routers.api.entrypoints=web"
|
||||
- "traefik.http.routers.api.service=api"
|
||||
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
|
||||
- "traefik.http.routers.api-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.api-secure.tls=true"
|
||||
- "traefik.http.routers.api-secure.service=api"
|
||||
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
||||
# WebSocket пользователей
|
||||
# --- WebSocket пользователей (WSS через websecure) ---
|
||||
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
||||
- "traefik.http.routers.ws.entrypoints=ws"
|
||||
- "traefik.http.routers.ws.service=ws"
|
||||
- "traefik.http.routers.ws.entrypoints=web"
|
||||
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
|
||||
- "traefik.http.routers.ws-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.ws-secure.tls=true"
|
||||
- "traefik.http.routers.ws-secure.service=ws"
|
||||
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
||||
# Админский REST
|
||||
# --- Админский REST ---
|
||||
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-api.entrypoints=admin-web"
|
||||
- "traefik.http.routers.admin-api.service=admin-api"
|
||||
- "traefik.http.routers.admin-api.entrypoints=web"
|
||||
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.admin-api-secure.tls=true"
|
||||
- "traefik.http.routers.admin-api-secure.service=admin-api"
|
||||
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
||||
# Админский WebSocket
|
||||
# --- Админский WebSocket (WSS) ---
|
||||
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
|
||||
- "traefik.http.routers.admin-ws.service=admin-ws"
|
||||
- "traefik.http.routers.admin-ws.entrypoints=web"
|
||||
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.admin-ws-secure.tls=true"
|
||||
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
|
||||
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -86,19 +102,35 @@ services:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
||||
- "traefik.http.routers.api.entrypoints=web"
|
||||
- "traefik.http.routers.api.service=api"
|
||||
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
|
||||
- "traefik.http.routers.api-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.api-secure.tls=true"
|
||||
- "traefik.http.routers.api-secure.service=api"
|
||||
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
||||
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
||||
- "traefik.http.routers.ws.entrypoints=ws"
|
||||
- "traefik.http.routers.ws.service=ws"
|
||||
- "traefik.http.routers.ws.entrypoints=web"
|
||||
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
|
||||
- "traefik.http.routers.ws-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.ws-secure.tls=true"
|
||||
- "traefik.http.routers.ws-secure.service=ws"
|
||||
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
||||
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-api.entrypoints=admin-web"
|
||||
- "traefik.http.routers.admin-api.service=admin-api"
|
||||
- "traefik.http.routers.admin-api.entrypoints=web"
|
||||
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.admin-api-secure.tls=true"
|
||||
- "traefik.http.routers.admin-api-secure.service=admin-api"
|
||||
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
||||
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
|
||||
- "traefik.http.routers.admin-ws.service=admin-ws"
|
||||
- "traefik.http.routers.admin-ws.entrypoints=web"
|
||||
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.admin-ws-secure.tls=true"
|
||||
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
|
||||
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -120,19 +152,35 @@ services:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
||||
- "traefik.http.routers.api.entrypoints=web"
|
||||
- "traefik.http.routers.api.service=api"
|
||||
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
|
||||
- "traefik.http.routers.api-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.api-secure.tls=true"
|
||||
- "traefik.http.routers.api-secure.service=api"
|
||||
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
||||
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
||||
- "traefik.http.routers.ws.entrypoints=ws"
|
||||
- "traefik.http.routers.ws.service=ws"
|
||||
- "traefik.http.routers.ws.entrypoints=web"
|
||||
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
|
||||
- "traefik.http.routers.ws-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.ws-secure.tls=true"
|
||||
- "traefik.http.routers.ws-secure.service=ws"
|
||||
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
||||
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-api.entrypoints=admin-web"
|
||||
- "traefik.http.routers.admin-api.service=admin-api"
|
||||
- "traefik.http.routers.admin-api.entrypoints=web"
|
||||
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.admin-api-secure.tls=true"
|
||||
- "traefik.http.routers.admin-api-secure.service=admin-api"
|
||||
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
||||
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
|
||||
- "traefik.http.routers.admin-ws.service=admin-ws"
|
||||
- "traefik.http.routers.admin-ws.entrypoints=web"
|
||||
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
|
||||
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
|
||||
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.admin-ws-secure.tls=true"
|
||||
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
|
||||
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -144,9 +192,8 @@ services:
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
|
||||
- '--web.console.templates=/usr/share/prometheus/consoles'
|
||||
# === Ограничение retention ===
|
||||
- '--storage.tsdb.retention.time=30d' # хранить данные 30 дней
|
||||
- '--storage.tsdb.retention.size=15GB' # максимальный размер 15 ГБ
|
||||
- '--storage.tsdb.retention.time=30d'
|
||||
- '--storage.tsdb.retention.size=15GB'
|
||||
volumes:
|
||||
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- prometheus-data:/prometheus
|
||||
@@ -160,9 +207,9 @@ services:
|
||||
image: grafana/grafana:latest
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
|
||||
- GF_SECURITY_DISABLE_INITIAL_ADMIN_PASSWORD_CHANGE=false # обязательно сменить пароль после первого входа
|
||||
- GF_USERS_ALLOW_SIGN_UP=false # запретить самостоятельную регистрацию
|
||||
- GF_AUTH_ANONYMOUS_ENABLED=false # запретить анонимный доступ
|
||||
- GF_SECURITY_DISABLE_INITIAL_ADMIN_PASSWORD_CHANGE=false
|
||||
- GF_USERS_ALLOW_SIGN_UP=false
|
||||
- GF_AUTH_ANONYMOUS_ENABLED=false
|
||||
volumes:
|
||||
- ./grafana/provisioning:/etc/grafana/provisioning
|
||||
- ./grafana/dashboards:/etc/grafana/dashboards
|
||||
|
||||
4
docker/traefik/certs/make-traefik-certs.sh
Normal file
4
docker/traefik/certs/make-traefik-certs.sh
Normal file
@@ -0,0 +1,4 @@
|
||||
#mkdir -p docker/traefik/certs
|
||||
cd docker/traefik/certs
|
||||
# Генерируем приватный ключ и самоподписанный сертификат на 10 лет
|
||||
openssl req -x509 -newkey rsa:4096 -keyout traefik.key -out traefik.crt -days 3650 -nodes -subj "/CN=*.eventhub.local"
|
||||
30
docker/traefik/certs/traefik.crt
Normal file
30
docker/traefik/certs/traefik.crt
Normal file
@@ -0,0 +1,30 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFFzCCAv+gAwIBAgIUUX5W2zeEC7Z8wSBPoFSDNLpV6U0wDQYJKoZIhvcNAQEL
|
||||
BQAwGzEZMBcGA1UEAwwQKi5ldmVudGh1Yi5sb2NhbDAeFw0yNjA0MjUwNzAzNTZa
|
||||
Fw0zNjA0MjIwNzAzNTZaMBsxGTAXBgNVBAMMECouZXZlbnRodWIubG9jYWwwggIi
|
||||
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDAKnFa4rgzqERaAHGh1sKLy++A
|
||||
AqFKBIJAtK+8YPz45jtHElT0BJfE2kOo3wZ+iucbE+dg4yfrKkD4bfa6zbwCYP2h
|
||||
hEHT6w1tI1BMZCrgY+eqEjvgTYLb5oq9J9zs9GawmaW+XCnUVAOWdOFU3MQlBcbn
|
||||
FJrDAwz4BjmaRFGVMm95Nk2eGD3cObuqQUVMR95YgZxHyX5M7F8jIAdUO6DoB+fT
|
||||
MQEEudkU/po/Xp2Xx3GJavRDMPoZ4HEGpQlPmU5JzeMAHVVx6Zj8Ls45eGX4qwf7
|
||||
4OXbAmBRntpjDIz8qQVAl11QakM2ZW2ALEkIqRU6tIiiyk/PO3fuq11IMGNlx1oL
|
||||
9L8ClSsgsA3UX7YmjpFmvDJX0anBHiUKonHXzroPu4opm9RpUhYkUTiNLoQxOWwz
|
||||
FeBmfg5vzJ/fd/w/796CU56vCRctG5UpXWD9dQxjXkWVZIoRvuIeGIIW2qy+NkJA
|
||||
OuF0aTAphm4Hns9yT4EvfJIvLSZKQyFu6oIfvR4e1RTlZmzgVUQ+O50Kk7z6Jwnt
|
||||
DkFburi/HnJ8I5YS6zeLrNykKhTPOZu8SfFm5UA71SJZorzftE3R6jz9iPj2Ev48
|
||||
F7rCWhMqfGtiIp70ASx9xv+5ZTQPLEQkvH+R4JYOqWUwmJhtiso6z8a8zB+3MbGX
|
||||
f2VTurQ1nB6+C9SaIQIDAQABo1MwUTAdBgNVHQ4EFgQU/EItSTyuc3hQdo4uZdh9
|
||||
L8o6kkMwHwYDVR0jBBgwFoAU/EItSTyuc3hQdo4uZdh9L8o6kkMwDwYDVR0TAQH/
|
||||
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAY0UTqk6ICLlyFKNoTyybd1Mf+Hsz
|
||||
Wn39zJnfdfTbw7DTZgAxU+rPkwWVtpAQpzKS9WugoYa7AEUZDphDHQBlzhuT8xd7
|
||||
0Gy47kZEklY29FaNDKaiStZ+GEU323irC22y2od0AVHVssKGG/tLWL4hUViMYTWx
|
||||
Yj6zpzovM2BrIzzAvjIQ0DAAFcVEr5lyvCduz83NiqQH6M/onTGXM01nXhUoIZnZ
|
||||
QV0O4Rsnsi5VcnP8pUI3aKkxZ7rkVb/AktNTe7rX7xRztdTt0BGOOVR0u7Q97cQ6
|
||||
kjXbrwIf6cura9J1FyyUeGA7B9z1huYm5XslpkhJ3ILd8DHBvKv5n7wDNuNbocGo
|
||||
FrVza3sruJDwQzJSDmUyC+xoRv112X2R51sjOe9j17zxfSFqjVckWXTvI+ZvoLoX
|
||||
g3pbAMQ06bmXpDYcg6er9NG/eycZvpYbSCCRS+TRDLSMshg/F6JoGVcHJtCNkTl9
|
||||
Sl70z3+/ytjdOl/+XYQ6sEUzd4qtBrslCBX78y4elcO8qQIBWBkvYr+BI09MJyW0
|
||||
C+Zae0G3mifyhWCfqm6Eq5lKhVhO9bF5rL6E+n4QSYK4PQ6GqAkNZ8/yVo8YcI0Z
|
||||
fYNOIjQTEz9qqTlwDS8PTO0fFZLeiB64P86jf6m6WNhuQ+CC3BP6HP5ACImhy26N
|
||||
ctzWkY+lExmP/1o=
|
||||
-----END CERTIFICATE-----
|
||||
52
docker/traefik/certs/traefik.key
Normal file
52
docker/traefik/certs/traefik.key
Normal file
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
OcJYMreefpqPopJhaO1krD+TWml5ciw=
|
||||
-----END PRIVATE KEY-----
|
||||
16
docker/traefik/dynamic_conf.yml
Normal file
16
docker/traefik/dynamic_conf.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
tls:
|
||||
stores:
|
||||
default:
|
||||
defaultCertificate:
|
||||
certFile: /etc/traefik/certs/traefik.crt
|
||||
keyFile: /etc/traefik/certs/traefik.key
|
||||
certificates:
|
||||
- certFile: /etc/traefik/certs/traefik.crt
|
||||
keyFile: /etc/traefik/certs/traefik.key
|
||||
|
||||
http:
|
||||
middlewares:
|
||||
redirect-to-https:
|
||||
redirectScheme:
|
||||
scheme: https
|
||||
permanent: true
|
||||
106
test/wrk/scripts/debug.lua
Normal file
106
test/wrk/scripts/debug.lua
Normal file
@@ -0,0 +1,106 @@
|
||||
-- Helper Functions:
|
||||
|
||||
-- Resource: http://lua-users.org/wiki/TypeOf
|
||||
function typeof(var)
|
||||
local _type = type(var);
|
||||
if(_type ~= "table" and _type ~= "userdata") then
|
||||
return _type;
|
||||
end
|
||||
local _meta = getmetatable(var);
|
||||
if(_meta ~= nil and _meta._NAME ~= nil) then
|
||||
return _meta._NAME;
|
||||
else
|
||||
return _type;
|
||||
end
|
||||
end
|
||||
|
||||
-- Resource: https://gist.github.com/lunixbochs/5b0bb27861a396ab7a86
|
||||
local function string(o)
|
||||
return '"' .. tostring(o) .. '"'
|
||||
end
|
||||
|
||||
local function recurse(o, indent)
|
||||
if indent == nil then indent = '' end
|
||||
local indent2 = indent .. ' '
|
||||
if type(o) == 'table' then
|
||||
local s = indent .. '{' .. '\n'
|
||||
local first = true
|
||||
for k,v in pairs(o) do
|
||||
if first == false then s = s .. ', \n' end
|
||||
if type(k) ~= 'number' then k = string(k) end
|
||||
s = s .. indent2 .. '[' .. k .. '] = ' .. recurse(v, indent2)
|
||||
first = false
|
||||
end
|
||||
return s .. '\n' .. indent .. '}'
|
||||
else
|
||||
return string(o)
|
||||
end
|
||||
end
|
||||
|
||||
local function var_dump(...)
|
||||
local args = {...}
|
||||
if #args > 1 then
|
||||
var_dump(args)
|
||||
else
|
||||
print(recurse(args[1]))
|
||||
end
|
||||
end
|
||||
|
||||
-- @end: Helper Functions
|
||||
|
||||
max_requests = 0
|
||||
counter = 1
|
||||
|
||||
function setup(thread)
|
||||
thread:set("id", counter)
|
||||
|
||||
counter = counter + 1
|
||||
end
|
||||
|
||||
init = function(args)
|
||||
io.write("[init]\n")
|
||||
|
||||
-- Check if arguments are set
|
||||
if not (next(args) == nil) then
|
||||
io.write("[init] Arguments\n")
|
||||
|
||||
-- Loop through passed arguments
|
||||
for index, value in ipairs(args) do
|
||||
io.write("[init] - " .. args[index] .. "\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
response = function (status, headers, body)
|
||||
io.write("------------------------------\n")
|
||||
io.write("Response ".. counter .." with status: ".. status .." on thread ".. id .."\n")
|
||||
io.write("------------------------------\n")
|
||||
|
||||
io.write("[response] Headers:\n")
|
||||
|
||||
-- Loop through passed arguments
|
||||
for key, value in pairs(headers) do
|
||||
io.write("[response] - " .. key .. ": " .. value .. "\n")
|
||||
end
|
||||
|
||||
io.write("[response] Body:\n")
|
||||
io.write(body .. "\n")
|
||||
|
||||
-- Stop after max_requests if max_requests is a positive number
|
||||
if (max_requests > 0) and (counter > max_requests) then
|
||||
wrk.thread:stop()
|
||||
end
|
||||
|
||||
counter = counter + 1
|
||||
end
|
||||
|
||||
done = function (summary, latency, requests)
|
||||
io.write("------------------------------\n")
|
||||
io.write("Requests\n")
|
||||
io.write("------------------------------\n")
|
||||
|
||||
io.write(typeof(requests))
|
||||
|
||||
var_dump(summary)
|
||||
var_dump(requests)
|
||||
end
|
||||
Reference in New Issue
Block a user