Giter VIP home page Giter VIP logo

traderx's Introduction

FINOS Hosted Platform - TraderX demo FINOS - Incubating

FINOS | TraderX Example of a Simple Trading App

DEV Only Warning Local Dev Machine Supported

TraderX Logo

TraderX is a Sample Trading Application, designed to be a distributed reference application in the financial services domain which can serve as a starting point for experimentation with various techniques and other open source projects. It is designed to be simple and accessible to developers of all backgrounds, with minimal pre-assumptions, and it can serve as a starting point for educational and experimentation purposes.

It is designed to be runnable from any developer workstation with minimal assumptions other than Node, Java and Python runtimes. The libraries and toolkits it uses are meant to be as vanilla as possible, to preserve its approachability by developers of all levels.

It contains Java, NodeJS, Python, .NET components that communicate over REST APIs and messaging systems and are able to showcase a wide range of technical challenges to solve.

More detailed information about this project can be found in the website which is generated from the code under the docs directory of this project.

Project Demo and Overview Presentation

Learn more about the project - including a brief demo, in the Keynote Demo session that was presented at the Open Source in Finance Forum 2023

TraderX Overview Video - OSFF 2023

Project Components

The project consists of multiple moving parts, and you can see how things hang together by reviewing the architecture and sequence diagrams located in the docs directory.

Component Tech Stack Description
docs markdown Architecture and Flow Diagrams are here!
database java/h2 A simple self-contained SQL database
reference-data node/nestjs REST service (off a flat file) for querying ticker symbols
trade-feed node/socketio Message bus used for trade flows, as well as streaming to the GUI
people-service .Net core Service for looking up users, for account mangement
account-service java/spring Service for querying and validating accounts
position-service java/spring Position service for looking up positions and trades by the blotter
trade-service java/spring Service for submitting trade/order requests for further processing
trade-processor java/spring Trade Feed consumer which processes trade/orders
web-front-end html/angular or react Interactive UI for executing trades and viewing blotter. Note: the AngularJS GUI was an initial contribution and contains account management capabilities. The React GUI was contributed during a hack day and may not work for managing accounts, but it does work for executing trades and viewing the blotter

Installation

This is installed locally through normal git clone operations.

Usage example (Simple)

In order to get things working together, it is recommended to select a range of ports to provide all running processes with, so that the pieces can interconnect as needed. A more advanced instance of this project is possible using the docker compose files which are present in each project directory. To run this all up 'by hand' here are default ports which are used, and you can easily export these variables to your favorite shell.

export DATABASE_TCP_PORT=18082
export DATABASE_PG_PORT=18083
export DATABASE_WEB_PORT=18084
export REFERENCE_DATA_SERVICE_PORT=18085
export TRADE_FEED_PORT=18086
export ACCOUNT_SERVICE_PORT=18088
export PEOPLE_SERVICE_PORT=18089
export POSITION_SERVICE_PORT=18090
export TRADE_PROCESSOR_SERVICE_PORT=18091
export TRADING_SERVICE_PORT=18092
export WEB_SERVICE_ANGULAR_PORT=18093  #Angular
export WEB_SERVICE_REACT_PORT=18094  #React

The recommended starting sequence to let everything find what it needs is:

database
reference-data
trade-feed
people-service
account-service
position-service
trade-processor
trade-service
web-front-end

Usage (Docker + Docker Compose)

The easiest way to run up the entire system is using Docker Compose. This should work on your local computer using Docker Desktop / Docker Compose (tested on Mac Silicon) and also in Github Codespaces.

From the root traderX directory run

docker compose up

On first run this will build all of the containers from the project specific Dockerfile's and then start them in the correct sequence.

The Docker containers are configured via Docker Compose to connect to a shred virtual network enabling them to communciate whether running on your local computer or via a Codespace.

The WebUIs will be added to this setup later, but in the interim you should be able to start either (or both) in the same environment to connect to the backend components.

Local Building (Corporate Environments)

When building locally in your company, if you are using a corporate artifact repository, you might need to override certain settings such as mavenCentral() in gradle, for the Java projects.

In order to do this, we have designated a .gitignore'd folder where you can leave company-specific build scripts. This folder is not managed by git and can be modified locally.

Local Gradle Use Case

Create a .corp directory and in there you can create a settings.gradle file which will allow you to build all gradle projects

# in the traderX main directory
mkdir .corp
touch settings.gradle

The settings.gradle file should contain any overrides on your repositories and plugins block but should also contain these contents:

rootProject.name = 'finos-traderX'
includeFlat 'database'
includeFlat 'account-service'
includeFlat 'position-service'
includeFlat 'trade-service'
includeFlat 'trade-processor'

This will include projects in directories at the same level as the .corp directory.

You can also store a separate gradle wrapper here, if you need the distributionUrl in your gradle.properties to differ from the public internet one.

To build and run these projects, you can do the following:

###### From traderX root #####
# Note: gradle or ./gradlew can be used, depending on your path

gradle --settings-file .corp/settings.gradle build

# Build specific project
gradle --settings-file .corp/settings.gradle database:build

# Run specific project
gradle --settings-file .corp/settings.gradle account-service:bootRun

##### From inside the .corp directory ####
cd .corp
./gradlew build
./gradlew account-service:bootRun

Getting Involved

Project Meetings

A great way to interact with the TraderX community is to attend the bi-weekly Friday TraderX meetings. Email [email protected] to be added to the meeting invite directly, or find the meeting in the FINOS Community Calendar.

Contributing

  1. Fork it (https://github.com/finos/traderx/fork)
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Read our contribution guidelines and Community Code of Conduct
  4. Commit your changes (git commit -am 'Add some fooBar')
  5. Push to the branch (git push origin feature/fooBar)
  6. Create a new Pull Request

NOTE: Commits and pull requests to FINOS repositories will only be accepted from those contributors with an active, executed Individual Contributor License Agreement (ICLA) with FINOS OR who are covered under an existing and active Corporate Contribution License Agreement (CCLA) executed with FINOS. Commits from individuals not covered under an ICLA or CCLA will be flagged and blocked by the FINOS Clabot tool. Please note that some CCLAs require individuals/employees to be explicitly named on the CCLA.

Need an ICLA? Unsure if you are covered under an existing CCLA? Email [email protected]

License

Copyright 2023 UBS, FINOS, Morgan Stanley

Distributed under the Apache License, Version 2.0.

SPDX-License-Identifier: Apache-2.0

traderx's People

Contributors

chrisjstevo avatar dovops avatar finos-admin avatar maoo avatar renovate[bot] avatar rocketstack-matt avatar theiceoan avatar thejuanandonly99 avatar ztanczos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

traderx's Issues

MVP of Account Service

Feature Request

Description of Problem:

Create an account service to manage the account objects (and user-account-mappings) in the database.

8 December 2023 - TraderX Meeting Agenda

Date

8 December 2023 - 8 am EST / 1 pm GMT

Untracked attendees

  • Dov Katz / MS
  • Chris Stevenson / UBS
  • Steve Heron / UBS
  • Peter Smulovics / MS
  • Cliff Tiltman / MS
  • Karl Moll / FINOS
  • James Mcleod / FINOS

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

  • Convene & roll call (5mins)
  • Display FINOS Antitrust Policy summary slide
  • Review Meeting Notices (see above)
  • Approve past meeting minutes (NA)
  • Introductions, project charter discussions
  • AOB, Q&A & Adjourn (5mins)

Action Items

  • Flag good first issues to encourage initial contributions
  • Confirm next meeting date

Zoom Details

Join by Phone

Cannot login to H2 Console

Bug Report

After building and launching the database I tried to run the H2 console. The login popup works but I'm getting a error:

IO Exception: "/home/acpvst3/test outside [my path]traderX/database/_data" [90028-224] 90028/90028 [(Help)]

This does not affect connecting from the account-service which works correctly.

Steps to Reproduce:

  1. Follow the instructions to build and run the database, https://github.com/finos/traderX/tree/main/database.
  2. Open Browser and enter localhost:18084
  3. Enter pw and click Connect or Test
  4. You can also run the same process in powershell without bash and get the same error.

Expected Result:

H2 Console

Actual Result:

IO Exception: "/home/acpvst3/test outside /mnt/d/IdeaProjects/finos/traderx/traderx-cdm4/traderX/database/_data" [90028-224] 90028/90028 [(Help)]

Environment:

Windows 10
Gradle 8.4
Java 17
Bash or Powershell will result in same error

Additional Context:

...add any other context about the problem here. If applicable, add screenshots to help explain...

Improve documentation for running with the ingress controller and docker-compose

Feature Request

Description of Problem:

Now that everything is running both independently and via docker compose, the documentation can be improved to show how to stand up the processes, test each process by its port (perhaps even link to localhost addresses), and test things like the web-front-end both from behind the ingress controller as well as directly using CORS connectivity to each host/port.

Create basic position service

Feature Request

Description of Problem:

Create a basic Position Service to supply blotter with trades and positions given an account ID

Mock backend for GUI Development

Feature Request

Description of Problem:

As a UI developer there are several services which need to be running to interact with the backend.

To simplify development, mock services should be stood up to provide the accounts, trades, positions, and reference data, as well as a mock trade message publisher which can be built into the trade feed diagnostic UI.

When done, a UI developer should only need to run the mock services and the trade feed, all nodejs-based l.

Windows 10 Support

I've been trying to build and run on Windows but getting various errors:
=> CANCELED [account-service 4/4] RUN ./gradlew build 1.0s

[position-service 4/4] RUN ./gradlew build:
0.917 /bin/sh: 1: ./gradlew: not found


failed to solve: process "/bin/sh -c ./gradlew build" did not complete successfully: exit code: 127

Notes:
Docker is running
./gradlew build works from inside each service directory but fails from the scripts
Java 17

I may need to debug the setup but wanted to first if anyone else is running on Windows?

Add Market/Price Awareness

Feature Request

Description of Problem:

Once there's a more sophisticated messaging system (See #35 ) , the next step on TraderX would be to add the concept of pricing to the trades, blotters, and matching system (Trade processor) so that there's a more sophisticated markets-based capability to demonstrate.

If we look at current TraderX as the basic demonstration of a financial-services-relevant distributed application, this request would be to add some more sophistication which could make for more meaningful integrations and experiments.

Requirements Ideas:

  • The domain model of the data should include prices. (DTOs, persistence, and gui)
  • The messaging system should allow for price feeds/streams (ultimately allowing a price feed generator to be stood up)
  • Trade capture should record the price and base case should process all orders as market orders, with a future capability to allow price matching, etc.

Simple trade processor

Feature Request

Description of Problem:

Handle incoming published trades and process them, and persist the trade and associated account-position for the security in question. Generate id, and dispatch notification events on account-specific topics.

Working Local Database

Feature Request

Description of Problem:

Create a working database, based on H2, which loads the initial schema, and runs a TCP server for other components to connect to..

Readiness endpoints

For each backend component, build a /healthcheck (or similar name) endpoint that returns:

  • 200 status code if everything is good
  • 40x status codes for specific errors (authentication, authorization, resource access, etc)
  • 500 status code for any other errors
  • a JSON payload with additional info about service status (if applicable)

Other tasks:

MVP basic/simple SocketIO publish and subscribe Java Implementation

Feature Request

Description of Problem:

For java clients to connect to the simple trade-feed, a simple publish/subscribe mechanism will be built in java. This will need to be replaced with better content-specific solution down the line, but this is enough for a working PoC

Live hosted instance :)

At the cost of putting more work on @maoo backlog, I really would love to see a "live demo" link in the readme as well as on the FINOS website.

@DovOps is the project at the right stage? @maoo maybe something we can work on in August?

BTW, this is amazing :)

[DRAFT] Multiple instances of demo environment to showcase integrations

NOTE! This is still a draft, we should probably discuss it further during our next bi-weekly meeting; eager to hear your thoughts @DovOps @rocketstack-matt

Challenge

  • Allow contributors to branch out the TraderX main version and showcase the code under demo.traderx.finos.org
  • Optimise infrastructure (as code), in order to:
    1. Reuse services that are unaltered by the branch
    2. Run multiple TraderX "instances" using the same container "cluster", preferably using Docker Compose
  • Allow contributors to keep on working independently on demo/* branches

Proposed approach

  1. Release Docker images (on the main branch) into Docker Registry using Github actions
  2. Docker compose points to the released docker images
  3. Branches that are named with "demo/*" must:
  4. clone, modify and release Docker images that need update, plus the "ingress" image
  5. Update GitHub Actions to only release the images that have been customised; names must be different (ie prefixed with the branch name) than the ones in the main branch, to avoid overlap
  6. Update docker-compose.yml to add all new images as services; for the ingress, a new port must be chosen, to avoid overlap
  7. Update the main server Nginx configuration to add a match on domain name (ie cdm.traderx.finos.org) and redirect to the proper ingress image port

9 February 2024 - TraderX Meeting Agenda

Date

9 February 2024 - 8 am EST / 1 pm GMT

Previous Meeting

26 January 2024 - TraderX Meeting Agenda

Untracked attendees

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

  • Convene & roll call (5mins)
  • Display FINOS Antitrust Policy summary slide
  • Review Meeting Notices (see above)
  • Approve past meeting minutes ( #101 )
  • Introductions
  • Internal corporate adoption/development of TraderX
  • Review Priority issues
  • Hack day opportunities
  • AOB, Q&A & Adjourn (5mins)

Discussed Points

Actions

Zoom Details

Join by Phone

Trade Service

Feature Request

Description of Problem:

MVP Trade service to capture UI-driven trade requests, and validate them against account and ref data services before submitting downstream to the trade feed for further processing

MVP People Service based on flat file

Feature Request

Description of Problem:

Add people service, .NET core based - based on a flat file representing a directory of users. Make port configurable by env variable and set to default port 18089

22 March 2024 - TraderX Meeting Agenda

Date

22 March 2024 - 8 am EST / 12 pm GMT

Previous Meeting

8 March 2024 - TraderX Meeting Agenda

Untracked attendees

  • Maria Lopatkova (SmoothStack)

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

Discussed Points

  • @psmulovics - raised opportunity to create a cross-project milestone (E.g. for OSSF June/LN, or OSSF Nov /NY) for tracking things we want to get done by the events.
  • Reviewed finos/devops-automation#133 - Agreed it's not top priority but good opportunity for outside contribution.
  • Discussed http://app.moderne.io - and updating FINOS (not just TraderX) code using OpenRewrite recipes. NOTE: I had Moderne add the whole FINOS org to their list of open source orgs they keep ready for analysis and modification.
  • Discussed CDM/TraderX - integration / experiments.

Next Steps:

  • Add C4 Diagram thumbnail and other architecture/flow links to main README as an interim step for enhanced documentation (Open a new issue)
  • @tomhealey-icma and @maoo to explore integrating CDM/TraderX in a branch environment - for finos/architecture-as-code#243
  • @rocketstack-matt - in Architecture as Code SIG - What are the next steps?
  • Solicit volunteers to build the website/Documentation / finos/devops-automation#133
  • @psmulovics discovered that the .NET code for People Service is not up to date. Will create an issue to update it.

Zoom Details

Join by Phone

Create account bug

Bug Report

Steps to Reproduce:

Open Angular front-end and go to accounts tab
Create account
Submission returns 500

Expected Result:

Expect account creation (200)

Actual Result:

Error, with message 'could not prepare statement... 'ACCOUNTS_SEQ' not found.. SQL Statement... select next value for ACCOUNTS_SEQ (90036-224).

Environment:

EC2 environment

Architecture as Code for TraderX

The (FINOS) Architecture as Code Working group have built a C4 model for TraderX , and it would be great to host some docs on this repository, possibly embedding some diagrams.

I'll defer to @rocketstack-matt to decompose this, or link it to other existing issues.

Simplistic but functional topic-based publish-subscribe system

Create a Pub/Sub trade feed simple implementation

Description of Problem:

A pub-sub engine is required for this system to work. For this simple demo, just basic topic-based publishing and subscribing is needed, rather than a complex, robust solution. This should work in the local developer workstation and should easily support web-consumption for the GUI to easily integrate.

23 February 2024 - TraderX Meeting Agenda

Date

23 February 2024 - 8 am EST / 1 pm GMT

Previous Meeting

9 February 2024 - TraderX Meeting Agenda

Untracked attendees

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

  • Convene & roll call (5mins)
  • Display FINOS Antitrust Policy summary slide
  • Review Meeting Notices (see above)
  • Approve past meeting minutes ( #113 )
  • Introductions
  • Internal corporate adoption/development of TraderX
  • Review Priority issues
  • Hack day opportunities
  • AOB, Q&A & Adjourn (5mins)

Discussed Points

  • Demo instance
    • @maoo provided an update on the live environment. It's now up at https://demo.traderx.finos.org
    • This is not a 'prod-grade' instance/environment, but it's great as a live demo instanc
    • This was the initial response for #29
    • Next Steps
      • Free up traderx.finos.org for use as the documentation microsite
      • Basic GUI / UX enhancement
  • Monitoring/Uptime/Status page
    • Could be a good first issue to build 'readiness endpoints' into each service to report uptime/service status
    • @maoo suggested uptime robot which could be used
    • @rocketstack-matt has #102 which could be helpful
  • One idea - Share journey (Docker/K8S) on this with the devops automation SIG. Perhaps worth getting them involved - (Worth raising with Amol )
  • @rocketstack-matt - in Architecture as Code SIG - they modeled TraderX as a sample application. This is also a nice synergy.

Actions

  • Close all previous meeting issues in GitHub.
  • use demo.traderx.finos.org as domain name
  • follow notes on https://github.com/finos/traderX/pull/114/files - cherry pick changes and apply to the ingress-container branch
  • @maoo to apply changes on live environment and notify team
  • Arch as Code SIG to open issue to update C4 to include nginx. ( @rocketstack-matt )

Zoom Details

Join by Phone

26 January 2024 - TraderX Meeting Agenda

Date

26 January 2024 - 8 am EST / 1 pm GMT

Previous Meeting

12 January 2024 - TraderX Meeting Agenda

Untracked attendees

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

  • Convene & roll call (5mins)
  • Display FINOS Antitrust Policy summary slide
  • Review Meeting Notices (see above)
  • Approve past meeting minutes ( #79 )
  • Introductions
  • Internal corporate adoption/development of TraderX
  • Review Priority issues
  • Hack day opportunities
  • AOB, Q&A & Adjourn (5mins)

Discussed Points

  • @rocketstack-matt is working on a PR with K8S manifests
  • For now, we can use an EC2 instance that runs Docker Compose; the instance will reboot and reset the dataset every 24 hours.
  • We discussed aspirational roadmap; @mimiflynn suggested a (git-)branching model which allows to implement different use cases of traderx, or use them to run hackathons.
  • @karlmoll suggested to connect with Devops Automation
  • @ctiltman suggested the use of Architecture as Code in TraderX

Actions

  • @maoo restarts the existing EC2 instance and updates to the latest traderx version ; the team can review the endpoint when ready
  • @rocketstack-matt raises PR with K8S manifests
  • @karlmoll reaches out to Devops Automation

Zoom Details

Join by Phone

Ability to start up the entire system for demo / integration

Feature Request

Description of Problem:

To make it easy to demo the entire system or for developing against a running stack, we should be able to start up everything from a single command.

Potential Solutions:

  • Containerise each project
  • Setup single start script respecting startup order

Add Favicon to TraderX App

Feature Request

Description of Problem:

Now that we have a nice logo, it would be great to add a favicon to the TraderX SPA

Simple Service Status Page

Given the number of 'moving parts' there should be a simple status page to indicate that all services are up and running as expected, both directly via CORS, as well as via the proxy/nginx (in the case of docker-compose, etc).

Over time with the move to Service Mesh or more sophisticated architectures, this would be something handled 'out of the box' but for now it will help a local developer determine that things are all working

Add User to Account appears to be broken

Bug Report

Steps to Reproduce:

Go to accounts tab.
Select account.
Enter user not found in account
Click 'Add User'

Expected Result:

Expect to see user added to account

Actual Result:

User not added to account

Environment:

...version and build of the project, OS and runtime versions, virtualised environment (if any), etc. ...

Additional Context:

...add any other context about the problem here. If applicable, add screenshots to help explain...

Add more robust messaging capabilities (e.g. ActiveMQ, etc)

Feature Request

Description of Problem:

The basic MVP of TraderX included a 'quick-and-dirty' WebSocket-friendly messaging system based on NodeJS called SocketIO which allowed a single process to handle server-to-server messaging and client pub-sub and streaming messaging with very little code using native JSON.

This will not scale as we try to add more sophisticated high-frequency flows to the project, and therefore we should look at alternatives which are simple enough to allow minimal learning curves, yet powerful enough to allow for higher frequency messaging.

The goal here is to keep the TraderX process as simple as possible, while allowing elements of it to scale as needed by developers.

Requirements:

  • This must listen on a port that can be connected to by other TraderX components which require messaging.
  • There must be a way for web GUIs to subscribe to updates - typically delivered over this messaging system, presumably via websockets. (This can either be the same process, or a separate process)
  • If the gui/websocket connects from a separate process other than the messaging system, ideally there should be a way for NodeJS (hosting the web gui) to connect to the messaging system and proxy connectivity to the GUI using websockets.

Potential Solutions:

Options include kafka, activeMQ/Artemis, perhaps apache pulsar standalone.

MVP0: Commit an architecture diagram, and API spec files

Architecture Diagram and API Specs as an initial MVP

Description of Problem:

By creating an architecture diagram and describing each component along with API specifications and flow diagrams, it will be relatively easy for anyone to implement the various components and assemble this trading system.

This issue is to cover the initial submission of artifacts into this repository, which for the most part will not include code.

web-front-end/angular fails to start

How to reproduce

docker-compose up --build -d
watch docker logs traderx-web-front-end-angular-1

Current behaviour

> @finos/[email protected] start
> ng serve --host 0.0.0.0 --disable-host-check --port ${WEB_SERVICE_PORT:-18093}

Warning: Running a server with --disable-host-check is a security risk. See https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a for more information.
****************************************************************************************
This is a simple server for use in testing or debugging Angular applications locally.
It hasn't been reviewed for security issues.

DON'T USE IT FOR PRODUCTION!
****************************************************************************************
- Generating browser application bundles (phase: setup)...
Processing legacy "View Engine" libraries:
- ag-grid-angular [es2015/esm2015] ()
Encourage the library authors to publish an Ivy distribution.
โœ” Browser application bundle generation complete.

Warning: /web-front-end/angular/node_modules/ag-grid-angular/__ivy_ngcc__/fesm2015/ag-grid-angular.js depends on 'ag-grid-community'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies

Warning: 3 rules skipped due to selector errors:
  legend + * -> Cannot read properties of undefined (reading 'type')
  .form-floating >  ~ label -> Did not expect successive traversals.
  .form-floating >  ~ label -> Did not expect successive traversals.



Error: node_modules/engine.io-parser/build/esm/index.d.ts:5:38 - error TS2307: Cannot find module 'node:stream/web' or its corresponding type declarations.

5 import type { TransformStream } from "node:stream/web";
                                       ~~~~~~~~~~~~~~~~~

Found https://stackoverflow.com/questions/77944957/angular-build-failing-on-heroku-with-minimal-error-message , which suggests to downgrade engine.io-parser

Trade-feed improvement

Feature Request

Description of Problem:

Trade-feed was a rough mockup of a pub-sub service. It was done in haste and really needs to follow more of an envelope-payload format. Improve the current approach by implementing an envelope with information like topic, sender, etc, along with a message payload that contains the actual message in question.

Update the web GUI contained in the trade-feed project, as well as the java interactions in trade-processor and trade-service

Lightweight service aggregation proxy

Feature Request

Create a lightweight service aggregation proxy to consolidate endpoints for simplifying GUI development. (note: trade-feed pubsub piece will need to be standalone )

8 March 2024 - TraderX Meeting Agenda

Date

8 March 2024 - 8 am EST / 1 pm GMT

Previous Meeting

23 February 2024 - TraderX Meeting Agenda

Untracked attendees

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

Discussed Points

Actions

  • Close all previous meeting issues in GitHub.
  • use demo.traderx.finos.org as domain name
  • follow notes on https://github.com/finos/traderX/pull/114/files - cherry pick changes and apply to the ingress-container branch
  • @maoo to apply changes on live environment and notify team
  • Arch as Code SIG to open issue to update C4 to include nginx. ( @rocketstack-matt )

Zoom Details

Join by Phone

Implement TraderX workflows in Conductor

Feature Request

Description of Problem:

When TraderX is deployed as a distributed application made of microservices, flows must be executed in a robust and scalable way.

Potential Solutions:

By implementing TraderX workflows in Conductor, reliability and scalability will be insured. Workflows sit between UI and services removing the need to implement the routing between services by additional services or hard link services, as well as managing the application context. TraderX services will be de facto loosely coupled, and will bring a more secure way to implement future evolutions.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • chore(deps): update dependency fluentvalidation to v11.9.2
  • chore(deps): update dependency mediatr to v12.3.0
  • chore(deps): update dependency eslint-plugin-prettier to v5
  • chore(deps): update dependency prettier to v3
  • chore(deps): update dependency puppeteer to v22
  • chore(deps): update dependency selenium-server-standalone-jar to v4
  • chore(deps): update dependency supertest to v7
  • chore(deps): update mcr.microsoft.com/vscode/devcontainers/java docker tag to v1
  • chore(deps): update mcr.microsoft.com/vscode/devcontainers/javascript-node docker tag to v1
  • chore(deps): update testing-library monorepo (major) (@testing-library/jest-dom, @testing-library/react, @testing-library/user-event)
  • chore(deps): update typescript-eslint monorepo to v7 (major) (@typescript-eslint/eslint-plugin, @typescript-eslint/parser)
  • fix(deps): update angular monorepo to v18 (major) (@angular/animations, @angular/common, @angular/compiler, @angular/compiler-cli, @angular/core, @angular/forms, @angular/language-service, @angular/platform-browser, @angular/platform-browser-dynamic, @angular/router)
  • fix(deps): update dependency typescript to v5
  • fix(deps): update dependency web-vitals to v4
  • ๐Ÿ” Create all rate-limited PRs at once ๐Ÿ”

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

devcontainer
.devcontainer/devcontainer.json
  • mcr.microsoft.com/devcontainers/universal 2
  • ghcr.io/devcontainers-contrib/features/gradle-sdkman 2
docker-compose
docker-compose.yml
dockerfile
account-service/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/java 0-17-bullseye
database/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/java 0-17-bullseye
ingress/Dockerfile
people-service/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/dotnet 8.0
position-service/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/java 0-17-bullseye
reference-data/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/javascript-node 0-16-bullseye
reference-data/base.Dockerfile
  • node 20-bullseye
trade-feed/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/javascript-node 0-16-bullseye
trade-feed/base.Dockerfile
  • node 20-bullseye
trade-processor/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/java 0-17-bullseye
trade-service/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/java 0-17-bullseye
web-front-end/angular/Dockerfile
  • mcr.microsoft.com/vscode/devcontainers/javascript-node 0-16-bullseye
web-front-end/angular/base.Dockerfile
  • node 20-bullseye
github-actions
.github/workflows/license-scanning-node.yml
  • actions/checkout v4
  • actions/setup-node v4
.github/workflows/security.yml
  • actions/checkout v4
  • actions/setup-node v4
  • actions/upload-artifact v4
  • actions/checkout v4
  • actions/upload-artifact v4
  • actions/checkout v4
  • actions/setup-java v4
  • actions/upload-artifact v4
  • actions/checkout v4
  • crazy-max/ghaction-container-scan v3
gradle
account-service/settings.gradle
account-service/build.gradle
  • org.springframework.boot 3.3.0
  • io.spring.dependency-management 1.1.5
  • com.h2database:h2 2.2.224
  • org.springdoc:springdoc-openapi-starter-webmvc-ui 2.5.0
database/settings.gradle
database/build.gradle
  • com.h2database:h2 2.2.224
position-service/settings.gradle
position-service/build.gradle
  • org.springframework.boot 3.3.0
  • io.spring.dependency-management 1.1.5
  • com.h2database:h2 2.2.224
  • org.springdoc:springdoc-openapi-starter-webmvc-ui 2.5.0
trade-processor/settings.gradle
trade-processor/build.gradle
  • org.springframework.boot 3.3.0
  • io.spring.dependency-management 1.1.5
  • com.h2database:h2 2.2.224
  • org.springdoc:springdoc-openapi-starter-webmvc-ui 2.5.0
  • org.json:json 20240303
  • io.socket:socket.io-client 2.1.0
trade-service/settings.gradle
trade-service/build.gradle
  • org.springframework.boot 3.3.0
  • io.spring.dependency-management 1.1.5
  • com.h2database:h2 2.2.224
  • org.springdoc:springdoc-openapi-starter-webmvc-ui 2.5.0
  • org.json:json 20240303
  • io.socket:socket.io-client 2.1.0
gradle-wrapper
account-service/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6
database/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6
position-service/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6
trade-processor/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6
trade-service/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6
npm
reference-data/package.json
  • @nestjs/common ^10.3.8
  • @nestjs/core ^10.3.8
  • @nestjs/platform-express ^10.3.8
  • @nestjs/swagger ^7.3.1
  • @nestjs/terminus ^10.2.3
  • csv-reader ^1.0.12
  • reflect-metadata ^0.2.0
  • rxjs ^7.8.1
  • @nestjs/cli ^10.3.2
  • @nestjs/schematics ^10.1.1
  • @nestjs/testing ^10.3.8
  • @types/express ^4.17.21
  • @types/jest 29.5.12
  • @types/node 20.12.13
  • @types/supertest ^2.0.16
  • @typescript-eslint/eslint-plugin ^6.14.0
  • @typescript-eslint/parser ^6.14.0
  • eslint ^8.0.1
  • eslint-config-prettier ^8.3.0
  • eslint-plugin-prettier ^4.0.0
  • jest 29.7.0
  • prettier ^2.3.2
  • source-map-support ^0.5.20
  • supertest ^6.1.3
  • ts-jest 29.1.4
  • ts-loader ^9.5.1
  • ts-node ^10.9.2
  • tsconfig-paths 4.2.0
  • typescript ^5.4.5
  • @tsconfig/node20 20.1.4
trade-feed/package.json
  • cors ^2.8.5
  • express ^4.19.2
  • socket.io ^4.7.5
  • winston ^3.13.0
web-front-end/angular/package.json
  • @angular/animations ^17.0.0
  • @angular/common ^17.0.0
  • @angular/compiler ^17.0.0
  • @angular/core ^17.0.0
  • @angular/forms ^17.0.0
  • @angular/platform-browser ^17.0.0
  • @angular/platform-browser-dynamic ^17.0.0
  • @angular/router ^17.0.0
  • ag-grid-angular ^29.3.3
  • ag-grid-community ^29.3.5
  • bootstrap ^5.3.3
  • ngx-bootstrap ^12.0.0
  • rxjs ^7.8.1
  • socket.io-client 4.7.5
  • tslib ^2.6.2
  • zone.js ^0.14.0
  • @angular-devkit/build-angular ^17.0.0
  • @angular/cli ^17.0.0
  • @angular/compiler-cli ^17.0.0
  • @angular/language-service ^17.0.0
  • @faker-js/faker ^7.6.0
  • @types/jasmine ^5.1.4
  • @types/node ^20.12.13
  • codelyzer ^6.0.2
  • cross-env ^7.0.3
  • jasmine-core ~5.1.2
  • jasmine-spec-reporter ^7.0.0
  • karma ^6.4.3
  • karma-chrome-launcher ~3.2.0
  • karma-coverage ~2.2.1
  • karma-jasmine ~5.1.0
  • karma-jasmine-html-reporter ~2.1.0
  • karma-junit-reporter ^2.0.1
  • protractor ^7.0.0
  • protractor-jasmine2-html-reporter 0.0.7
  • puppeteer ^18.2.1
  • selenium-server-standalone-jar ^3.141.59
  • serve-handler ^6.1.5
  • ts-node ^10.9.2
  • typescript ~5.4.5
web-front-end/react/package.json
  • @rjsf/core ^5.7.2
  • @rjsf/utils ^5.7.2
  • @rjsf/validator-ajv8 ^5.7.2
  • @salt-ds/core ^1.6.0
  • @salt-ds/icons ^1.3.0
  • @salt-ds/lab ^1.0.0-alpha.6
  • @salt-ds/theme ^1.4.0
  • @types/node ^20.0.0
  • fs 0.0.1-security
  • react ^18.2.0
  • react-dom ^18.2.0
  • typescript ^4.9.5
  • web-vitals ^2.1.4
  • @emotion/react ^11.10.8
  • @emotion/styled ^11.10.8
  • @heswell/salt-lab ^1.0.0-alpha.2
  • @mui/material ^5.12.3
  • ag-grid-community ^29.3.3
  • ag-grid-react ^29.3.3
  • react-bootstrap ^2.7.4
  • react-scripts 5.0.1
  • @types/react ^18.2.0
  • @types/react-dom ^18.2.1
  • @testing-library/jest-dom ^5.16.5
  • @testing-library/react ^13.4.0
  • @testing-library/user-event ^13.5.0
  • @types/jest ^27.5.2
  • socket.io ^4.6.1
  • socket.io-client ^4.6.1
nuget
people-service/PeopleService.Core/PeopleService.Core.csproj
  • System.Text.Json 8.0.3
  • MediatR 12.2.0
  • JetBrains.Annotations 2023.3.0
  • FluentValidation.AspNetCore 11.3.0
  • CacheManager.Microsoft.Extensions.Configuration 1.2.0
  • CacheManager.Core 1.2.0
people-service/PeopleService.WebApi/PeopleService.WebApi.csproj
  • Swashbuckle.AspNetCore 6.5.0
  • Serilog.Extensions.Logging.File 3.0.0
  • Serilog.AspNetCore 8.0.1
  • MediatR 12.2.0
  • FluentValidation.AspNetCore 11.3.0
  • FluentValidation 11.9.1

  • Check this box to trigger a request for Renovate to run again on this repository

Build dependency

Bug Report

The instructions indicate creating a settings.gradle file in .corp with the following:

rootProject.name = 'finos-traderX'
includeFlat 'database'
includeFlat 'account-service'
includeFlat 'position-service'
includeFlat 'trade-service'
includeFlat 'trade-processor'

I found that running:

cd .corp
./gradlew build

didn't work without adding:
dependencyResolutionManagement {
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}

to the setting.gradle file.

Steps to Reproduce:

  1. cd .corp
    ./gradlew build

will result in dependency error.

Expected Result:

successful build.

Actual Result:

Dependency error

Environment:

Windows 10
Gradle 8.4 and 8.5
JAVA 17
Powershell

Additional Context:

...add any other context about the problem here. If applicable, add screenshots to help explain...

12 January 2024 - TraderX Meeting Agenda

Date

12 January 2024 - 8 am EST / 1 pm GMT

Previous Meeting

8 December 2023 - TraderX Meeting Agenda

Untracked attendees

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

  • Convene & roll call (5mins)
  • Display FINOS Antitrust Policy summary slide
  • Review Meeting Notices (see above)
  • Approve past meeting minutes ( #79 )
  • Introductions
  • Internal corporate adoption/development of TraderX
  • Review Priority issues
  • Hack day opportunities
  • AOB, Q&A & Adjourn (5mins)

Discussed Points

  • Meeting cadence. Agreed to cancel up to Thursday the day before, but keep the twice monthly format for now.
  • @tomhealey-icma Raised the issue of how we're going to do releases, versioning scheme. Would be good to decide if we do releases, and if so, what the purpose of releasing would be.

Action Items

  • MS ( @DovOps ) to share experience (next meeting) on running local fork of TraderX with internal modifications
  • (See next-meeting labels in Issues)
  • @karlmoll to follow-up internally at FINOS around #29 and other opportunities for TraderX to be promoted at other project meetings (guest presenter, etc...)
  • @DovOps to open more tech-debt issues which are good for new contributors to get involved (e.g. test coverage, holistic JS stack upgrades, etc)
  • @DovOps to add Maintainers List, and Roadmap to the README (@karlmoll to provide example)
  • @psmulovics - Bring update back from TSC meeting about project adoptive ownership... / involvement from the TSC
  • @DovOps Create aspirational roadmap (even without dates) , including top priority integrations and hardening of the project- with rationale, etc to help @karlmoll with recruiting interested contributors. -- Essentially, a MVP of roadmap

Zoom Details

Join by Phone

Database issues around web console access, and sequence creation

Bug Report

Database sequence in initial sql is not dropped before created, so an error appears in the log on subsequent runs. Add drop sequence with the drop table statements.
Database web console not accessible when running in EC2 (e.g. when visiting port 18084 you get a host $_ not found.) Fixable using -webExternalNames

Consider Login-requirement / authentication to protect TraderX Demo Environment

Feature Request

Description of Problem:

Do we want the traderx demo to be 100% open? This may cause bad actors to exploit the unauthenticated tool to inject offensive content, or other things, rather than just demonstrate the functionality.

Potential Considerations:

Does this create a barrier to exploration, or would people be hesitant?
Is this difficult to implement?
Do we want to do this?

OpenAPI / Swagger UI no longer works

Bug Report

Steps to Reproduce:

Go to any Java service webroot - and it should redirect to /swagger-ui/swagger-ui.html (default for springdoc)
This no longer works.

Expected Result:

SwaggerUI displayed

Actual Result:

Whitelabel Error Page...

Environment:

Any

Additional Context:

This seems to be due to changes in org.springdoc after Spring Boot 2.3.x upgrade

Functioning Ref Data Service

Feature Request

Description of Problem:

Create functioning reference data service which adheres to the advertised spec and returns securities or can validate individual security given a simple ticker (XXX).

8 April 2024 - TraderX Meeting Agenda

Date

8 April 2024 - 8 am EST / 1 pm GMT

Previous Meeting

22 March 2024 - TraderX Meeting Agenda

Untracked attendees

Meeting notices

  • FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

  • All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

  • FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact [email protected] with any questions.

  • FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

  • Convene & roll call (5mins)
  • Display FINOS Antitrust Policy summary slide
  • Review Meeting Notices (see above)
  • Approve past meeting minutes ( #141 )
  • Introductions
  • New issues
  • FDC3 Hackathon end of Q2 (@maoo )
  • Milestones review (add issues to milestones)
  • AOB, Q&A & Adjourn (5mins)

Discussed Points

  • @psmulovics - raised opportunity to create a cross-project milestone (E.g. for OSSF June/LN, or OSSF Nov /NY) for tracking things we want to get done by the events.
  • Reviewed #133 - Agreed it's not top priority but good opportunity for outside contribution.
  • Discussed http://app.moderne.io - and updating FINOS (not just TraderX) code using OpenRewrite recipes. NOTE: I had Moderne add the whole FINOS org to their list of open source orgs they keep ready for analysis and modification.
  • Discussed CDM/TraderX - integration / experiments.

Next Steps:

  • Add C4 Diagram thumbnail and other architecture/flow links to main README as an interim step for enhanced documentation (Open a new issue)
  • @tomhealey-icma and @maoo to explore integrating CDM/TraderX in a branch environment - for #140
  • @rocketstack-matt - in Architecture as Code SIG - What are the next steps?
  • Solicit volunteers to build the website/Documentation / #133
  • @psmulovics discovered that the .NET code for People Service is not up to date. Will create an issue to update it.

Zoom Details

Join by Phone

Remove ag-grid from angular web-front-end

Feature Request

Description of Problem:

We would like to keep our front-end tech simpler at the outset, and we should be able to use a vanilla angular or bootstrap component for this.

Potential Solutions:

TBD

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.