Code By
Lucas Mouilleron

An Open Source selection - 71 projects
Private repositories are not fully showcased for obvious reasons :)
View only public projects

TSDataCenter

Java 66% - HTML 17.6% - Python 16.1% - PHP 0.1% - Shell 0.1% - Dockerfile 0.1%
Last update : 10/07/2021 - 20:44
TSDataCenter software.
Project is private, can't show more.

TSAnalysisWorldArchive

Python 99.4% - CSS 0.4% - Mako 0.1% - Shell 0.1%
Last update : 10/07/2021 - 10:14
Analysis framework. Archive.
Project is private, can't show more.

TSSandBox

Jupyter Notebook 53.1% - Python 46.9%
Last update : 10/07/2021 - 10:12
Project is private, can't show more.

TSDeGama

Python 96.4% - CSS 2.4% - Shell 0.9% - Dockerfile 0.3% - Smarty 0%
Last update : 10/07/2021 - 10:09
Interactive analysis framework.
Project is private, can't show more.

TSMagellan

Python 97.8% - Shell 1% - CSS 0.9% - Dockerfile 0.4%
Last update : 10/07/2021 - 10:03
TSMagellan environment. Main software, scripts and docs.
Project is private, can't show more.

TSMarcoPoloRunManager

Java 100%
Last update : 10/07/2021 - 09:59
Project is private, can't show more.

TSMarcoPolo

Java 100%
Last update : 10/07/2021 - 09:59
Project is private, can't show more.

TSEquityStudy

Python 99.9% - CSS 0.1%
Last update : 09/07/2021 - 21:32
Project is private, can't show more.

TSColumbus

Python 91% - Java 2.7% - HTML 2.6% - Shell 2.4% - CSS 0.7% - Dockerfile 0.6%
Last update : 01/07/2021 - 09:19
Project is private, can't show more.

+ watchTower

Python 55.2% - JavaScript 18.7% - Java 10.7% - HTML 6.4% - CSS 5.8% - Dockerfile 2.5% - Shell 0.6%
Last update : 01/07/2021 - 08:15

Screenshot

A simple yet powerful watchtower service.
Heartbeat monitoring + event aggregator.

Hearbeat definitions

  • The server is in charge of monitoring services
  • When a service is considered dead, the server then alerts its owner
  • A service is a pulsing agent
  • A pulse is a sign of aliveness
  • When a service pulse the server, it tells him when he will pulse again in the worst case
  • If the service has not pulsed again in time, the server considers the service dead and alerts its owner
  • When a service is no longer required, it must inform the server to avoid a false dead alerts
  • An alert can be a mail, a pushover message, etc.
  • Pings can also be configured. In that case, the server regularily pings the service via http or ping with or without proxies.

Event definitions

  • The server is in charge or recieving events
  • When a service sends an event, the server stores it
  • On demand, events can be retrieved for consultation
  • An event is: service + message + level + date of registration

Implementation

  • HTTP client / server architecture
  • All queries protected by password set in HTTP headers under "password"
  • Heartbeat protocol:
    • Pulse:
      • POST /
      • {"service":"SERVICE_NAME","alertType":"ALERT_TYPE","alertTarget":"TARGET_NAME","nextIn":EXPECTED_NEXT_HEARTBEAT_IN_SECS}
    • Cancel:
      • DELETE /
      • {"service":"SERVICE_NAME"}
    • List:
      • GET /
  • Event protocol:
    • Add:
      • POST /add-event
      • {"service":"SERVICE_NAME", "level":"level", "message":"the message"}
    • List:
      • GET /list-events
      • optional params: service (is), from (above), to (below), level (above), message (contains)

Server

  • ./server
  • python3
  • Dependencies: pip install -r requirements.txt
  • Config:
    • config/config.json: main config (cp config/sample.json config/config.json)
    • config/server.crt, config/server.key: SSL certificate, used only if SSL activated
  • Datas: data
  • Deploy:
    • Optionnaly define pyenv-virtualenv: pyenv virtualenv -f 3.6.8 watchTower
    • Install dependencies: pip install --upgrade pip ; pip install -r requirements.txt
    • Setup config
    • Generate ssl certificates (optional)
    • Hook in with upstart (optional, ./server/config/sample.upstart.conf, http://upstart.ubuntu.com/getting-started.html)
  • Run: python server.py
  • Docker:
    • ./docker
    • Config: place server config files in ./docker/config
    • Interactive: cd docker && tools/dockerBuild && tools/dockerRun
    • Detached: cd docker && tools/dockerBuild && tools/dockerRunDetached

Server GUI

  • https://hostname.com:443/gui

Java Client

  • ./clientJava
  • Java 7+
  • No dependencies
  • Run test:

Python Client

  • ./clientPython
  • python3
  • Dependencies: requests (pip install requests)
  • Run test: python test.py

Javascript client

  • ./clientJavascript
  • client.js is a node module
  • Dependencies: packages.json -> devDependencies (npm install)
  • Run test: node test.js
  • Run test in browser: browserify test.js -o bundle.js and open test.html in browser

Certificates

  • Self signed: openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
  • Letsencrypt: TODO

TODO

  • Put data writing in a queue
  • Put alert sending in a queue
  • (Way) better events persister