Main principles and features described
Features
- Fetch MYST prices from the public API
- Create prices for nodes based on the load and multiplier in the countries
- Listen for proposals from NATS Broker and enhance them with quality metrics and tags
- Run proposal expiration job
- Update price config by Universe Admin
- Use Postgres to save proposals, configs, and country multipliers
- Uses single REDIS instance for storing price configuration
Architecture & Project structure
Achitecture
Project structure
Envs
Discovery
MYSTERIUM_LOG_MODE=json
PORT=8080
QUALITY_ORACLE_URL=https://testnet3-quality.mysterium.network
QUALITY_CACHE_TTL=20s
BADGER_ADDRESS=https://testnet3-badger.mysterium.network
BROKER_URL=nats://testnet3-broker.mysterium.network
UNIVERSE_JWT_SECRET=Some_Secret
REDIS_ADDRESS=redis:6379
REDIS_DB=0
REDIS_PASS=Sidecar
MYSTERIUM_LOG_MODE=json
QUALITY_ORACLE_URL=https://testnet3-quality.mysterium.network
BROKER_URL=nats://testnet3-broker.mysterium.network
REDIS_ADDRESS=redis:6379
REDIS_DB=0
REDIS_PASS=
GECKO_URL=http://wiremock:8080
COINRANKING_URL=http://wiremock:8080
COINRANKING_TOKEN=Some_TokenNATS Msg Broker channels
*.proposal-register.v3- Register new Node proposal*.proposal-ping.v3- Node Ping*.proposal-unregister.v3- Unregister Node proposal
Entries
cmd/main.go- Discovery servicesidecar/cmd/main.go- Sidecar Pricing Parser service
Code structure
/config- [Discovery] config parser. Env params/tags- [Discovery] Tags proposals enhancer for SuperProxy/docs- [Discovery] Auto generated Swagger for REST API/e2e- e2e tests/health- [Discovery] health checker REST API/listener- [Discovery] NATS listener/price/api.go- [Discovery] Pricing REST API/price/config.go- [Discovery, Sidecar] Pricing config/price/market.go- [Sidecar] Scheduled price fetcher from different APIs (Gecko, Coinmarket)/price/network_load_calculator.go- [Sidecar] Updating countries multipliers based on load (sessions/providers)/price/price_getter.go- [Discovery] Fetch prices from Redis/price/price_updater.go- [Sidecar] Scheduled price updater to Redis/proposal/metrics/echnancer.go- [Discovery] Proposal quality enhancer/proposal/v3- [Discovery] Proposal structs/proposal/api.go- [Discovery] Proposal REST API/proposal/repository.go- [Discovery] Mappings for Postgres/proposal/service.go- [Discovery] Proposal service with scheduled expiration job/quality/oracleapi- [Discovery] Quality Oracle REST API client/quality/service.go- [Discovery] Caching layer with BigCache for Quality Oracle responses
Development
What toolset needed for development
https://docs.mysterium.network/developers/
How to build it
mage build - Builds Discovery service
mage buildsidecar - Builds Sidecar Prices Parser
Or for docker
docker build -t discovery:local .
docker build -t discosidecar:local ./sidecar
How to run it
mage up - will run docker-compose with all needed services
Or
docker-compose up - this should fire up all discovery service dependencies and the discovery it'self. (use --force-recreate to rebuild discovery image)
And if you wish to run discovery service from your IDE, then idea is to use
docker-compose up dev - This should only fire up dependencies (redis, etc...) for the discovery (or discosidecar).
How to test it locally
mage e2edev
API
Docs: http://localhost:8080/swagger/index.html
API: http://localhost:8080/api/v3
from https://github.com/mysteriumnetwork/discovery


No comments:
Post a Comment