-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Part of https://www.notion.so/Generate-ajna-finance-subgraph-watcher-with-codegen-5b80ac149b3f449fb138f5d92cc5485e Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/781 Co-authored-by: Prathamesh Musale <[email protected]> Co-committed-by: Prathamesh Musale <[email protected]>
- Loading branch information
1 parent
aeddc82
commit cd50832
Showing
8 changed files
with
360 additions
and
0 deletions.
There are no files selected for viewing
76 changes: 76 additions & 0 deletions
76
stack_orchestrator/data/compose/docker-compose-watcher-ajna.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
version: '3.2' | ||
|
||
services: | ||
ajna-watcher-db: | ||
restart: unless-stopped | ||
image: postgres:14-alpine | ||
environment: | ||
- POSTGRES_USER=vdbm | ||
- POSTGRES_MULTIPLE_DATABASES=ajna-watcher,ajna-watcher-job-queue | ||
- POSTGRES_EXTENSION=ajna-watcher-job-queue:pgcrypto | ||
- POSTGRES_PASSWORD=password | ||
volumes: | ||
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh | ||
- ajna_watcher_db_data:/var/lib/postgresql/data | ||
ports: | ||
- "5432" | ||
healthcheck: | ||
test: ["CMD", "nc", "-v", "localhost", "5432"] | ||
interval: 20s | ||
timeout: 5s | ||
retries: 15 | ||
start_period: 10s | ||
|
||
ajna-watcher-job-runner: | ||
restart: unless-stopped | ||
depends_on: | ||
ajna-watcher-db: | ||
condition: service_healthy | ||
image: cerc/watcher-ajna:local | ||
environment: | ||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} | ||
CERC_ETH_RPC_ENDPOINT: ${CERC_ETH_RPC_ENDPOINT} | ||
command: ["bash", "./start-job-runner.sh"] | ||
volumes: | ||
- ../config/watcher-ajna/watcher-config-template.toml:/app/environments/watcher-config-template.toml | ||
- ../config/watcher-ajna/start-job-runner.sh:/app/start-job-runner.sh | ||
ports: | ||
- "9000" | ||
healthcheck: | ||
test: ["CMD", "nc", "-v", "localhost", "9000"] | ||
interval: 20s | ||
timeout: 5s | ||
retries: 15 | ||
start_period: 5s | ||
extra_hosts: | ||
- "host.docker.internal:host-gateway" | ||
|
||
ajna-watcher-server: | ||
restart: unless-stopped | ||
depends_on: | ||
ajna-watcher-db: | ||
condition: service_healthy | ||
ajna-watcher-job-runner: | ||
condition: service_healthy | ||
image: cerc/watcher-ajna:local | ||
environment: | ||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} | ||
CERC_ETH_RPC_ENDPOINT: ${CERC_ETH_RPC_ENDPOINT} | ||
command: ["bash", "./start-server.sh"] | ||
volumes: | ||
- ../config/watcher-ajna/watcher-config-template.toml:/app/environments/watcher-config-template.toml | ||
- ../config/watcher-ajna/start-server.sh:/app/start-server.sh | ||
ports: | ||
- "3008" | ||
- "9001" | ||
healthcheck: | ||
test: ["CMD", "nc", "-v", "localhost", "3008"] | ||
interval: 20s | ||
timeout: 5s | ||
retries: 15 | ||
start_period: 5s | ||
extra_hosts: | ||
- "host.docker.internal:host-gateway" | ||
|
||
volumes: | ||
ajna_watcher_db_data: |
20 changes: 20 additions & 0 deletions
20
stack_orchestrator/data/config/watcher-ajna/start-job-runner.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#!/bin/sh | ||
|
||
set -e | ||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then | ||
set -x | ||
fi | ||
set -u | ||
|
||
echo "Using ETH RPC endpoint ${CERC_ETH_RPC_ENDPOINT}" | ||
|
||
# Read in the config template TOML file and modify it | ||
WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml) | ||
WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \ | ||
sed -E "s|REPLACE_WITH_CERC_ETH_RPC_ENDPOINT|${CERC_ETH_RPC_ENDPOINT}| ") | ||
|
||
# Write the modified content to a new file | ||
echo "$WATCHER_CONFIG" > environments/local.toml | ||
|
||
echo "Running job-runner..." | ||
DEBUG=vulcanize:* exec node --enable-source-maps dist/job-runner.js |
20 changes: 20 additions & 0 deletions
20
stack_orchestrator/data/config/watcher-ajna/start-server.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#!/bin/sh | ||
|
||
set -e | ||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then | ||
set -x | ||
fi | ||
set -u | ||
|
||
echo "Using ETH RPC endpoint ${CERC_ETH_RPC_ENDPOINT}" | ||
|
||
# Read in the config template TOML file and modify it | ||
WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml) | ||
WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \ | ||
sed -E "s|REPLACE_WITH_CERC_ETH_RPC_ENDPOINT|${CERC_ETH_RPC_ENDPOINT}| ") | ||
|
||
# Write the modified content to a new file | ||
echo "$WATCHER_CONFIG" > environments/local.toml | ||
|
||
echo "Running server..." | ||
DEBUG=vulcanize:* exec node --enable-source-maps dist/server.js |
98 changes: 98 additions & 0 deletions
98
stack_orchestrator/data/config/watcher-ajna/watcher-config-template.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
[server] | ||
host = "0.0.0.0" | ||
port = 3008 | ||
kind = "active" | ||
gqlPath = "/graphql" | ||
|
||
# Checkpointing state. | ||
checkpointing = true | ||
|
||
# Checkpoint interval in number of blocks. | ||
checkpointInterval = 2000 | ||
|
||
# Enable state creation | ||
# CAUTION: Disable only if state creation is not desired or can be filled subsequently | ||
enableState = false | ||
|
||
subgraphPath = "./subgraph-build" | ||
|
||
# Interval to restart wasm instance periodically | ||
wasmRestartBlocksInterval = 20 | ||
|
||
# Interval in number of blocks at which to clear entities cache. | ||
clearEntitiesCacheInterval = 1000 | ||
|
||
# Max block range for which to return events in eventsInRange GQL query. | ||
# Use -1 for skipping check on block range. | ||
maxEventsBlockRange = 1000 | ||
|
||
# Flag to specify whether RPC endpoint supports block hash as block tag parameter | ||
rpcSupportsBlockHashParam = false | ||
|
||
# GQL cache settings | ||
[server.gqlCache] | ||
enabled = true | ||
|
||
# Max in-memory cache size (in bytes) (default 8 MB) | ||
# maxCacheSize | ||
|
||
# GQL cache-control max-age settings (in seconds) | ||
maxAge = 15 | ||
timeTravelMaxAge = 86400 # 1 day | ||
|
||
[metrics] | ||
host = "0.0.0.0" | ||
port = 9000 | ||
[metrics.gql] | ||
port = 9001 | ||
|
||
[database] | ||
type = "postgres" | ||
host = "ajna-watcher-db" | ||
port = 5432 | ||
database = "ajna-watcher" | ||
username = "vdbm" | ||
password = "password" | ||
synchronize = true | ||
logging = false | ||
|
||
[upstream] | ||
[upstream.ethServer] | ||
rpcProviderEndpoint = "REPLACE_WITH_CERC_ETH_RPC_ENDPOINT" | ||
|
||
# Boolean flag to specify if rpc-eth-client should be used for RPC endpoint instead of ipld-eth-client (ipld-eth-server GQL client) | ||
rpcClient = true | ||
|
||
# Boolean flag to specify if rpcProviderEndpoint is an FEVM RPC endpoint | ||
isFEVM = true | ||
|
||
# Boolean flag to filter event logs by contracts | ||
filterLogsByAddresses = true | ||
# Boolean flag to filter event logs by topics | ||
filterLogsByTopics = true | ||
|
||
[upstream.cache] | ||
name = "requests" | ||
enabled = false | ||
deleteOnStart = false | ||
|
||
[jobQueue] | ||
dbConnectionString = "postgres://vdbm:password@ajna-watcher-db/ajna-watcher-job-queue" | ||
maxCompletionLagInSecs = 300 | ||
jobDelayInMilliSecs = 100 | ||
eventsInBatch = 50 | ||
subgraphEventsOrder = true | ||
# Filecoin block time: https://docs.filecoin.io/basics/the-blockchain/blocks-and-tipsets#blocktime | ||
blockDelayInMilliSecs = 30000 | ||
|
||
# Boolean to switch between modes of processing events when starting the server. | ||
# Setting to true will fetch filtered events and required blocks in a range of blocks and then process them. | ||
# Setting to false will fetch blocks consecutively with its events and then process them (Behaviour is followed in realtime processing near head). | ||
useBlockRanges = true | ||
|
||
# Block range in which logs are fetched during historical blocks processing | ||
historicalLogsBlockRange = 2000 | ||
|
||
# Max block range of historical processing after which it waits for completion of events processing | ||
# If set to -1 historical processing does not wait for events processing and completes till latest canonical block | ||
historicalMaxFetchAhead = 10000 |
10 changes: 10 additions & 0 deletions
10
stack_orchestrator/data/container-build/cerc-watcher-ajna/Dockerfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
FROM node:18.17.1-alpine3.18 | ||
|
||
RUN apk --update --no-cache add git python3 alpine-sdk bash curl jq | ||
|
||
WORKDIR /app | ||
|
||
COPY . . | ||
|
||
RUN echo "Installing dependencies and building ajna-watcher-ts" && \ | ||
yarn && yarn build |
9 changes: 9 additions & 0 deletions
9
stack_orchestrator/data/container-build/cerc-watcher-ajna/build.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/usr/bin/env bash | ||
# Build cerc/watcher-ajna | ||
|
||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh | ||
|
||
# See: https://stackoverflow.com/a/246128/1701505 | ||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | ||
|
||
docker build -t cerc/watcher-ajna:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/ajna-watcher-ts |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
# Ajna Watcher | ||
|
||
## Setup | ||
|
||
Clone required repositories: | ||
|
||
```bash | ||
laconic-so --stack ajna setup-repositories --git-ssh --pull | ||
``` | ||
|
||
Build the container images: | ||
|
||
```bash | ||
laconic-so --stack ajna build-containers | ||
``` | ||
|
||
## Deploy | ||
|
||
Create a spec file for the deployment: | ||
|
||
```bash | ||
laconic-so --stack ajna deploy init --output ajna-spec.yml | ||
``` | ||
|
||
### Ports | ||
|
||
Edit `network` in the spec file to map container ports to host ports as required: | ||
|
||
```yml | ||
... | ||
network: | ||
ports: | ||
ajna-watcher-db: | ||
- 15432:5432 | ||
ajna-watcher-job-runner: | ||
- 9000:9000 | ||
ajna-watcher-server: | ||
- 3008:3008 | ||
- 9001:9001 | ||
``` | ||
### Create a deployment | ||
Create a deployment from the spec file: | ||
```bash | ||
laconic-so --stack ajna deploy create --spec-file ajna-spec.yml --deployment-dir ajna-deployment | ||
``` | ||
|
||
### Configuration | ||
|
||
Inside deployment directory, open the `config.env` file and set following env variables: | ||
|
||
```bash | ||
# External Filecoin (ETH RPC) endpoint to point the watcher to | ||
CERC_ETH_RPC_ENDPOINT=https://example-lotus-endpoint/rpc/v1 | ||
``` | ||
|
||
### Start the deployment | ||
|
||
```bash | ||
laconic-so deployment --dir ajna-deployment start | ||
``` | ||
|
||
* To list down and monitor the running containers: | ||
|
||
```bash | ||
# With status | ||
docker ps -a | ||
|
||
# Check logs for a container | ||
docker logs -f <CONTAINER_ID> | ||
``` | ||
|
||
* Open the GQL playground at <http://localhost:3008/graphql> | ||
|
||
```graphql | ||
# Example query | ||
query { | ||
_meta { | ||
block { | ||
hash | ||
number | ||
timestamp | ||
} | ||
deployment | ||
hasIndexingErrors | ||
} | ||
|
||
accounts { | ||
id | ||
txCount | ||
tokensDelegated | ||
rewardsClaimed | ||
} | ||
} | ||
``` | ||
|
||
## Clean up | ||
|
||
Stop all the ajna services running in background: | ||
|
||
```bash | ||
# Only stop the docker containers | ||
laconic-so deployment --dir ajna-deployment stop | ||
|
||
# Run 'start' to restart the deployment | ||
``` | ||
|
||
To stop all the ajna services and also delete data: | ||
|
||
```bash | ||
# Stop the docker containers | ||
laconic-so deployment --dir ajna-deployment stop --delete-volumes | ||
|
||
# Remove deployment directory (deployment will have to be recreated for a re-run) | ||
rm -r ajna-deployment | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
version: "1.0" | ||
name: ajna | ||
description: "Ajna watcher stack" | ||
repos: | ||
- git.vdb.to/cerc-io/ajna-watcher-ts | ||
containers: | ||
- cerc/watcher-ajna | ||
pods: | ||
- watcher-ajna |