Skip to content

Commit 2544ee0

Browse files
icciccirhyslbw
authored andcommitted
refactor: add stake pool provider server to docker compose
1 parent d33bd07 commit 2544ee0

File tree

8 files changed

+149
-116
lines changed

8 files changed

+149
-116
lines changed

Dockerfile

+1-27
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,8 @@ RUN curl --proto '=https' --tlsv1.2 -sSf -L https://www.postgresql.org/media/key
6464
apt-get update && apt-get install -y --no-install-recommends \
6565
ca-certificates jq
6666
ENV \
67-
API_URL="http://0.0.0.0:3000" \
6867
CARDANO_NODE_CONFIG_PATH=/config/cardano-node/config.json \
69-
NETWORK=${NETWORK} \
70-
POSTGRES_DB_FILE_DB_SYNC=/run/secrets/postgres_db_db_sync \
71-
POSTGRES_HOST_DB_SYNC=postgres \
72-
POSTGRES_PASSWORD_FILE_DB_SYNC=/run/secrets/postgres_password \
73-
POSTGRES_PORT_DB_SYNC=5432 \
74-
POSTGRES_USER_FILE_DB_SYNC=/run/secrets/postgres_user \
75-
SERVICE_NAMES=asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo
68+
NETWORK=${NETWORK}
7669
WORKDIR /app/packages/cardano-services
7770
COPY packages/cardano-services/config/network/${NETWORK} /config/
7871
EXPOSE 3000
@@ -97,30 +90,11 @@ WORKDIR /app/packages/cardano-services
9790
CMD ["node", "dist/cjs/cli.js", "start-blockfrost-worker"]
9891

9992
FROM cardano-services as pg-boss-worker
100-
ENV \
101-
API_URL="http://0.0.0.0:3003" \
102-
POSTGRES_DB_FILE_DB_SYNC=/run/secrets/postgres_db_db_sync \
103-
POSTGRES_HOST_DB_SYNC=postgres \
104-
POSTGRES_PASSWORD_FILE_DB_SYNC=/run/secrets/postgres_password \
105-
POSTGRES_PORT_DB_SYNC=5432 \
106-
POSTGRES_USER_FILE_DB_SYNC=/run/secrets/postgres_user \
107-
POSTGRES_DB_FILE_STAKE_POOL=/run/secrets/postgres_db_stake_pool \
108-
POSTGRES_HOST_STAKE_POOL=postgres \
109-
POSTGRES_PASSWORD_FILE_STAKE_POOL=/run/secrets/postgres_password \
110-
POSTGRES_PORT_STAKE_POOL=5432 \
111-
POSTGRES_USER_FILE_STAKE_POOL=/run/secrets/postgres_user
11293
WORKDIR /app/packages/cardano-services
11394
CMD ["node", "dist/cjs/cli.js", "start-pg-boss-worker"]
11495

11596
FROM cardano-services as projector
11697
RUN apt-get update && apt-get install -y --no-install-recommends jq postgresql-client
117-
ENV \
118-
API_URL="http://0.0.0.0:3002" \
119-
POSTGRES_DB_FILE_STAKE_POOL=/run/secrets/postgres_db_stake_pool \
120-
POSTGRES_HOST_STAKE_POOL=postgres \
121-
POSTGRES_PASSWORD_FILE_STAKE_POOL=/run/secrets/postgres_password \
122-
POSTGRES_PORT_STAKE_POOL=5432 \
123-
POSTGRES_USER_FILE_STAKE_POOL=/run/secrets/postgres_user
12498
WORKDIR /
12599
COPY compose/projector/init.* ./
126100
RUN chmod 755 init.sh

compose/common.yml

+124-76
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,92 @@
11
version: '3.9'
22

3+
x-from-sdk: &from-sdk
4+
healthcheck:
5+
interval: 10s
6+
timeout: 5s
7+
retries: 10
8+
restart: on-failure
9+
310
x-logging: &logging
411
logging:
512
driver: 'json-file'
613
options:
714
max-size: '400k'
815
max-file: '20'
916

17+
x-provider-server: &provider-server
18+
build:
19+
args:
20+
- NETWORK=${NETWORK:-mainnet}
21+
context: ../../
22+
target: provider-server
23+
depends_on:
24+
cardano-db-sync:
25+
condition: service_healthy
26+
environment:
27+
API_URL: http://0.0.0.0:3000
28+
DB_CACHE_TTL: ${DB_CACHE_TTL:-120}
29+
DISABLE_DB_CACHE: ${DISABLE_DB_CACHE:-false}
30+
DISABLE_STAKE_POOL_METRIC_APY: ${DISABLE_STAKE_POOL_METRIC_APY:-false}
31+
ENABLE_METRICS: ${ENABLE_METRICS:-false}
32+
EPOCH_POLL_INTERVAL: ${EPOCH_POLL_INTERVAL:-500}
33+
SERVICE_NAMES: ${SERVICE_NAMES:-asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo}
34+
USE_BLOCKFROST: ${USE_BLOCKFROST:-false}
35+
USE_QUEUE: ${USE_QUEUE:-false}
36+
37+
x-with-postgres: &with-postgres
38+
depends_on:
39+
postgres:
40+
condition: service_healthy
41+
secrets:
42+
- postgres_password
43+
- postgres_user
44+
- postgres_db
45+
- postgres_db_db_sync
46+
- postgres_db_stake_pool
47+
48+
x-provider-server-environment: &provider-server-environment
49+
API_URL: http://0.0.0.0:3000
50+
DB_CACHE_TTL: ${DB_CACHE_TTL:-120}
51+
DISABLE_DB_CACHE: ${DISABLE_DB_CACHE:-false}
52+
DISABLE_STAKE_POOL_METRIC_APY: ${DISABLE_STAKE_POOL_METRIC_APY:-false}
53+
ENABLE_METRICS: ${ENABLE_METRICS:-false}
54+
EPOCH_POLL_INTERVAL: ${EPOCH_POLL_INTERVAL:-500}
55+
SERVICE_NAMES: ${SERVICE_NAMES:-asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo}
56+
USE_BLOCKFROST: ${USE_BLOCKFROST:-false}
57+
USE_QUEUE: ${USE_QUEUE:-false}
58+
59+
x-sdk-environment: &sdk-environment
60+
LOGGER_MIN_SEVERITY: ${LOGGER_MIN_SEVERITY:-info}
61+
OGMIOS_URL: ws://cardano-node-ogmios:1337
62+
POSTGRES_DB_FILE_DB_SYNC: /run/secrets/postgres_db_db_sync
63+
POSTGRES_DB_FILE_STAKE_POOL: /run/secrets/postgres_db_stake_pool
64+
POSTGRES_HOST_DB_SYNC: postgres
65+
POSTGRES_HOST_STAKE_POOL: postgres
66+
POSTGRES_POOL_MAX_DB_SYNC: ${POSTGRES_POOL_MAX:-10}
67+
POSTGRES_POOL_MAX_STAKE_POOL: ${POSTGRES_POOL_MAX:-10}
68+
POSTGRES_PASSWORD_FILE_DB_SYNC: /run/secrets/postgres_password
69+
POSTGRES_PASSWORD_FILE_STAKE_POOL: /run/secrets/postgres_password
70+
POSTGRES_PORT_DB_SYNC: 5432
71+
POSTGRES_PORT_STAKE_POOL: 5432
72+
POSTGRES_USER_FILE_DB_SYNC: /run/secrets/postgres_user
73+
POSTGRES_USER_FILE_STAKE_POOL: /run/secrets/postgres_user
74+
RABBITMQ_URL: amqp://rabbitmq:5672
75+
1076
services:
1177
cardano-db-sync:
12-
<<: *logging
78+
<<:
79+
- *logging
80+
- *with-postgres
1381
command: ['--config', '/config/cardano-db-sync/config.json', '--socket-path', '/node-ipc/node.socket']
1482
environment:
15-
- POSTGRES_HOST=postgres
16-
- POSTGRES_PORT=5432
17-
- RESTORE_SNAPSHOT=${RESTORE_SNAPSHOT:-}
18-
- RESTORE_RECREATE_DB=N
83+
POSTGRES_HOST: postgres
84+
POSTGRES_PORT: 5432
85+
RESTORE_SNAPSHOT: ${RESTORE_SNAPSHOT:-}
86+
RESTORE_RECREATE_DB: N
1987
depends_on:
2088
cardano-node-ogmios:
2189
condition: service_healthy
22-
postgres:
23-
condition: service_healthy
2490
healthcheck:
2591
test: ['CMD', '/scripts/is-db-synced.sh']
2692
interval: 5s
@@ -29,10 +95,6 @@ services:
2995
start_period: 100ms
3096
image: inputoutput/cardano-db-sync:${CARDANO_DB_SYNC_VERSION:-13.1.0.0}
3197
restart: on-failure
32-
secrets:
33-
- postgres_password
34-
- postgres_user
35-
- postgres_db
3698
stop_signal: SIGINT
3799
volumes:
38100
- db-sync-data:/var/lib/cexplorer
@@ -51,39 +113,34 @@ services:
51113
- node-ipc:/ipc
52114

53115
pg-boss-worker:
54-
<<: *logging
116+
<<:
117+
- *from-sdk
118+
- *logging
119+
- *with-postgres
55120
build:
56121
context: ../../
57122
target: pg-boss-worker
58123
depends_on:
59124
projector:
60125
condition: service_healthy
61126
environment:
62-
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
63-
- QUEUES=${QUEUES:-pool-metadata,pool-metrics}
64-
- STAKE_POOL_PROVIDER_URL=http://provider-server:3000/stake-pool
127+
<<: *sdk-environment
128+
API_URL: http://0.0.0.0:3003
129+
QUEUES: ${QUEUES:-pool-metadata,pool-metrics}
130+
STAKE_POOL_PROVIDER_URL: http://provider-server:3000/stake-pool
65131
healthcheck:
66132
test: ['CMD-SHELL', 'curl -s --fail http://localhost:3003/health']
67-
interval: 10s
68-
timeout: 5s
69-
retries: 10
70133
ports:
71134
- ${PG_BOSS_PORT:-4003}:3003
72-
restart: on-failure
73-
secrets:
74-
- postgres_db_db_sync
75-
- postgres_db_stake_pool
76-
- postgres_password
77-
- postgres_user
78135

79136
postgres:
80137
<<: *logging
81138
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all
82139
environment:
83-
- POSTGRES_LOGGING=true
84-
- POSTGRES_DB_FILE=/run/secrets/postgres_db_db_sync
85-
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
86-
- POSTGRES_USER_FILE=/run/secrets/postgres_user
140+
POSTGRES_LOGGING: true
141+
POSTGRES_DB_FILE: /run/secrets/postgres_db_db_sync
142+
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
143+
POSTGRES_USER_FILE: /run/secrets/postgres_user
87144
image: postgres:${POSTGRES_VERSION:-11.5-alpine}
88145
healthcheck:
89146
test: ['CMD-SHELL', 'pg_isready -U postgres']
@@ -100,65 +157,55 @@ services:
100157
shm_size: '2gb'
101158

102159
projector:
103-
<<: *logging
160+
<<:
161+
- *from-sdk
162+
- *logging
163+
- *with-postgres
104164
build:
105165
context: ../../
106166
target: projector
107167
depends_on:
108-
postgres:
109-
condition: service_healthy
110168
cardano-node-ogmios:
111169
condition: service_healthy
112170
environment:
113-
- DROP_SCHEMA=${DROP_PROJECTOR_SCHEMA:-false}
114-
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
115-
- OGMIOS_URL=ws://cardano-node-ogmios:1337
116-
- PROJECTION_NAMES=${PROJECTION_NAMES:-stake-pool,stake-pool-metadata-job,stake-pool-metrics-job,utxo}
117-
- SYNCHRONIZE=${SYNCHRONIZE:-true}
171+
<<: *sdk-environment
172+
API_URL: http://0.0.0.0:3002
173+
DROP_SCHEMA: ${DROP_PROJECTOR_SCHEMA:-false}
174+
PROJECTION_NAMES: ${PROJECTION_NAMES:-stake-pool,stake-pool-metadata-job,stake-pool-metrics-job,utxo}
175+
SYNCHRONIZE: ${SYNCHRONIZE:-true}
118176
healthcheck:
119177
test:
120178
['CMD-SHELL', 'test `curl -fs http://localhost:3002/health | jq -r ".services[0].projectedTip.blockNo"` -gt 1']
121-
interval: 10s
122-
timeout: 5s
123-
retries: 10
124179
ports:
125180
- ${PROJECTOR_PORT:-4002}:3002
126-
restart: on-failure
127-
secrets:
128-
- postgres_db_stake_pool
129-
- postgres_password
130-
- postgres_user
131181

132182
provider-server:
133-
<<: *logging
134-
build:
135-
args:
136-
- NETWORK=${NETWORK:-mainnet}
137-
context: ../../
138-
target: provider-server
139-
depends_on:
140-
cardano-db-sync:
141-
condition: service_healthy
183+
<<:
184+
- *from-sdk
185+
- *logging
186+
- *provider-server
187+
- *with-postgres
142188
environment:
143-
- DB_CACHE_TTL=${DB_CACHE_TTL:-120}
144-
- DISABLE_DB_CACHE=${DISABLE_DB_CACHE:-false}
145-
- DISABLE_STAKE_POOL_METRIC_APY=${DISABLE_STAKE_POOL_METRIC_APY:-false}
146-
- ENABLE_METRICS=${ENABLE_METRICS:-false}
147-
- EPOCH_POLL_INTERVAL=${EPOCH_POLL_INTERVAL:-500}
148-
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
149-
- OGMIOS_URL=ws://cardano-node-ogmios:1337
150-
- POSTGRES_POOL_MAX_DB_SYNC=${POSTGRES_POOL_MAX:-10}
151-
- RABBITMQ_URL=amqp://rabbitmq:5672
152-
- SERVICE_NAMES=${SERVICE_NAMES:-asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo}
153-
- USE_BLOCKFROST=${USE_BLOCKFROST:-false}
154-
- USE_QUEUE=${USE_QUEUE:-false}
189+
<<:
190+
- *sdk-environment
191+
- *provider-server-environment
155192
ports:
156193
- ${API_PORT:-4000}:3000
157-
restart: on-failure
158-
secrets:
159-
- postgres_db_db_sync
160-
- postgres_password
161-
- postgres_user
194+
195+
stake-pool-provider-server:
196+
<<:
197+
- *from-sdk
198+
- *logging
199+
- *provider-server
200+
- *with-postgres
201+
environment:
202+
<<:
203+
- *sdk-environment
204+
- *provider-server-environment
205+
SERVICE_NAMES: stake-pool
206+
USE_TYPEORM_STAKE_POOL_PROVIDER: true
207+
ports:
208+
- ${STAKE_POOL_API_PORT:-4010}:3000
162209

163210
rabbitmq:
164211
<<: *logging
@@ -176,6 +223,9 @@ services:
176223
- rabbitmq-db:/var/lib/rabbitmq/mnesia
177224

178225
worker:
226+
<<:
227+
- *from-sdk
228+
- *logging
179229
build:
180230
context: ../../
181231
target: worker
@@ -185,12 +235,10 @@ services:
185235
rabbitmq:
186236
condition: service_healthy
187237
environment:
188-
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
189-
- OGMIOS_URL=ws://cardano-node-ogmios:1337
190-
- PARALLEL=${PARALLEL:-false}
191-
- PARALLEL_TX=${PARALLEL_TX:-3}
192-
- POLLING_CYCLE=${POLLING_CYCLE:-500}
193-
- RABBITMQ_URL=amqp://rabbitmq:5672
238+
<<: *sdk-environment
239+
PARALLEL: ${PARALLEL:-false}
240+
PARALLEL_TX: ${PARALLEL_TX:-3}
241+
POLLING_CYCLE: ${POLLING_CYCLE:-500}
194242
restart: on-failure
195243

196244
secrets:

compose/dev.yml

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ services:
1313
volumes:
1414
- ../..:/app
1515

16+
stake-pool-provider-server:
17+
volumes:
18+
- ../..:/app
19+
1620
worker:
1721
volumes:
1822
- ../..:/app

packages/cardano-services/src/Program/programs/providerServer.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { Logger } from 'ts-log';
1919
import { MissingProgramOption, MissingServiceDependency, RunnableDependencies, UnknownServiceName } from '../errors';
2020
import { OgmiosCardanoNode } from '@cardano-sdk/ogmios';
2121
import { Pool } from 'pg';
22-
import { PosgresProgramOptions, PostgresOptionDescriptions } from '../options/postgres';
22+
import { PostgresOptionDescriptions } from '../options/postgres';
2323
import { ProviderServerArgs, ProviderServerOptionDescriptions, ServiceNames } from './types';
2424
import { SrvRecord } from 'dns';
2525
import { TxSubmitHttpService } from '../../TxSubmit';
@@ -56,6 +56,8 @@ interface ServiceMapFactoryOptions {
5656
node?: OgmiosCardanoNode;
5757
}
5858

59+
const serverName = 'provider-server';
60+
5961
const serviceMapFactory = (options: ServiceMapFactoryOptions) => {
6062
const { args, pools, dnsResolver, genesisData, logger, node } = options;
6163
const withDbSyncProvider =
@@ -109,13 +111,13 @@ const serviceMapFactory = (options: ServiceMapFactoryOptions) => {
109111
const getTypeormStakePoolProvider = () => {
110112
const entities = getEntities([
111113
'block',
114+
'currentPoolMetrics',
112115
'poolMetadata',
113116
'poolRegistration',
114117
'poolRetirement',
115-
'stakePool',
116-
'currentPoolMetrics'
118+
'stakePool'
117119
]);
118-
const connectionConfig$ = getConnectionConfig(dnsResolver, 'projector', args as PosgresProgramOptions<'StakePool'>);
120+
const connectionConfig$ = getConnectionConfig(dnsResolver, serverName, args);
119121
return new TypeormStakePoolProvider(
120122
{ paginationPageSizeLimit: args.paginationPageSizeLimit! },
121123
{ connectionConfig$, entities, logger }
@@ -238,7 +240,7 @@ export const loadProviderServer = async (
238240
deps?.logger ||
239241
createLogger({
240242
level: args.loggerMinSeverity,
241-
name: 'provider-server'
243+
name: serverName
242244
});
243245
const dnsResolver =
244246
deps?.dnsResolver ||

packages/cardano-services/src/Program/programs/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export enum ProviderServerOptionDescriptions {
5353

5454
export type ProviderServerArgs = CommonProgramOptions &
5555
PosgresProgramOptions<'DbSync'> &
56+
PosgresProgramOptions<'StakePool'> &
5657
OgmiosProgramOptions &
5758
RabbitMqProgramOptions & {
5859
allowedOrigins?: string[];

0 commit comments

Comments
 (0)