Gainstrack is
The following guide is targeted for developers. For user help, please visit Gainstrack Help
To proxy a mysql instance in google cloud as localhost:
cloud-sql-proxy -c ./gainstrack-firebase-adminsdk-some-id.json gainstrack:asia-northeast1:gainstrack-tk
AV_API_KEY
- API Key for alphavantage. Free keys can be obtained from their website
MYSQL_PASS
- Password to MySQL database
MYSQL_URL
- (Optional) custom JDBC connect string. Examples include (check region carefully)
jdbc:mysql:///cloudsql/gainstrack:asia-east2:gainstrack-hk
jdbc:mysql://google/quotes?cloudSqlInstance=gainstrack:asia-east2:gainstrack-hk&socketFactory=com.google.cloud.sql.mysql.SocketFactory
GOOGLE_APPLICATION_CREDENTIALS
- Path to JSON file containing Google credentials for Firestore. Supplied automatically in Google environments
QUOTES_ADMIN
- Enable quotes admin web API
AUTH0_DOMAIN
- e.g gainstrack.auth0.com
AUTH0_AUDIENCE
- e.g. https://poc.gainstrack.com
AUTH0_CLIENT
- e.g. UjVvEmeNTbgIEU6g60h1xvvvBPL4vJqi
The following all need to be running
Open the project in IntelliJ or other IDE and run JettyLauncher. Set environment variables as needed by application.conf or override application.conf
export DEV=true
export GOOGLE_APPLICATION_CREDENTIALS=...
cd client/functions
npm run serve
cd client
npm run serve
Or open client
in your IDE and run npm serve
from there
Front end client build can be built locally with
cd client
quasar build
Full single build of backend app server image can be built and submitted with
gcloud builds submit --config cloudbuild.yaml
This will also update the latest image in the container registry
A newer build system allows the creation of base images to speed the build of the final image
Base images should be regenerated when dependencies change
gcloud builds submit --config nodebase.cloudbuild.yaml
gcloud builds submit --config scalabase.cloudbuild.yaml
gcloud builds submit --config runtime.cloudbuild.yaml
The incremental gainstrack image can be built (with a faster CPU) as follows
gcloud builds submit --machine-type=N1_HIGHCPU_8 --config fast.cloudbuild.yaml
which will update the latest image in the container registry
App server
gcloud run deploy appserver \
--region asia-northeast1 \
--image gcr.io/gainstrack/gainstrack \
--platform managed \
--allow-unauthenticated \
--project gainstrack && \
gcloud run services update-traffic appserver --platform managed --region asia-northeast1 --to-latest
TODO: After deployment, the FX cache in the server needs priming or the first wave of calls will timeout with a 429 HTTP error
Quotes server
gcloud run deploy quotes \
--region asia-northeast1 \
--image gcr.io/gainstrack/gainstrack \
--platform managed \
--allow-unauthenticated \
--project gainstrack
Front-end
cd client
quasar build && firebase deploy --only hosting:poc
And for production
firebase deploy --only hosting:prod
cd client/functions
firebase deploy --only functions
gcloud functions deploy investpy --runtime python38 --trigger-http --allow-unauthenticated --region=asia-northeast1
Test with:
https://asia-northeast1-gainstrack.cloudfunctions.net/investpy?ticker=VWRD&marketRegion=LN