Skip to content

Repository files navigation

Mojaloop Reporting Service

The Reporting Service allows to create HTTP API endpoints using SQL queries and EJS templates and output the result in different formats.

  • Create Custom Resource for the report.

    The schema can be found in helm/reporting-service/crds/mojaloopreport-crd.yaml

    Examples in resources/examples directory

  • See architecture diagram in docs here .

  • Make requests as follows:

    curl localhost:3000/ENDPOINT_NAME?PARAM_NAME=VALUE&format=FORMAT
    

    FORMAT can be xlsx, html, json or csv Example:

    curl localhost:3000/participants?currency=USD&format=html
    

Build

From the repo root:

docker build -t reporting .

Run

Populate an environment file with the credentials of your Mojaloop instance:

cat <<EOF >./.my.env
DB_HOST="localhost"
DB_USER="central_ledger"
DB_PASSWORD="password"
DB_DATABASE="central_ledger"
KETO_READ_URL=http://keto/
EOF

Where reporting is the image name from the build stage:

docker run -v $PWD/config:/opt/reporting/config -p 3000:3000 --env-file=./.my.env reporting

Audit Issues

This repository uses npm-audit-resolver to check for security vulnerabilities. Basic troubleshooting of a failed security check is as follows:

  1. Run npm run audit:check to show the current issues.
  2. Run npm run audit:resolve to attempt to automatically fix the current issues.

Running Integration test locally

  • Start minikube K8S cluster with the following command
    minikube start --driver=docker --kubernetes-version=v1.21.5
    
  • Build local docker image which can be accessed from minikube cluster
    sh script-minikube-docker-build.sh
    
  • Install helm chart for dependencies
    helm dep up ./resources/test-integration/
    helm install test1 ./resources/test-integration/
    
  • Wait for all the services to be up
  • Port forward the mysql service
    kubectl port-forward -n default service/mysql 3306:3306
    
  • Insert sample data into database
    mysql -h127.0.0.1 -P3306 -uuser -ppassword default < ./resources/examples/participants_db_dump.sql
    
  • Run the integration tests
    npm install
    npm run test:integration
    
  • Adding the custom resource for manual testing
    kubectl apply -f resources/examples/participant_list.yaml
    
  • Cleanup
    kubectl delete -f resources/examples/participant_list.yaml
    helm uninstall test1
    minikube stop
    

TODO

  • OpenAPI validation on requests and responses (optionally for reports)
  • Streaming. The DB lib supports streaming, so does koa. This will be especially important for large reports.
  • Streams in the logger.
  • Measure test coverage
  • Logger: enable printing of requests as cURL- perhaps by providing a custom handler thingie
  • Eslint. Side-note: make sure 'no-floating-promises' is enabled.

About

Reporting service

Topics

Resources

Stars

1 star

Watchers

22 watching

Forks

Releases

Packages

Used by

Contributors

Languages