Knowledge Base Administration Guide

simscope.config — Simscope Configuration

Simscope server is configured via a text configuration file, and loaded when the Simscope server process starts.

This file can be placed anywhere on disk, and is generally named simscope.config.

Changing simscope.config

Simscope reads the simscope.config file one time, as the server is loaded.

  • If you change the configuration file, you must restart the Server for Simscope to use the new configuration.

Sample Simscope configuration

Save this to a file called simscope.config

Note: You can click the paper clipboard icon on the right corner → to copy this to your clipboard.

# Simscope configuration file (simscope.config)
# > https://admin-docs.simscope.com/server/simscope-config.html

# Project registrations (note that Components are registered automatically during import)

[project "alpha"]
defaultbranch = "main"

# Optional: restricted projects (limit access to users in a specific user group)
group = ""

# Workspace path is optional: for groups not using GitHub/Gitlab/Bitbucket
#workspacepath = "/path/to/workspace"
# Alternative: if you are using server-based URL's, like SVN:
# workspacepath = "https://github.com/octo-org/octo-docs"

# optional: Parent Project (if this is a derivative project, sharing a common repository for commits/rules)
# parentproject = "beta"

# Commit URL creates an HTML hyperlink to an external website for changelists.
# The %(id) is a variable will automatically be replaced with Commit ID/SHA by Simscope.
# commiturl = "http://jira/proj/commits/%(id)"

# Template for GitHub (replace COMPANY/PROJECT variables):
# commiturl = "https://github.com/COMPANY/PROJECT/commit/%(id)"

# Template for GitLab (replace COMPANY/PROJECT variables)
# commiturl = "https://gitlab.com/COMPANY/PROJECT/-/commit/%(id)"

# Template for Bitbucket (replace COMPANY/PROJECT variables)
# commiturl = "https://bitbucket.org/COMPANY/PROJECT/commits/%(id)"

# Template for Azure (replace ORGANIZATION/PROJECT/REPO variables)
# commiturl = "https://dev.azure.com/ORGANIZATION/PROJECT/_git/REPO/commit/%(id)"

# Enable this if your group wants to hide the "Global" signature state from users (and only show filtered state)
#hideglobalstate = true

# Nag Emails enables automatic nagging for users, where rules need to be resolved
#nagemails = true

[project "beta"]
defaultbranch = "main"
# Workspace path is optional: for groups not using GitHub/Gitlab/Bitbucket
#workspacepath = "/path/to/workspace/"

# Commit URL creates an HTML hyperlink to an external website for changelists.
# The %(id) is a variable will automatically be replaced with Commit ID/SHA by Simscope.
# Template for GitHub (replace COMPANY/PROJECT variables):
# commiturl = "https://github.com/COMPANY/PROJECT/commit/%(id)"

[tests]
testgroupfield = "group"

# If you want testname and testargs
#testnamefield = "test_name"
#testargsfield = "test_args"

# Interval between automatic snapshot of weekly metric charts.
# Reduce this if you want more up-to-date weekly charts (at the expense of more server computation).
metricsreindexhours = 6

# Enable signature triage index (enables build/testgroup search from signatures, and triage charts)
sigtriageindex = true

# Optional: add Job columns to Test List Search Table.  Separate columns by commas.
# testlistautometadata = "user,cycles"

[sigs]

# Maximum number of Signature Job categories (for future growth)
maxcategories = 100

# Signature Job categories
# Docs: https://admin-docs.simscope.com/job/#category

# Format: "CATEGORY:CATEGORYID"
categories = "sim:1"
categories = "compile:2"

# Examples: any other job categories (fpga, emulation, generates, lint, etc)
#categories = "gen:X"
#categories = "emu:X"
#categories = "fpga:X"
#categories = "lint:X"
#categories = "synth:X"

# If you want to store "skip" job results, enable this variable.
# NOTE: enabling skip job tracking reduces the limit of job categories to 5 (instead of 9).
# Documentation: https://admin-docs.simscope.com/job/job-skip-json.html
#
# enableskip = true
#
# Optional: rename the skip field in display
# renameskip = "Unwritten"

# Enable Live Jobs
# > https://admin-docs.simscope.com/job/job-live-json.html
# enablelivejobs = true

# If Live Jobs are enabled and regressions time out or finish with live jobs pending, migrate them to this fail signature.
# (Note: this also requires enablelivejobs = true)
livetimeoutsignature = "LIVE Job Timeout or Missing"

# Default job sort order (when viewing/searching lists of jobs).
# By default, jobs are ordered by "runtime" (ie shortest first)
# defaultjobsort = "runtime"
# (To disable automatic job sorting in Signature view, set this to "off")
# defaultjobsort = "off"

# Signature title auto-replacer to make signature errors easier to read by users
# within the HTML GUI.
# For example, if every signature starts with UVM_ERROR, we can hide it like this:
# BEFORE > "UVM_ERROR mismatch value ..."
# AFTER  > "mismatch value ..."

titlematch = "^FAIL|UVM_ERROR|UVM_FATAL"
titlereplace = "."

# Advanced: Simscope's builtin Signature Error Bucketizer can be turned off if you have your own
# Turn off bucketizer (not recommended)
#bucketizer = "off"

# Default bucketizer
#bucketizer = "v1"

# Latest signature bucketizer, with customizable hierarchy
bucketizer = "v2"

# Signature classifications
defaultclassification = "func"

classifications = "infra"
classifications = "assert"
classifications = "timeout"

# Enable dynamic signature classifications.
# Dynamic classifications enables setting a signature classification with any string value
# during job import.  As opposed to being limited to the pre-defined classification list.
# classificationsdynamic = true

# Signature priorities (allows sorting of signatures by priority)
# priorities = "Low:1"
# priorities = "Medium:3"
# priorities = "High:5"

# Check every regression fail against rule templates
# alwayschecktemplates = true

# Optional plugin to run on the job details page (for example, this could be a job log parser)
# NOTE: this plugin only runs for 'fail' jobs, unless you also enable 'jobdetailspluginpass'
#jobdetailsplugin = "bin/simscope-job-details"
#
# Enable this to run the job details plugin on all jobs (instead of fail-only)
#jobdetailspluginpass = true

# Optional: change the order/layout of the Signature job table columns (job fields)
# NOTE: you can also add 'metadata' columns if you want to display them
#jobtablecolumns = "time,message,component,branch,model,build,testgroup,attributes,runtime,cycles,state,assignee,issue,config,regr,cps,seed,host,user"

[regr]
checkalias = true

# If you want to turn off duplicate job discard warnings, uncomment this line
#warnduplicate = false

# Auto timeout is a regression watchdog, where LIVE regressions will automatically be marked
# as finished, if there are no jobs updates in a regression for this many hours.
# This is to handle runaway/lost/killed regressions, so regressions do not show a
# LIVE tag forever.
# See docs at:
# > https://admin-docs.simscope.com/regression/live.html?#live-regression-automatic-timeout
autotimeouthours = 12

# Maximum number of NEW signatures allowed per regression (overflow triggering).
maxnewsignatures = 25

# Series separator the character between Regression Series Name/Number.
#
# Examples:
# - if a standard regression is "myrun/123", set this value to "/"
# - if a standard regression is "myrun:123", set this value to ":"
# - if using Jenkins default configuration, set this to "-"
#
# Note: To resolve ambiguity, Simscope uses the right-most location of the separator
#       for splitting.  For example using slash as separator:
#       > "myrun_smoke/alpha/500" will be split as: {"myrun_smoke/alpha", "500"}
#
seriesseparator = "/"

# Optional: regression metadata units.
# See docs:
# > https://admin-docs.simscope.com/regression/custom-metadata.html
#metaunit = "disk_usage_mb:MB"
#metaunit = "total_transactions:k transactions"

# Optional: show additional regression metadata columns in the Regression search table.
# See docs:
# > https://admin-docs.simscope.com/regression/custom-metadata.html
#tablemeta = "P4 Changelist"
#tablemeta = "disk_usage_mb"
#tablemeta = "license_seats_used"
#tablemeta = ".Coverage %"

# Enable this to turn on a [Builds] column in the Regression search table, showing which builds
# are contained in each regression.
# tablebuilds = true

# Display Regression Tool Version as a string, instead of a model link (SHA)
# toolversionstring = true

# Regression diff plugin (GitHub, Gitlab, Bitbucket).  See docs at:
# > https://admin-docs.simscope.com/regression/regression-diff.html
# [regrplugin "diff-github"]
# title = "GitHub Diff"
# command = "PATH/simscope-regr-web-diff"

[chart]
# Enable daily checks (occur once per day).
# NOTE: this time is used for Regression Watch, Signature Watch, and Daily Charts.
autocheckschedule = "07:00 CST"

# Financial number scale: when enabled, abbreviate large numbers in charts using a
# financial-scale, instead of metric-scale.
# Example abbreviation: '1.24 B' (billions) instead of '1.24 G' (giga).
# Note: financial scales are automatically ignored when rendering byte-based units (e.g. 'GB')
# financialnumbers = true

# Optional: switch the Simscope homepage/status page to use sparkline charts instead of heatmaps
# statuslinechart = true

# Optional: add summary rows under heatmaps, to indicate the number of unique elements in each column
# heatmapsummary = true

# Optional: set default URL filters for the homepage (affecting the treemap and statistics)
# Example: only show homepage stats for 'release' regressions
# homepagefilters = "regr=release"

# Example: only show homepage stats for 'mainline' branch
# homepagefilters = "regr=smoke&branch=mainline"

# Set the maximum number of chart X-axis columns in a single chart, when using non-time-based X-axes.
# For example, if (X-axis = modelversion), this is the maximum number of X-axis model versions.
# If the chart hits this limit, all subsequent X columns will be merged into a special
# column named "(overflow: all other columns)".
# maxcolumns = 300

# Component Dashboard Templates enable one or more custom dashboards on the Component
# details page.
#dashboardtemplate = "userid/Template Dashboard Name"
#dashboardtemplate = "userid/Another Dashboard"

# Component Dashboard Metadata Widgets
# Regex pattern to match metadata regression fields and display as a large numeric widget
#dashboardwidgetmetadata = "total|Total"

# Enable filtering by queue on charts (replaces the user filter)
# queuefilter = true

# Custom Chart Heatmap Color Scales
# This lets you customize chart heatmap colors.
# See docs for more details:
# > https://admin-docs.simscope.com/metrics/custom-heatmap.html?#example-custom-heatmaps

#  [heatmap "Global"]
#  # Pass/Fail colors: black => red => orange => yellow => green
#  color = "0.0   #000000"  # black
#  color = "0.001 #262626"  # almost-black
#  color = "0.1   #555555"  # dary gray
#  color = "0.5   #c12302"  # rich red
#  color = "0.7   #fb964c"  # orange
#  color = "0.85  #f4f86f"  # yellow
#  color = "0.92  #d6f89d"  # light greenish
#  color = "0.999 #8af16e"  # medium green
#  color = "1.0   #31e751"  # bright green (perfect score)

#  [heatmap "Red"]
#  # Linear single-color gradient (white to red)
#  color = "0.0   #ffffff"  # white
#  color = "1.0   #fa0000"  # red
#  # noblend turns off blending between colors (and use the highest color matching)
#  noblend = true

[commitid]
enable = true

# Abbreviate model IDs/SHAs (only for hash-based systems like Git and Mercurial).
# This shortens a hash like "abcdef123456789" into "abcdef1..." for display.
abbrev = 7

# If using Perforce or SVN (or if you want to disable model ID abbreviation), set this to 0.
# abbrev = 0

# Exact Model Search *disables* fuzzy model searches.
# If using Perforce or SVN, enable this.  For Git/Mercurial, this should be false (default value).
#exactmodelsearch = true

#commitinfo = "bin/simscope-hg-commit-info '%(commitid)' '%(branch)' '%(workspacepath)' '%(project)'"

# Fix Info is an optional plugin, which is invoked during Rule Fix, to find a Fix changelist (ie SHA)
#fixinfo    = "bin/simscope-hg-commit-info '%(commitid)' '%(branch)' '%(workspacepath)' '%(project)'"

# If storing all changelists within Simscope, this flag enables resolving via the internal changelist database
searchchangelistdb = true

# Rabbit MQ configuration
[rabbitmq]
# RabbitMQ URL parameters:
# - RABBIT_USERNAME: shared account username
# - RABBIT_PASSWORD: shared shared password
# - RABBIT_HOSTNAME: the rabbit server host
url = "amqp://RABBIT_USERNAME:RABBIT_PASSWORD@RABBIT_HOST:5672/"

# Alternative: if you are using amqps (ie SSL secured-amqp):
# url = "amqps://RABBIT_USERNAME:RABBIT_PASSWORD@RABBIT_HOST:5671/"

retrytimeout = "5s"

# For running in environments like Docker, where you may need multiple attempts to connect
# at startup, increase the number of startup attempts before giving up.
#startupattempts = 10

# Rabbit Health is a watchdog timer, to indicate basic health of the Rabbit connection.
# If there are no Rabbit messages received within 'health' duration,
# Simscope will show a warning, indicating a potential RabbitMQ problem.
# Production Simscope systems should set this to a lower value (ie 60m),
# whereas development Simscope systems may set it higher (ie 12h).
health = "24h"

# Send a notification email if RabbitMQ receives no data within the 'health' interval
healthnotify = true

# Minimum physical machine memory free percentage (notifications)
minmemorypercent = 10

# Simscope input queue to read from: (this value should match [tunnel.config] outputqueue)
inputqueue = "simscope-in"

durable    = true
autodelete = false
exclusive  = false

# SMTP email configuration
# > https://admin-docs.simscope.com/user/email.html
[email]
# Enable emails from Simscope
#enabled = true

# Sender is what emails from Simscope will show as the message "sender"
# NOTE: replace @COMPANY.com with your company domain name.
sender = "Simscope Triage <no-reply-simscope@COMPANY.com>"

# Email self: enables sending emails where the job assignment recipient is the same user as the session user.
# If false, Simscope will discard assignment emails sent to self-users.
emailself = true

# Administrator email address (Simscope will send administration notifications to)
adminaddr = "administrator@COMPANY.com"
# Note: you can have multiple Simscope administrator emails, like this:
# adminaddr = "user1@COMPANY.com"
# adminaddr = "user2@COMPANY.com"

# Option A: Unix config (unauthenticated)
#smtpaddr = "127.0.0.1:25"

# Option B: Authenticated email config (plain)
#smtpaddr = "smtp.company.com:587"
#smtphost = "smtp.company.com"
#smtpaccount = "user@account.com"
#smtpauth = "auth-credentials"

[rules]
# Hide Manual Assignments: prefer Rules instead Manual assignments.
hidemanualassign = true

[bugs]
# Bug autorefresh interval ("30m", "2h", etc).
# Note: this is only used if at least one [bugtracker] has a 'refreshplugin' set
# autorefresh = "60m"

# Auto resolve rules.  This enables automatic resolving of rules when a bug
# has been set to a fixed/resolved/closed state.
# See https://admin-docs.simscope.com/bugs/update.html
# autoresolverules = true

# Optional: auto-refresh script timeout.  Simscope will terminate scripts after this amount of time (to prevent hangs)
# (Default is 2 minutes.)
# autorefreshtimeout = "2m"

# Optional: auto-refresh bug batch size.  When auto-refreshing, Simscope splits the list of
# known bugs into batches, and calls the bug refresh script once per batch.
# (Default is 100 bugs per batch.)
# autorefreshbatchsize = 100

# ----------------------------------------
# Note about Python3 in simscope.config: if you want to customize the location of your
# Python interpreter, prefix the command with the Python location.
# For example:
# ### createplugin = "/my/path/bin/python3 /PATH/TO/simscope-jira-create.py"
# ----------------------------------------

# Note: "JIRA" is the title displayed in the user interface, this can be renamed per your preference.
# [bugtracker "JIRA"]
# NOTE: the official JIRA regex is here:
# https://community.atlassian.com/t5/Bitbucket-questions/Regex-pattern-to-match-JIRA-issue-key/qaq-p/233319
# example: SIM-12345
## regex = "[A-Za-z]+.[0-9]+"

# url = "http://localhost:9090/browse/%s"
# createplugin = "bin/simscope-jira-create.py"
# refreshplugin = "bin/simscope-jira-update.py --json %s"

# If enabled, uppercase changes bug numbers to always be in uppercase.
# uppercase = true

# Manual state: disables Javascript automatic-state-selection.
# If you want to disable Javascript from automatically changing assignment (triage)
# state to OPEN/NEW/ASSIGNED as bugs are typed, cleared, or users are assigned, set this
# config variable to true.
# manualstate = false

# ----------------------------------------

# Template for Azure DevOps workitems (replace ORGANIZATION)
## [bugtracker "ADO"]
## regex = "^[0-9]+$"
## url = "https://dev.azure.com/ORGANIZATION/_workitems/edit/%s"
## createplugin = "PATH/TO/simscope-azure.py --create-work-item --config=/CONFIG/simscope_azure_config.py"
## refreshplugin = "PATH/TO/simscope-azure.py %s --config=/CONFIG/simscope_azure_config.py"

[server]
# External Simscope server name (for email links)
serverurl = "http://simscope"

# Alternative (if using https proxy)
# See docs at:
# > https://admin-docs.simscope.com/server/https.html
#serverurl = "https://simscope.company.com:443"

# Alternative (if using IP addresses)
#serverurl = "http://10.8.0.1"

# Simscope server listen address: local network port
httpaddr = "localhost:8080"

# Enable Cross-Origin Resource Sharing (CORS) support (Javascript iframe support)
# This is tied to the "Access-Control-Allow-Origin" HTTP header.
# > https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
# corsorigin = "*"

# Copy license key file to your $SIMSCOPE_CONFIG directory.
licensepath = "$SIMSCOPE_CONFIG/simscope-COMPANY-NAME.lic"

regexcomponents = true

# To use Signature Diff in Simscope, you need to set a 'Word diff' command.
# NOTE: to download adiff.py:
# > wget https://raw.githubusercontent.com/agriffis/adiff/master/adiff.py

#worddiffcommand = "bin/adiff.py"
# NOTE: wdiff is ~10x faster than adiff, since it does not have to launch the Python interpreter
#worddiffcommand = "/usr/local/bin/wdiff"

# For enabling custom CSS styles
#customcsspath = "simscope/client/simscope-custom.css"

# Time Zone (server).  All charts/dashboards are displayed using Simscope Server Time Zone.
#
# List of Timezones
# > https:/e/en.wikipedia.org/wiki/List_of_tz_database_time_zones
#
# Note that DST (daylight saving time) is auto-truncated within Simscope.
# > DST is observed in certain regions of this time zone between the 2nd Sunday in March
# > and the 1st Sunday in November.

#timezone = "US/Central"
timezone = "US/Pacific"
#timezone = "UTC"
#timezone = "GMT"
#timezone = "CET" # Central Europe
#timezone = "Etc/GMT+5"

# Enabling Server Timestamps makes Simscope render display timesetamps in the server's timezone, irrespective of the client browser timezone.
# This disables dynamic Javascript timestamp behavior.
# (Note that Simscope charts are always rendered in the server timezone, regardless of this setting)
# servertimestamps = true

# Enable user group-based saved search sharing visibility.
# If enabled, the default search is private, but can be shared among other users too.
# > https://knowledge.simscope.com/saved-searches.html
enablesharing = true

# ProxyPaths enables file:// paths in regression metadata and job metadata to proxy through Simscope
# (for viewing log files, coverage reports, etc. directly from the web browser).
# See docs:
# > https://admin-docs.simscope.com/server/file-proxy.html
# proxypaths = "/proj/alpha/artifacts/"
# proxypaths = "/proj/beta/coverage/"
# proxypaths = "/proj/gamma/logs/"

# Custom job metadata fields
# See docs for more info:
# > https://admin-docs.simscope.com/server/job-metadata.html
metafields = "1:s:group"

# Enable if you want testname and testargs
#metafields = "2:s:test_name"
#metafields = "3:s:test_args"

# Custom job metadata examples
# Format:
# > ID:TYPE:FIELDNAME
# > ID:TYPE:FIELDNAME:UNIT (optional: for rendering charts with scaled units)

#metafields = "10:i:trans_count"
#metafields = "11:f:opacity"
#metafields = "12:s:cpu.fail_op"
# metafields = "13:i:disk_used_kb:KB" # Track disk usage per job (kilobytes)
# metafields = "14:i:peak_memory_mb:MB" # Track peak memory usage per job (megabytes)

# Automatic weekly Simscope database backup
#[backup]
#dir = "/PATH/TO/simscope-backup"

# NOTE: Simscope functional/formal coverage tracking is documented at:
# > https://admin-docs.simscope.com/coverage/
# [coverage]
# enabled = true
#
# Optional: Cover group separator to enable hierarchical tree grouping.
# This can be any string, and can also be multiple characters.
# - For example, cover group "a.b.c" with a groupseparator of "." would split into three hierarchical groups (a, b, and c)
# groupseparator = "."
#

# Optional: Coverage Sub-model separator: allow multiple coverage models in the same regression
#           (suffix splitting).
#           This uses the right-most value for splitting.
#
# Example parse using "." as coverage separator:
# > "myblock_smoke/123.top" => {"myblock_smoke", "123", "top"}
#
# Note to resolve ambiguity:
# > Simscope first splits regression name by the 'seriesseparator', and uses the remainder
#   for splitting coverage sub-models.
#
# Example parse (with seriesseparator = "/" and submodelseparator = "."):
# > "my.run/another/12345.alpha" => {"my.run/another", "12345", "alpha"}
#
# submodelseparator = "."
#
# To enable formal coverage property tracking, add these settings.
# enableformal = true
#
# For 'bounded' proof properties, set this to the minimum number of cycles for a bounded pass.
# Any undetermined property with cycles below this value is a fail.
# minimumcycles = 5

# NOTE: Simscope LDAP is documented at:
# > https://admin-docs.simscope.com/user/ldap.html
#
# [ldap]
# url="ldap://ldap.company.com:389"
# # For secure LDAPS
# #url="ldaps://ldap.company.com:636"
#
# basedn="dc=example,dc=com"
# userfilter="uid=%(uid)"
#
# LDAP session mode is a more secure LDAP authentication scheme, which does not store hashed authentication credentials, and requires re-authentication once sessions expire.
# enablesessions = true
#
# Optional: if your LDAP uses email addresses for usernames, enable this setting.
# allowemaillogin = true
#
# # If using Active Directory without a uid field, you may need to use
# #userfilter="sAMAccountName=%(uid)"
#
# # Mapping between Simscope Field and LDAP Fields
# # → Change the right-hand-side to your LDAP field names
# [ldapmapping]
# username="uid"
# fullname="cn"
# email="mail"

License File

The Simscope Server requires a license file to run. This file contains an issued license key, with an expiration.

This is an example fake license file:

"{\"product\":\"Simscope\",\"company\":\"ACME\",\"eval\":true,
\"expire\":\"2000-08-06T19:19:20.894125929-05:00\"}"|
48d39451e0f9e4ddd9bcdffd2002fa7f220f2600.bd70a6e44a9d15708e620b7a3f857a4feb633cea