Compass
Compass is an integral component of Pioneer feature flag management. Compass consists of a user interface built on React, and a Node.js backend. For more information, visit Pioneer's case study page.
#
Run locallynpm install
in both the client
and server
directories.
From server directory, npm run dev
.
The front-end of the app is now available at localhost port 3000
.
#
To connect with nats serverEnsure Docker is running then docker pull nats
to pull nats server.
To run server in detached mode: docker run -d --name nats-main -p 4222:4222 -p 6222:6222 -p 8222:8222 nats --js
Note that Pioneer uses Nats JetStream, hence the --js
flag above.
To stop the docker container when finished with server:
// get container IDdocker psdocker stop <container ID>
#
Connecting to DBAn instance of postgres needs to be run in a docker container on port 5432
. The docker-compose.yml
and init.sql
files are within the docker
directory of this repository.
#
Server-side#
API endpoints implemented server-sideGET /flags
#
Example response:
{ "flags": [ { "id": 1, "title": "LOGIN_MICROSERVICE", "description": "Redirects users to the login microservice", "is_active": false, "version": 1, "rollout": 0, "updated_at": "2021-07-12T18:02:12.439Z", "created_at": "2021-07-12T18:02:12.439Z" }, { "id": 34, "title": "this is a testing flag!", "description": "log this event, app!", "is_active": false, "version": 1, "rollout": 60, "updated_at": "+053499-03-12T04:49:28.999Z", "created_at": "2021-07-12T18:02:32.081Z" } ]}
GET /flags/:id
#
Returns an object containing the flag object as well as an array of events associated with that flag.
Example response:
{ "flag": { "id": 1, "title": "LOGIN_MICROSERVICE", "description": "Redirects users to the login microservice", "is_active": false, "version": 1, "rollout": 0, "updated_at": "2021-07-18T16:18:42.369Z", "created_at": "2021-07-18T16:18:42.369Z" }, "eventLog": [ { "id": 1, "flag_id": 1, "title": "LOGIN_MICROSERVICE", "description": "Created new flag: LOGIN_MICROSERVICE", "created_at": "2021-07-18T16:18:42.379Z" } ]}
POST /flags
#
Successfully creating a flag with POST
will also create a new event log entry. Note that the title is the only required field. All flags are initially created in an 'off' toggle state.
Example request:
{ "flag": { "title": "testing_flag", "rollout": 5, "description": "testing out flag creation" }}
Example response:
{ "flag": { "id": 37, "title": "testing_flag", "description": "testing out flag creation", "is_active": false, "version": 1, "rollout": 5, "updated_at": "2021-07-19T16:42:28.483Z", "created_at": "2021-07-19T16:42:28.483Z" }}
PUT /flags/:id
#
Successfully updating a flag with PUT
will create a new entry in the event log.
Example request:
{ "flag": { "title": "new title", "is_active": false, "rollout": 55, "description": "adding a more descriptive text here.." }}
Example response:
{ "flag": { "id": 34, "title": "new title", "description": "adding a more descriptive text here..", "is_active": false, "version": 1, "rollout": 55, "updated_at": "+053499-06-18T05:00:09.999Z", "created_at": "2021-07-12T18:02:32.081Z" }}
DELETE /flags/:id
#
When a flag is deleted, a new event log item will be generated.
Example response:
{ "id": "35"}
GET / logs
#
Returns an array of event logs related to all flags.
Example response:
[ { "id": 1, "title": "this is a testing flag!", "flag_id": 34, "description": "Flag created.", "created_at": "2021-07-12T18:02:32.098Z" }, { "id": 2, "title": "this is a testing flag!", "flag_id": 34, "description": "Updated flag: 'this is a testing flag!'", "created_at": "2021-07-12T20:17:48.772Z" },]
#
TestsTo run tests, run npm test
from the /server
directory.