Concurrency Viewer
Introduction
Available only on MibFront in ASP .NET Core, the concurrency viewer allows one to see if there are other users editing or viewing the current data displayed in the page.
Concurrency Micro-Service
The concurrency micro-service is required for this to work. It stores the user information needed to properly display which user is interacting with the data, and is available as a Docker image from Amazon ECR.
Enabling the service
The service is only distributed as a Docker image, and can be downloaded from the following URL as long as the user has the correct credentials:
873339144623.dkr.ecr.us-east-1.amazonaws.com/agile/mib-cms-microservices-concurrency
Sample docker-compose.yml:
version: '3'
services:
mibconcurrency:
image: 873339144623.dkr.ecr.us-east-1.amazonaws.com/agile/mib-cms-microservices-concurrency-alpine
restart: unless-stopped
ports:
- 80:80
environment:
- mibauthorizationclientconfig_default_serverurl=http://cmsauth
- mibcacheconfig_default_app=true
- MibConcurrencyConfig_default_SlidingExpirationTime=00:05:00
Configurations
It needs the following configuration files or equivalent environment variables:
MibConcurrencyConfig (not all settings are required)
<?xml version="1.0" encoding="utf-8"?>
<mibConfig>
<default>
<slidingExpirationTime>00:04:00</slidingExpirationTime>
<inMemoryExpirationScanFrequency>00:10:00</inMemoryExpirationScanFrequency>
<userIdCacheExpirationTime>00:01:00</userIdCacheExpirationTime>
</default>
</mibConfig>
MibAuthorizationClientConfig
<?xml version="1.0" encoding="utf-8"?>
<mibConfig>
<default>
<serverurl>https://auth-url</serverurl>
</default>
</mibConfig>
MibCacheConfig
<?xml version="1.0" encoding="utf-8"?>
<mibConfig>
<default>
<app>true</app>
</default>
</mibConfig>
Configuration Files
Some configuration files are required to set the address of the concurrency micro-service.
MibCmsFrontEndServerBaseConfig
<?xml version="1.0" encoding="utf-8" ?>
<mibConfig>
<default>
<userConcurrencyServiceUrl>http://concurrency.microservice.example.org</userConcurrencyServiceUrl>
<userConcurrencyPollingTime>00:00:10</userConcurrencyPollingTime>
</default>
</mibConfig>
Media-type resolution per component
Each concurrency link (/api/v2/concurrency/{pageKey}/link, refresh-link, viewers) is grouped by componentKey. The BFF resolves every component's media type before forwarding to the micro-service: it reads the component's MEDIATYPE template configuration and maps it to a MIB index. When a component has no MEDIATYPE configured, its links are skipped — the component is simply not tracked for concurrency.
EPG component fallback
The EPG component is configured through GRID_CONFIGURATION and does not necessarily declare a MEDIATYPE; the EPG grid itself falls back to the EPG_SCHEDULE media type in that case. Concurrency mirrors that fallback: for the EPG component, when MEDIATYPE is empty the link is resolved against the EPG_SCHEDULE media type instead of being dropped, so viewers and editors are tracked on the EPG page.
The fallback is fail-soft: if the EPG_SCHEDULE media type is not provisioned on the instance, the EPG link is skipped rather than failing the request. The fallback applies only to the EPG component — other components with an empty MEDIATYPE remain untracked, and a component configured with a media type that does not exist still surfaces the error (misconfiguration is not masked).