Systems

Systems provide a way to represent Components that combine to form a unified whole or function. For example, an online retailer may have a “Checkout” System that comprises several Components working in unison. Systems are composed of Components. Utilizing Systems allows you to group together all of the Components that combine into a single unit so you can quickly see how these Components are performing.

When should I use a System instead of a Domain?

Systems should be used to group together Components that combine to form a single unit. Ideally, the personas that would make most use of Systems are Engineering Managers and Platform Operators who want a quick view into how the Components that make up their Systems are performing.

Creating Systems

Systems can be created by navigating to the Systems List page. This page can be accessed under Catalog within the side navigation.

Systems Menu

Systems Menu

If there are no active Systems within your OpsLevel account, you will see an empty state prompting you to create your first System.

Systems Empty State

Systems Empty State

You can create a new System by either clicking this prompt or by clicking the New System button. Upon clicking this button, a new modal will open up prompting you to fill out the following details for your System:

  • Name (required)
  • Owner
  • Domain
  • Description
Add System Modal

Add System Modal

Clicking Create will create your new System and add it as a new row on the table.

Systems List Page

Systems List Page

Systems Details

Clicking on a System from the Systems List page will bring you to the Systems Show page for that System. This page provides a bunch of details surrounding your System including:

  • Who owns the System
  • What tags are applied to the System
  • Size of the System (Components, Teams, Users)
  • Summary of the Maturity Report for the Components contained by the System
Systems Show Page

Systems Show Page

If you want to include more details about your System (what it is, how it functions, etc) you can click on the Notes tab and fill them out via the markdown editor.

How are the Components, Teams, and Users that fall under a System determined?

When you access the Systems Show page for a System, one of the first things you'll see is a count of all the Components, Teams, and Users that fall under that System.

Component Count

This simply counts the number of Components the System contains. See instructions on how to add Components to Systems below.

Team Count

This is a count of all the Teams that own the Components that the System contains.

User Count

This is a count of all the Users that exist in the Teams that own the Components that the System contains.

Adding a Child Component

You can add a child Component(s) to your System by navigating to the Components card at the bottom of the Systems Show page. Clicking Add Components will open a modal where you can search through and select and existing Component(s) to be added as a child for your System.

Add Service Modal

Add Components Modal

Clicking Add Components will add that Component(s) to the table in the Components card

Service Table

Component Table

Note: A Component can only have one parent System. If a Component already has a parent System you will not be able to select it from the dropdown.

You can also add a Component to a System via opslevel.yml.

Filtering by Systems

You can use Filters to easily see which Components fall under a given System and quickly write Checks or run Campaigns against those Components.

Filtering Systems

Filtering Systems

In the above example, OpsLevel will filter down to all of the Components that meet the following criteria: their Framework is "Rails" AND the System they fall under is "Cart".

Reporting by Systems

You can utilize the Maturity Report to easily see how the Components that fall under a given System(s) are performing. The reports table has a System dropdown option which can be selected to view the Maturity Report for one or many Systems.

Maturity Report for Systems

Maturity Report for Systems

Example: Creating Systems outside of the UI

In addition to creating Systems via the UI, you can also create Systems using the:

  • GraphQL API
  • Terraform Provider
  • Command Line Utility

all are options for configuring and maintaining your Systems. Below is an example of using the OpsLevel CLI to create a new System:

cat << EOF | opslevel create system -f -
name: "My System"
description: "Hello World System"
owner: "Z2lkOi8vb3BzbGV2ZWwvVGVhbS83NjY"
parent:
  alias: "alias of domain"
note: "Additional system details"
EOF

Note: "Owner" in this example is an ID for a team or group.

Example: Creating a System via Existing Tags

Many of our customers have already been modelling Systems via tags. The OpsLevel CLI can be utilized to convert existing tags into Systems. For example, let's say you've been using a key-value pair of "system:x", "system:y" as part of a tag. The following command will create a series of Systems based on the tag value it finds:

for SYSTEM in $(opslevel list services -o json | jq '.[] | .tags.Nodes[] | if .key == "system" then .value else empty end' | uniq)
do
    cat << EOF | opslevel create system -f -
name: ${SYSTEM}
EOF
done

Example: Creating a System via "Product" Field

Many of our customers have already been modelling Systems via the "Product" Field under Services. The OpsLevel CLI can be utilized to convert this field into a System. For example:

for SYSTEM in $(opslevel list services -o json | jq 'map(if .product != null then .product else empty end) | .[]' | uniq)
do
    cat << EOF | opslevel create system -f -
name: ${SYSTEM}
EOF
done