From 30efaf3e9ee0a721ade70c246a17dfbc6b0052bd Mon Sep 17 00:00:00 2001 From: 0xKurt Date: Wed, 11 Sep 2024 13:19:25 +0200 Subject: [PATCH 1/2] Add port 8081 for indexer --- README.md | 1 + fly.toml | 29 ++++++++++++++++-- src/config.ts | 85 +++++++++++++++++++++++++++++---------------------- 3 files changed, 76 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 8e8f7ad3..c86c817c 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ npm run dev -- --from-block=12345 # start indexing from the 12345th block npm run dev -- --run-once # index and exit without watching for events npm run dev -- --no-cache # disable cache npm run dev -- --log-level=trace # set log level +npm run dev -- --port=8081 # start web service on a given port ``` ## Running in production diff --git a/fly.toml b/fly.toml index 9da069b7..d00eeab0 100644 --- a/fly.toml +++ b/fly.toml @@ -24,7 +24,7 @@ kill_timeout = '5s' PASSPORT_SCORER_ID=335 [processes] - indexer = 'npm start -- --indexer --http' + indexer = 'npm start -- --indexer --http --port=8081' web = 'npm start -- --http --http-wait-for-sync=false' [[mounts]] @@ -36,7 +36,30 @@ kill_timeout = '5s' auto_extend_size_limit = "100GB" processes = ['indexer', 'web'] -[http_service] +[http_service.indexer] + internal_port = 8081 + force_https = true + auto_stop_machines = true + auto_start_machines = true + min_machines_running = 1 + processes = ['indexer'] + + [http_service.indexer.concurrency] + type = 'requests' + hard_limit = 250 + soft_limit = 200 + +[checks.indexer_http] + port = 8081 + type = 'http' + interval = '15s' + timeout = '10s' + grace_period = '30s' + method = 'get' + path = '/api/v1/status' + processes = ['indexer'] + +[http_service.web] internal_port = 8080 force_https = true auto_stop_machines = true @@ -44,7 +67,7 @@ kill_timeout = '5s' min_machines_running = 2 processes = ['web'] - [http_service.concurrency] + [http_service.web.concurrency] type = 'requests' hard_limit = 250 soft_limit = 200 diff --git a/src/config.ts b/src/config.ts index 8822b1a4..c5fc26ff 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1839,6 +1839,44 @@ export type Config = { }; export function getConfig(): Config { + const { values: args } = parseArgs({ + options: { + "to-block": { + type: "string", + }, + "from-block": { + type: "string", + }, + "drop-db": { + type: "boolean", + }, + "rm-cache": { + type: "boolean", + }, + "log-level": { + type: "string", + }, + "run-once": { + type: "boolean", + }, + "no-cache": { + type: "boolean", + }, + "http-wait-for-sync": { + type: "string", + }, + http: { + type: "boolean", + }, + indexer: { + type: "boolean", + }, + port: { + type: "string", + }, + }, + }); + const buildTag = z .union([z.string(), z.null()]) .default(null) @@ -1849,7 +1887,17 @@ export function getConfig(): Config { .transform((value) => value === "true") .parse(process.env.ENABLE_RESOURCE_MONITOR); - const apiHttpPort = z.coerce.number().parse(process.env.PORT); + const portSchema = z.number().int().nonnegative().max(65535); + + const portOverride = z + .union([portSchema, z.undefined()]) + .optional() + .parse(args["port"]); + + const apiHttpPort = + portOverride !== undefined + ? portOverride + : portSchema.parse(z.coerce.number().parse(process.env.PORT)); const pinoPretty = z .enum(["true", "false"]) @@ -1890,41 +1938,6 @@ export function getConfig(): Config { .default(path.join(storageDir, "cache")) .parse(process.env.CACHE_DIR); - const { values: args } = parseArgs({ - options: { - "to-block": { - type: "string", - }, - "from-block": { - type: "string", - }, - "drop-db": { - type: "boolean", - }, - "rm-cache": { - type: "boolean", - }, - "log-level": { - type: "string", - }, - "run-once": { - type: "boolean", - }, - "no-cache": { - type: "boolean", - }, - "http-wait-for-sync": { - type: "string", - }, - http: { - type: "boolean", - }, - indexer: { - type: "boolean", - }, - }, - }); - const chains = z .string() .or(z.literal("all")) From 7ab14aaa10305fdd74a2038630c74957683638fe Mon Sep 17 00:00:00 2001 From: Hussein Martinez Date: Wed, 11 Sep 2024 19:11:29 +0700 Subject: [PATCH 2/2] chore: added indexer web service --- fly.toml | 147 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 86 insertions(+), 61 deletions(-) diff --git a/fly.toml b/fly.toml index d00eeab0..5c5a5cd6 100644 --- a/fly.toml +++ b/fly.toml @@ -1,7 +1,7 @@ -app = 'indexer-v2' -primary_region = 'den' -kill_signal = 'SIGINT' -kill_timeout = '5s' +app = "indexer-v2" +primary_region = "den" +kill_signal = "SIGINT" +kill_timeout = "5s" [experimental] auto_rollback = true @@ -9,81 +9,106 @@ kill_timeout = '5s' [build] [deploy] - wait_timeout = '6h0m0s' + wait_timeout = "6h0m0s" [env] - PINO_PRETTY = 'true' - DEPLOYMENT_ENVIRONMENT = 'production' - ENABLE_RESOURCE_MONITOR = 'false' - ESTIMATES_LINEARQF_WORKER_POOL_SIZE = '10' - INDEXED_CHAINS = 'mainnet,optimism,fantom,pgn-testnet,pgn-mainnet,arbitrum,polygon,sepolia,avalanche,avalanche-fuji,scroll,scroll-sepolia,base,zksync-era-mainnet,lukso-mainnet,lukso-testnet,celo-mainnet,celo-testnet,sei-mainnet,metisAndromeda' - LOG_LEVEL = 'debug' - NODE_OPTIONS = '--max-old-space-size=4096' - PORT = '8080' - STORAGE_DIR = '/mnt/indexer' - PASSPORT_SCORER_ID=335 + PINO_PRETTY = "true" + DEPLOYMENT_ENVIRONMENT = "production" + ENABLE_RESOURCE_MONITOR = "false" + ESTIMATES_LINEARQF_WORKER_POOL_SIZE = "10" + INDEXED_CHAINS = "mainnet,optimism,fantom,pgn-testnet,pgn-mainnet,arbitrum,polygon,sepolia,avalanche,avalanche-fuji,scroll,scroll-sepolia,base,zksync-era-mainnet,lukso-mainnet,lukso-testnet,celo-mainnet,celo-testnet,sei-mainnet,metisAndromeda" + LOG_LEVEL = "debug" + NODE_OPTIONS = "--max-old-space-size=4096" + PORT = "8080" + STORAGE_DIR = "/mnt/indexer" + PASSPORT_SCORER_ID = 335 [processes] - indexer = 'npm start -- --indexer --http --port=8081' - web = 'npm start -- --http --http-wait-for-sync=false' + indexer = "npm start -- --indexer --http --port=8081" + web = "npm start -- --http --http-wait-for-sync=false" [[mounts]] - source = 'indexer_staging' - destination = '/mnt/indexer' - initial_size = '50GB' + source = "indexer_staging" + destination = "/mnt/indexer" + initial_size = "50GB" auto_extend_size_threshold = 80 auto_extend_size_increment = "5GB" auto_extend_size_limit = "100GB" - processes = ['indexer', 'web'] + processes = ["indexer", "web"] -[http_service.indexer] +[[services]] internal_port = 8081 - force_https = true - auto_stop_machines = true - auto_start_machines = true - min_machines_running = 1 - processes = ['indexer'] - - [http_service.indexer.concurrency] - type = 'requests' + processes = ["indexer"] + protocol = "tcp" + script_checks = [] + + [services.concurrency] hard_limit = 250 soft_limit = 200 + type = "requests" -[checks.indexer_http] - port = 8081 - type = 'http' - interval = '15s' - timeout = '10s' - grace_period = '30s' - method = 'get' - path = '/api/v1/status' - processes = ['indexer'] - -[http_service.web] + [[services.ports]] + force_https = true + handlers = ["http"] + port = 80 + + [[services.ports]] + handlers = ["tls", "http"] + port = 443 + + [[services.tcp_checks]] + grace_period = "30s" + interval = "15s" + restart_limit = 0 + timeout = "10s" + +[[services]] internal_port = 8080 - force_https = true - auto_stop_machines = true - auto_start_machines = true - min_machines_running = 2 - processes = ['web'] - - [http_service.web.concurrency] - type = 'requests' + processes = ["web"] + protocol = "tcp" + script_checks = [] + + [services.concurrency] hard_limit = 250 soft_limit = 200 + type = "requests" + + [[services.ports]] + force_https = true + handlers = ["http"] + port = 80 + + [[services.ports]] + handlers = ["tls", "http"] + port = 443 + + [[services.tcp_checks]] + grace_period = "30s" + interval = "15s" + restart_limit = 0 + timeout = "10s" + +[checks.indexer_http] + port = 8081 + type = "http" + interval = "15s" + timeout = "10s" + grace_period = "30s" + method = "get" + path = "/api/v1/status" + processes = ["indexer"] -[checks] - [checks.http] - port = 8080 - type = 'http' - interval = '15s' - timeout = '10s' - grace_period = '30s' - method = 'get' - path = '/api/v1/status' - processes = ['web', 'indexer'] +[checks.http] + port = 8080 + type = "http" + interval = "15s" + timeout = "10s" + grace_period = "30s" + method = "get" + path = "/api/v1/status" + processes = ["web"] [[vm]] - memory = '4gb' - cpu_kind = 'performance' + memory = "4gb" + cpu_kind = "performance" cpus = 2