Skip to content

Datastores

Different datastore implementations are supported.

Name Details
inmem In-memory datastore implementation.️ This datastore implementation holds all items in memory for the lifetime of the process. There is no eviction, so growth is infinite with continued insertions. Do not use this in production.
dynamodb AWS DynamoDB datastore. This datastore implementation holds items in external DynamoDB tables.
mongodb MongoDB datastore. This datastore implementation holds items in an external MongoDB instance.

Configuration

Configuration can be set using the DATASTORE_IMPL environment variable in backend, which accepts one of inmem, mongodb as values.

DATASTORE_IMPL=inmem

Datastore implementations

In-memory implementation

The in-memory implementation is the default, and requires no additional configuration. Because it is in-memory, it does not share data between multiple instances of the application.

This datastore implementation holds all items in memory for the lifetime of the process. There is no eviction, so growth is infinite with continued insertions. Do not use this in production.

The following environment variables apply:

DATASTORE_IMPL=inmem

DynamoDB implementation

The DynamoDB implementation uses an external DynamoDB instance to store data. It requires valid AWS credentials and permissions.

The following environment variables apply:

DATASTORE_IMPL=dynamodb
DATABASE_NAME=CodeMetrics
AWS_REGION=us-east-1

Ensure the Code Metrics backend has the necessary AWS permissions (e.g. using IAM or AWS configuration files) to read (and optionally create) the relevant tables.

The IAM permissions required are:

dynamodb:CreateTable
dynamodb:DeleteItem
dynamodb:DescribeTable
dynamodb:DescribeTimeToLive
dynamodb:GetItem
dynamodb:PutItem
dynamodb:Scan
dynamodb:UpdateTimeToLive
Example IAM policy document This example IAM policy scopes access to tables with names in the format `CodeMetrics_*`, but you can be a specific as required by your environment.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1688577177960",
      "Action": [
        "dynamodb:CreateTable",
        "dynamodb:DeleteItem",
        "dynamodb:DescribeTable",
        "dynamodb:DescribeTimeToLive",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Scan",
        "dynamodb:UpdateTimeToLive"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:dynamodb:us-east-1:000000000000:table/CodeMetrics_*"
    }
  ]
}

MongoDB implementation

The MongoDB implementation uses an external MongoDB instance to store data. It requires configuration of the connection and authentication details for the MongoDB server.

The following environment variables apply:

DATASTORE_IMPL=inmem
DATABASE_NAME=code-metrics
DATABASE_URI=mongodb://code-metrics:changeme@localhost:27017

Caching

Certain metrics can be cached in the datastore, for rapid subsequent retrieval and reduction of API calls to the external data providers.

The cache is enabled by this environment variable:

LOOKUP_CACHE_ENABLED=true

Other, more specific cache settings are as follows:

Name Details Default
CACHE_REPO_LIST Cache the VCS repository names. true
PRECACHE_REPO_LIST Pre-cache the VCS repository names at startup. true
CACHE_PIPELINE_BUILDS Cache the pipeline build metadata. true
EXPIRY_SECONDS Time to cache data if it is for the current day. 3600
REPO_LIST_EXPIRY_SECONDS Time to cache the VCS repository names. 21600