# ASAP::O - High performance distributed streaming platform

## Folder structure
 
### Microservices 
 - **authorizer** - authorization _(Go)_
 - **broker** - server for consumer clients _(Go)_
 - **discovery** - discovery service _(Go)_
 - **file_transfer** - file transfer service to deliver files to clients that have no access to storage _(Go)_
 - **receiver** - server for producer clients to send data to, also contains data server that is contacted by consumer clients to get data from cache _(C++)_ 
   
### Client libraries
  - **producer** - producer libraries _(C++, C, Python)_ 
  - **consumer** - consumer libraries _(C++, C, Python)_ 

### Docs & Tests
- **docs** - doxygen,sphinx and site documentation
- **tests** - automatic integration/e2e tests
- **docs/site/examples** - examples used for site     
- **examples** - some outdated examples, also used for automated tests, (todo: move it somewhere)    

### Auxiliary folders
- **common** -  stuff to be shared between microservices
- **CMakeIncludes**, **CMakeModules**, **install** - CMake stuff  
- **config** - to store various config files, also nomad jobs for tests
- **deploy** - Docker files for various images, Helm files, Nomad&Consul files

## Building

### Prepare dependencies

depending on configuration, you might need need curllib, mongoc, google tests

  - cd 3d_party/mongo-c-driver
  - ./install.sh $(pwd)
  - sudo make -C mongo-c-driver-1.17.2 install

  - back in the asapo-dir:
  - mkdir build
  - (cd build; cmake ..)

### With documentation

Need Doxygen >= [1.8.10](https://github.com/doxygen/doxygen/releases/tag/Release_1_8_11)
and sphinx

 - mkdir build
 - cd build
 - cmake -DBUILD_CPP_DOCS=ON _DBUILD_PYTHON_DOCS ..

### With tests

Need googletest >= [1.8.0](https://github.com/google/googletest/releases/tag/release-1.8.0)

 - mkdir build
 - cd build
 - cmake -DBUILD_TESTS=ON ..

The software is MIT licensed (see LICENSE.txt) and uses third party libraries that are distributed under their own terms
(see LICENSE-3RD-PARTY.txt)

### with non-standard 3rd party libraries paths
- cmake -Dlibmongoc-static-1.0_DIR=... -Dlibbson-static-1.0_DIR=...  -Dgtest_SOURCE_DIR=... -DLIBCURL_DIR=... ...

### compile
 - make -j 4
 
or compile specific target only, e.g. 
 - make -j 4 receiver