add k6 test whitelist switch, allow elb health check
This commit is contained in:
28
k6-tests/l2AndBatchL2Load.ts
Normal file
28
k6-tests/l2AndBatchL2Load.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import http from 'k6/http';
|
||||||
|
import { sleep } from 'k6';
|
||||||
|
|
||||||
|
export const options = {
|
||||||
|
vus: 555,
|
||||||
|
duration: '30s',
|
||||||
|
ext: {
|
||||||
|
loadimpact: {
|
||||||
|
projectID: 3648966,
|
||||||
|
name: 'L2 and BatchL2 tests'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const l2Url = 'https://mainnet-beta.api.drift.trade/dlob/l2?marketIndex=0&marketType=perp&depth=20&grouping=100&includeVamm=true&includePhoenix=false&includeSerum=false';
|
||||||
|
const batchL2Url = 'https://mainnet-beta.api.drift.trade/dlob/batchL2?marketType=perp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cspot%2Cspot%2Cspot&marketIndex=0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C0%2C1%2C2&depth=100%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5&includeVamm=true%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Cfalse%2Cfalse%2Cfalse&includePhoenix=false%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Ctrue%2Ctrue%2Ctrue&includeSerum=false%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Ctrue%2Ctrue%2Ctrue';
|
||||||
|
// const l2Url = 'http://localhost:6969/l2?marketIndex=0&marketType=perp&depth=20&grouping=100&includeVamm=true&includePhoenix=false&includeSerum=false';
|
||||||
|
// const batchL2Url = 'http://localhost:6969/batchL2?marketType=perp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cperp%2Cspot%2Cspot%2Cspot&marketIndex=0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C0%2C1%2C2&depth=100%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5%2C5&includeVamm=true%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Ctrue%2Cfalse%2Cfalse%2Cfalse&includePhoenix=false%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Ctrue%2Ctrue%2Ctrue&includeSerum=false%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2Ctrue%2Ctrue%2Ctrue';
|
||||||
|
|
||||||
|
export default function() {
|
||||||
|
for (let i = 0; i < 10; i += 1) {
|
||||||
|
http.get(l2Url);
|
||||||
|
if (i % 2 === 0) {
|
||||||
|
http.get(batchL2Url);
|
||||||
|
}
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,12 +26,14 @@
|
|||||||
"winston": "^3.8.1"
|
"winston": "^3.8.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/k6": "^0.45.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.28.0",
|
"@typescript-eslint/eslint-plugin": "^4.28.0",
|
||||||
"@typescript-eslint/parser": "^4.28.0",
|
"@typescript-eslint/parser": "^4.28.0",
|
||||||
"eslint": "^7.29.0",
|
"eslint": "^7.29.0",
|
||||||
"eslint-config-prettier": "^8.3.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
"eslint-plugin-prettier": "^3.4.0",
|
"eslint-plugin-prettier": "^3.4.0",
|
||||||
"husky": "^7.0.4",
|
"husky": "^7.0.4",
|
||||||
|
"k6": "^0.0.0",
|
||||||
"prettier": "^2.4.1",
|
"prettier": "^2.4.1",
|
||||||
"ts-node": "^10.9.1"
|
"ts-node": "^10.9.1"
|
||||||
},
|
},
|
||||||
|
|||||||
11
src/index.ts
11
src/index.ts
@@ -67,6 +67,8 @@ const rateLimitCallsPerSecond = process.env.RATE_LIMIT_CALLS_PER_SECOND
|
|||||||
? parseInt(process.env.RATE_LIMIT_CALLS_PER_SECOND)
|
? parseInt(process.env.RATE_LIMIT_CALLS_PER_SECOND)
|
||||||
: 10;
|
: 10;
|
||||||
|
|
||||||
|
const loadTestAllowed = process.env.LOAD_TEST_ALLOWED.toLowerCase() === 'true' ? true : false;
|
||||||
|
|
||||||
const logFormat =
|
const logFormat =
|
||||||
':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" :req[x-forwarded-for]';
|
':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" :req[x-forwarded-for]';
|
||||||
const logHttp = morgan(logFormat, {
|
const logHttp = morgan(logFormat, {
|
||||||
@@ -90,6 +92,13 @@ app.use(
|
|||||||
max: rateLimitCallsPerSecond,
|
max: rateLimitCallsPerSecond,
|
||||||
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
|
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
|
||||||
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
|
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
|
||||||
|
skip: (req, _res) => {
|
||||||
|
if (!loadTestAllowed) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return req.headers['user-agent'].includes('k6');
|
||||||
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -376,7 +385,7 @@ const main = async () => {
|
|||||||
|
|
||||||
const handleHealthCheck = async (req, res, next) => {
|
const handleHealthCheck = async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
if (req.url === '/health') {
|
if (req.url === '/health' || req.url === '/') {
|
||||||
if (opts.testLiveness) {
|
if (opts.testLiveness) {
|
||||||
if (Date.now() > startupTime + 60 * 1000) {
|
if (Date.now() > startupTime + 60 * 1000) {
|
||||||
healthStatus = HEALTH_STATUS.LivenessTesting;
|
healthStatus = HEALTH_STATUS.LivenessTesting;
|
||||||
|
|||||||
10
yarn.lock
10
yarn.lock
@@ -1186,6 +1186,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
||||||
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
||||||
|
|
||||||
|
"@types/k6@^0.45.0":
|
||||||
|
version "0.45.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/k6/-/k6-0.45.0.tgz#0d678cdbbb2d54fd057296835a11b36b3be6ab96"
|
||||||
|
integrity sha512-ySQ1LQ67kqYz/4W6oJ/9afPWHV/2GYKVUQFkOzM+fBtY2POCY8D7GX4F6rT0R8u2Be/DK8s1Ypr2s+LbToj/oA==
|
||||||
|
|
||||||
"@types/keygrip@*":
|
"@types/keygrip@*":
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
|
resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
|
||||||
@@ -2824,6 +2829,11 @@ jsonparse@^1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
|
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
|
||||||
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
|
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
|
||||||
|
|
||||||
|
k6@^0.0.0:
|
||||||
|
version "0.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/k6/-/k6-0.0.0.tgz#8c923200be0a68c578e8f5a32be96b1d8065cc3b"
|
||||||
|
integrity sha512-GAQSWayS2+LjbH5bkRi+pMPYyP1JSp7o+4j58ANZ762N/RH/SdlAT3CHHztnn8s/xgg8kYNM24Gd2IPo9b5W+g==
|
||||||
|
|
||||||
kuler@^2.0.0:
|
kuler@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
|
resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
|
||||||
|
|||||||
Reference in New Issue
Block a user