Skip to content

Commit

Permalink
refactor: add stake pool provider server to docker compose
Browse files Browse the repository at this point in the history
  • Loading branch information
iccicci authored and rhyslbw committed Jun 2, 2023
1 parent d33bd07 commit 2544ee0
Show file tree
Hide file tree
Showing 8 changed files with 149 additions and 116 deletions.
28 changes: 1 addition & 27 deletions Dockerfile
Expand Up @@ -64,15 +64,8 @@ RUN curl --proto '=https' --tlsv1.2 -sSf -L https://www.postgresql.org/media/key
apt-get update && apt-get install -y --no-install-recommends \
ca-certificates jq
ENV \
API_URL="http://0.0.0.0:3000" \
CARDANO_NODE_CONFIG_PATH=/config/cardano-node/config.json \
NETWORK=${NETWORK} \
POSTGRES_DB_FILE_DB_SYNC=/run/secrets/postgres_db_db_sync \
POSTGRES_HOST_DB_SYNC=postgres \
POSTGRES_PASSWORD_FILE_DB_SYNC=/run/secrets/postgres_password \
POSTGRES_PORT_DB_SYNC=5432 \
POSTGRES_USER_FILE_DB_SYNC=/run/secrets/postgres_user \
SERVICE_NAMES=asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo
NETWORK=${NETWORK}
WORKDIR /app/packages/cardano-services
COPY packages/cardano-services/config/network/${NETWORK} /config/
EXPOSE 3000
Expand All @@ -97,30 +90,11 @@ WORKDIR /app/packages/cardano-services
CMD ["node", "dist/cjs/cli.js", "start-blockfrost-worker"]

FROM cardano-services as pg-boss-worker
ENV \
API_URL="http://0.0.0.0:3003" \
POSTGRES_DB_FILE_DB_SYNC=/run/secrets/postgres_db_db_sync \
POSTGRES_HOST_DB_SYNC=postgres \
POSTGRES_PASSWORD_FILE_DB_SYNC=/run/secrets/postgres_password \
POSTGRES_PORT_DB_SYNC=5432 \
POSTGRES_USER_FILE_DB_SYNC=/run/secrets/postgres_user \
POSTGRES_DB_FILE_STAKE_POOL=/run/secrets/postgres_db_stake_pool \
POSTGRES_HOST_STAKE_POOL=postgres \
POSTGRES_PASSWORD_FILE_STAKE_POOL=/run/secrets/postgres_password \
POSTGRES_PORT_STAKE_POOL=5432 \
POSTGRES_USER_FILE_STAKE_POOL=/run/secrets/postgres_user
WORKDIR /app/packages/cardano-services
CMD ["node", "dist/cjs/cli.js", "start-pg-boss-worker"]

FROM cardano-services as projector
RUN apt-get update && apt-get install -y --no-install-recommends jq postgresql-client
ENV \
API_URL="http://0.0.0.0:3002" \
POSTGRES_DB_FILE_STAKE_POOL=/run/secrets/postgres_db_stake_pool \
POSTGRES_HOST_STAKE_POOL=postgres \
POSTGRES_PASSWORD_FILE_STAKE_POOL=/run/secrets/postgres_password \
POSTGRES_PORT_STAKE_POOL=5432 \
POSTGRES_USER_FILE_STAKE_POOL=/run/secrets/postgres_user
WORKDIR /
COPY compose/projector/init.* ./
RUN chmod 755 init.sh
Expand Down
200 changes: 124 additions & 76 deletions compose/common.yml
@@ -1,26 +1,92 @@
version: '3.9'

x-from-sdk: &from-sdk
healthcheck:
interval: 10s
timeout: 5s
retries: 10
restart: on-failure

x-logging: &logging
logging:
driver: 'json-file'
options:
max-size: '400k'
max-file: '20'

x-provider-server: &provider-server
build:
args:
- NETWORK=${NETWORK:-mainnet}
context: ../../
target: provider-server
depends_on:
cardano-db-sync:
condition: service_healthy
environment:
API_URL: http://0.0.0.0:3000
DB_CACHE_TTL: ${DB_CACHE_TTL:-120}
DISABLE_DB_CACHE: ${DISABLE_DB_CACHE:-false}
DISABLE_STAKE_POOL_METRIC_APY: ${DISABLE_STAKE_POOL_METRIC_APY:-false}
ENABLE_METRICS: ${ENABLE_METRICS:-false}
EPOCH_POLL_INTERVAL: ${EPOCH_POLL_INTERVAL:-500}
SERVICE_NAMES: ${SERVICE_NAMES:-asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo}
USE_BLOCKFROST: ${USE_BLOCKFROST:-false}
USE_QUEUE: ${USE_QUEUE:-false}

x-with-postgres: &with-postgres
depends_on:
postgres:
condition: service_healthy
secrets:
- postgres_password
- postgres_user
- postgres_db
- postgres_db_db_sync
- postgres_db_stake_pool

x-provider-server-environment: &provider-server-environment
API_URL: http://0.0.0.0:3000
DB_CACHE_TTL: ${DB_CACHE_TTL:-120}
DISABLE_DB_CACHE: ${DISABLE_DB_CACHE:-false}
DISABLE_STAKE_POOL_METRIC_APY: ${DISABLE_STAKE_POOL_METRIC_APY:-false}
ENABLE_METRICS: ${ENABLE_METRICS:-false}
EPOCH_POLL_INTERVAL: ${EPOCH_POLL_INTERVAL:-500}
SERVICE_NAMES: ${SERVICE_NAMES:-asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo}
USE_BLOCKFROST: ${USE_BLOCKFROST:-false}
USE_QUEUE: ${USE_QUEUE:-false}

x-sdk-environment: &sdk-environment
LOGGER_MIN_SEVERITY: ${LOGGER_MIN_SEVERITY:-info}
OGMIOS_URL: ws://cardano-node-ogmios:1337
POSTGRES_DB_FILE_DB_SYNC: /run/secrets/postgres_db_db_sync
POSTGRES_DB_FILE_STAKE_POOL: /run/secrets/postgres_db_stake_pool
POSTGRES_HOST_DB_SYNC: postgres
POSTGRES_HOST_STAKE_POOL: postgres
POSTGRES_POOL_MAX_DB_SYNC: ${POSTGRES_POOL_MAX:-10}
POSTGRES_POOL_MAX_STAKE_POOL: ${POSTGRES_POOL_MAX:-10}
POSTGRES_PASSWORD_FILE_DB_SYNC: /run/secrets/postgres_password
POSTGRES_PASSWORD_FILE_STAKE_POOL: /run/secrets/postgres_password
POSTGRES_PORT_DB_SYNC: 5432
POSTGRES_PORT_STAKE_POOL: 5432
POSTGRES_USER_FILE_DB_SYNC: /run/secrets/postgres_user
POSTGRES_USER_FILE_STAKE_POOL: /run/secrets/postgres_user
RABBITMQ_URL: amqp://rabbitmq:5672

services:
cardano-db-sync:
<<: *logging
<<:
- *logging
- *with-postgres
command: ['--config', '/config/cardano-db-sync/config.json', '--socket-path', '/node-ipc/node.socket']
environment:
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- RESTORE_SNAPSHOT=${RESTORE_SNAPSHOT:-}
- RESTORE_RECREATE_DB=N
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
RESTORE_SNAPSHOT: ${RESTORE_SNAPSHOT:-}
RESTORE_RECREATE_DB: N
depends_on:
cardano-node-ogmios:
condition: service_healthy
postgres:
condition: service_healthy
healthcheck:
test: ['CMD', '/scripts/is-db-synced.sh']
interval: 5s
Expand All @@ -29,10 +95,6 @@ services:
start_period: 100ms
image: inputoutput/cardano-db-sync:${CARDANO_DB_SYNC_VERSION:-13.1.0.0}
restart: on-failure
secrets:
- postgres_password
- postgres_user
- postgres_db
stop_signal: SIGINT
volumes:
- db-sync-data:/var/lib/cexplorer
Expand All @@ -51,39 +113,34 @@ services:
- node-ipc:/ipc

pg-boss-worker:
<<: *logging
<<:
- *from-sdk
- *logging
- *with-postgres
build:
context: ../../
target: pg-boss-worker
depends_on:
projector:
condition: service_healthy
environment:
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
- QUEUES=${QUEUES:-pool-metadata,pool-metrics}
- STAKE_POOL_PROVIDER_URL=http://provider-server:3000/stake-pool
<<: *sdk-environment
API_URL: http://0.0.0.0:3003
QUEUES: ${QUEUES:-pool-metadata,pool-metrics}
STAKE_POOL_PROVIDER_URL: http://provider-server:3000/stake-pool
healthcheck:
test: ['CMD-SHELL', 'curl -s --fail http://localhost:3003/health']
interval: 10s
timeout: 5s
retries: 10
ports:
- ${PG_BOSS_PORT:-4003}:3003
restart: on-failure
secrets:
- postgres_db_db_sync
- postgres_db_stake_pool
- postgres_password
- postgres_user

postgres:
<<: *logging
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all
environment:
- POSTGRES_LOGGING=true
- POSTGRES_DB_FILE=/run/secrets/postgres_db_db_sync
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
- POSTGRES_USER_FILE=/run/secrets/postgres_user
POSTGRES_LOGGING: true
POSTGRES_DB_FILE: /run/secrets/postgres_db_db_sync
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
POSTGRES_USER_FILE: /run/secrets/postgres_user
image: postgres:${POSTGRES_VERSION:-11.5-alpine}
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
Expand All @@ -100,65 +157,55 @@ services:
shm_size: '2gb'

projector:
<<: *logging
<<:
- *from-sdk
- *logging
- *with-postgres
build:
context: ../../
target: projector
depends_on:
postgres:
condition: service_healthy
cardano-node-ogmios:
condition: service_healthy
environment:
- DROP_SCHEMA=${DROP_PROJECTOR_SCHEMA:-false}
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
- OGMIOS_URL=ws://cardano-node-ogmios:1337
- PROJECTION_NAMES=${PROJECTION_NAMES:-stake-pool,stake-pool-metadata-job,stake-pool-metrics-job,utxo}
- SYNCHRONIZE=${SYNCHRONIZE:-true}
<<: *sdk-environment
API_URL: http://0.0.0.0:3002
DROP_SCHEMA: ${DROP_PROJECTOR_SCHEMA:-false}
PROJECTION_NAMES: ${PROJECTION_NAMES:-stake-pool,stake-pool-metadata-job,stake-pool-metrics-job,utxo}
SYNCHRONIZE: ${SYNCHRONIZE:-true}
healthcheck:
test:
['CMD-SHELL', 'test `curl -fs http://localhost:3002/health | jq -r ".services[0].projectedTip.blockNo"` -gt 1']
interval: 10s
timeout: 5s
retries: 10
ports:
- ${PROJECTOR_PORT:-4002}:3002
restart: on-failure
secrets:
- postgres_db_stake_pool
- postgres_password
- postgres_user

provider-server:
<<: *logging
build:
args:
- NETWORK=${NETWORK:-mainnet}
context: ../../
target: provider-server
depends_on:
cardano-db-sync:
condition: service_healthy
<<:
- *from-sdk
- *logging
- *provider-server
- *with-postgres
environment:
- DB_CACHE_TTL=${DB_CACHE_TTL:-120}
- DISABLE_DB_CACHE=${DISABLE_DB_CACHE:-false}
- DISABLE_STAKE_POOL_METRIC_APY=${DISABLE_STAKE_POOL_METRIC_APY:-false}
- ENABLE_METRICS=${ENABLE_METRICS:-false}
- EPOCH_POLL_INTERVAL=${EPOCH_POLL_INTERVAL:-500}
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
- OGMIOS_URL=ws://cardano-node-ogmios:1337
- POSTGRES_POOL_MAX_DB_SYNC=${POSTGRES_POOL_MAX:-10}
- RABBITMQ_URL=amqp://rabbitmq:5672
- SERVICE_NAMES=${SERVICE_NAMES:-asset,chain-history,network-info,rewards,stake-pool,tx-submit,utxo}
- USE_BLOCKFROST=${USE_BLOCKFROST:-false}
- USE_QUEUE=${USE_QUEUE:-false}
<<:
- *sdk-environment
- *provider-server-environment
ports:
- ${API_PORT:-4000}:3000
restart: on-failure
secrets:
- postgres_db_db_sync
- postgres_password
- postgres_user

stake-pool-provider-server:
<<:
- *from-sdk
- *logging
- *provider-server
- *with-postgres
environment:
<<:
- *sdk-environment
- *provider-server-environment
SERVICE_NAMES: stake-pool
USE_TYPEORM_STAKE_POOL_PROVIDER: true
ports:
- ${STAKE_POOL_API_PORT:-4010}:3000

rabbitmq:
<<: *logging
Expand All @@ -176,6 +223,9 @@ services:
- rabbitmq-db:/var/lib/rabbitmq/mnesia

worker:
<<:
- *from-sdk
- *logging
build:
context: ../../
target: worker
Expand All @@ -185,12 +235,10 @@ services:
rabbitmq:
condition: service_healthy
environment:
- LOGGER_MIN_SEVERITY=${LOGGER_MIN_SEVERITY:-info}
- OGMIOS_URL=ws://cardano-node-ogmios:1337
- PARALLEL=${PARALLEL:-false}
- PARALLEL_TX=${PARALLEL_TX:-3}
- POLLING_CYCLE=${POLLING_CYCLE:-500}
- RABBITMQ_URL=amqp://rabbitmq:5672
<<: *sdk-environment
PARALLEL: ${PARALLEL:-false}
PARALLEL_TX: ${PARALLEL_TX:-3}
POLLING_CYCLE: ${POLLING_CYCLE:-500}
restart: on-failure

secrets:
Expand Down
4 changes: 4 additions & 0 deletions compose/dev.yml
Expand Up @@ -13,6 +13,10 @@ services:
volumes:
- ../..:/app

stake-pool-provider-server:
volumes:
- ../..:/app

worker:
volumes:
- ../..:/app
12 changes: 7 additions & 5 deletions packages/cardano-services/src/Program/programs/providerServer.ts
Expand Up @@ -19,7 +19,7 @@ import { Logger } from 'ts-log';
import { MissingProgramOption, MissingServiceDependency, RunnableDependencies, UnknownServiceName } from '../errors';
import { OgmiosCardanoNode } from '@cardano-sdk/ogmios';
import { Pool } from 'pg';
import { PosgresProgramOptions, PostgresOptionDescriptions } from '../options/postgres';
import { PostgresOptionDescriptions } from '../options/postgres';
import { ProviderServerArgs, ProviderServerOptionDescriptions, ServiceNames } from './types';
import { SrvRecord } from 'dns';
import { TxSubmitHttpService } from '../../TxSubmit';
Expand Down Expand Up @@ -56,6 +56,8 @@ interface ServiceMapFactoryOptions {
node?: OgmiosCardanoNode;
}

const serverName = 'provider-server';

const serviceMapFactory = (options: ServiceMapFactoryOptions) => {
const { args, pools, dnsResolver, genesisData, logger, node } = options;
const withDbSyncProvider =
Expand Down Expand Up @@ -109,13 +111,13 @@ const serviceMapFactory = (options: ServiceMapFactoryOptions) => {
const getTypeormStakePoolProvider = () => {
const entities = getEntities([
'block',
'currentPoolMetrics',
'poolMetadata',
'poolRegistration',
'poolRetirement',
'stakePool',
'currentPoolMetrics'
'stakePool'
]);
const connectionConfig$ = getConnectionConfig(dnsResolver, 'projector', args as PosgresProgramOptions<'StakePool'>);
const connectionConfig$ = getConnectionConfig(dnsResolver, serverName, args);
return new TypeormStakePoolProvider(
{ paginationPageSizeLimit: args.paginationPageSizeLimit! },
{ connectionConfig$, entities, logger }
Expand Down Expand Up @@ -238,7 +240,7 @@ export const loadProviderServer = async (
deps?.logger ||
createLogger({
level: args.loggerMinSeverity,
name: 'provider-server'
name: serverName
});
const dnsResolver =
deps?.dnsResolver ||
Expand Down
1 change: 1 addition & 0 deletions packages/cardano-services/src/Program/programs/types.ts
Expand Up @@ -53,6 +53,7 @@ export enum ProviderServerOptionDescriptions {

export type ProviderServerArgs = CommonProgramOptions &
PosgresProgramOptions<'DbSync'> &
PosgresProgramOptions<'StakePool'> &
OgmiosProgramOptions &
RabbitMqProgramOptions & {
allowedOrigins?: string[];
Expand Down

0 comments on commit 2544ee0

Please sign in to comment.