Consists of 2 components:
- Crypto indexer that fetches crypto data from FinnHub REST API and indexes it to ElasticSearch
- Crypto search service that accepts query and uses ElasticSearch to read all matching cryptocurrencies
- Java 21
- Elasticsearch
- Kibana
- APM Java Agent
- gRPC
- Dagger (for dependency injection)
- JUnit, Mockito, AssertJ for testing
export FINN_HUB_API_KEY=...
docker-compose up --build
curl http://localhost:9200/cryptos/_search?pretty&q=*:*&size=5000 | jq
grpc-client-cli --proto ~/IdeaProjects/crypto-search-system/crypto-search-service/src/main/proto/crypto-search.proto localhost:8000
Message json (type ? to see defaults): {"query": "bitmex"}
[{
"symbol": "XRPUSDT",
"description": "Bitmex XRPUSDT",
"marketName": "BITMEX"
},
{
"symbol": "BCHUSDT",
"description": "Bitmex BCHUSDT",
"marketName": "BITMEX"
},
{
"symbol": "ARBUSD",
"description": "Bitmex ARBUSD",
"marketName": "BITMEX"
},
{
"symbol": "ETHU23",
"description": "Bitmex ETHU23",
"marketName": "BITMEX"
},
{
"symbol": "PEPEUSDT",
"description": "Bitmex PEPEUSDT",
"marketName": "BITMEX"
},
{
"symbol": "1TAIDOGEUSDT",
"description": "Bitmex 1TAIDOGEUSDT",
"marketName": "BITMEX"
},
{
"symbol": "ADAU23",
"description": "Bitmex ADAU23",
"marketName": "BITMEX"
},
{
"symbol": "GMXUSDT",
"description": "Bitmex GMXUSDT",
"marketName": "BITMEX"
},
{
"symbol": "BMEXUSDT",
"description": "Bitmex BMEXUSDT",
"marketName": "BITMEX"
},
{
"symbol": "TRX_USDT",
"description": "Bitmex TRX_USDT",
"marketName": "BITMEX"
}]
Message json (type ? to see defaults):