Skip to content

General Architecture

Chris Laskey edited this page Apr 18, 2019 · 5 revisions

General Architecture

Artemis is built on Elixir and Phoenix and uses an umbrella application architecture. It contains the following applications:

apps
|- artemis
|- artemis_api
|- artemis_log
|- artemis_pubsub
|- artemis_web
\- release_manager

Application Details

artemis

Core business logic and database. Exposes generic Contexts other applications can use to interact with data resources like:

ListCustomers
CreateCustomer
ShowCustomer
UpdateCustomer
DeleteCustomer

Other applications can use these to read and write data. Other applications should never interact with the database directly using Artemis.Repo or Ecto.Query calls.

It also contains all data synchronizers with external data sources like PagerDuty and ServiceNow.

artemis_pubsub

A simple application uses to publish events across the umbrella application. Allows each individual application to be decoupled by broadcasting events other applications can subscribe to. Uses Phoenix PubSub.

artemis_log

A dedicated application that listens for all auditable events and captures them in a dedicated database. Decouples audit information from the primary application in the artemis, allowing it to be have separate backup, archival, and storage policies than the rest of the application.

artemis_web

A web endpoint for the application. Handles user authentication using OAuth2 authorization code flows.

artemis_api

A GraphQL API endpoint. Handles user authentication using either existing OAuth2 token (from Web endpoint) or client credentials passed in a HTTP request header.

Clone this wiki locally