buildit / icarus

Serverless project for monitoring various repositories and productivity tools
Apache License 2.0
4 stars 2 forks source link
nodejs serverless typescript

Icarus

This project is mostly a technology demonstrator, using AWS Lambda to collect data about user activity for later processing. The ultimate goal should be collecting enough data to feed a ML process. At the moment only a simple aggregate data read-model is created.

The current implementation uses Slack as primary user identification, and connects to Github and Dropbox to receive events about user activities. Users must log in using a connected Slack Team id and authorise Dropbox and Github to have their activity analysed.

More tools may be easily integrated, as long as they support OAuth2 and some form of webhook to notify events.

No sensitive information is gathered from Dropbox (filename, content). Only information avaiable to any Github Organisation or Repository user (depending were webhooks are connected) are collected

A simple frontend SPA is provided, to let the user authenticate with Slack, Dropbox and Github

Technology stack

The project runs entirely on AWS and uses the following services:

The runtime is Node.js using TypeScript code for the Lambda and JavaScript for the simple frontend.

The project uses Serverless toolkit.

A Travis CI manifest is provided.

AWS setup

See detailed info about AWS requirements and setup

Attention: no expensive resource is used by this project, but many of them are not in any free tier. Also, it costs money if you keep the database instance running.

Development lifecycle

See detailed info about development lifecycle, deployment and cleanup

CI/CD

Build manifest and build scripts are available for setting up Travis CI. See detailed docs for setting up Travis.

Public URLs

See alsop DNS domains

More documentation

Known Issues and Limitations

Disclaimer

This project is meant to be an experiment, not a reference implementation for Lambdas nor an example of how to write idiomatic Typescript.