From e9b60793af711bfd8ad53ad70d7327947fdee225 Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Mon, 23 Dec 2024 17:04:00 -0700
Subject: [PATCH 1/9] Combine GitHub Maven repositories to 1 wildcard
 repository to help with build times.

---
 .../jpo-deduplicator/settings.xml             | 28 +------------------
 1 file changed, 1 insertion(+), 27 deletions(-)

diff --git a/jpo-deduplicator/jpo-deduplicator/settings.xml b/jpo-deduplicator/jpo-deduplicator/settings.xml
index eaee228..2a4f90b 100644
--- a/jpo-deduplicator/jpo-deduplicator/settings.xml
+++ b/jpo-deduplicator/jpo-deduplicator/settings.xml
@@ -9,16 +9,6 @@
             <username>jpo_deduplicator</username>
             <password>${env.MAVEN_GITHUB_TOKEN}</password>
         </server>
-        <server>
-            <id>github_jpo_ode</id>
-            <username>jpo_deduplicator</username>
-            <password>${env.MAVEN_GITHUB_TOKEN}</password>
-        </server>
-        <server>
-            <id>github_jpo_geojsonconverter</id>
-            <username>jpo_deduplicator</username>
-            <password>${env.MAVEN_GITHUB_TOKEN}</password>
-        </server>
     </servers>
     <profiles>
         <profile>
@@ -27,23 +17,7 @@
                 <repository>
                     <id>github</id>
                     <name>GitHub JPO Conflict Monitor</name>
-                    <url>https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/jpo-conflictmonitor</url>
-                    <snapshots>
-                        <enabled>false</enabled>
-                    </snapshots>
-                </repository>
-                <repository>
-                    <id>github_jpo_ode</id>
-                    <name>GitHub JPO ODE</name>
-                    <url>https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/jpo-ode</url>
-                    <snapshots>
-                        <enabled>false</enabled>
-                    </snapshots>
-                </repository>
-                <repository>
-                    <id>github_jpo_geojsonconverter</id>
-                    <name>GitHub JPO GeojsonConverter</name>
-                    <url>https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/jpo-geojsonconverter</url>
+                    <url>https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/*</url>
                     <snapshots>
                         <enabled>false</enabled>
                     </snapshots>

From 730cf1d2f389e955c316602199d590c5509e2195 Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Mon, 23 Dec 2024 17:17:36 -0700
Subject: [PATCH 2/9] adding docker caching to github actions

---
 .github/workflows/docker.yml    | 4 +++-
 .github/workflows/dockerhub.yml | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index fb020e7..2a76f66 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -21,4 +21,6 @@ jobs:
             MAVEN_GITHUB_TOKEN=${{ secrets.MAVEN_GITHUB_TOKEN }}
             MAVEN_GITHUB_ORG=${{ github.repository_owner }}
           secrets: |
-            MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }}
\ No newline at end of file
+            MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }}
+          cache-from: type=gha
+          cache-to: type=gha,mode=max
\ No newline at end of file
diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml
index 00e2704..0dea5d5 100644
--- a/.github/workflows/dockerhub.yml
+++ b/.github/workflows/dockerhub.yml
@@ -36,4 +36,6 @@ jobs:
             MAVEN_GITHUB_TOKEN=${{ secrets.MAVEN_GITHUB_TOKEN }}
             MAVEN_GITHUB_ORG=${{ github.repository_owner }}
           secrets: |
-            MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }}
\ No newline at end of file
+            MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }}
+          cache-from: type=gha
+          cache-to: type=gha,mode=max
\ No newline at end of file

From 96d72345a3ab859a4f3adf59cf39fa8db3e1b3b4 Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Thu, 2 Jan 2025 09:59:08 -0700
Subject: [PATCH 3/9] adding missing cm topic

---
 jikkou/kafka-topics-values.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/jikkou/kafka-topics-values.yaml b/jikkou/kafka-topics-values.yaml
index 0ddb483..422d577 100644
--- a/jikkou/kafka-topics-values.yaml
+++ b/jikkou/kafka-topics-values.yaml
@@ -155,6 +155,7 @@ apps:
       - topic.CmSignalStateConflictNotificationAggregation
       - topic.CmSpatTimeChangeDetailsNotificationAggregation
       - topic.CmEventStateProgressionNotificationAggregation
+      - topic.CmEventStateProgressionNotification
     customTopics: {}
   deduplicator:
     name: jpo-deduplicator

From 76699cf15269191b1ec72a6924cb41a759ea7640 Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Wed, 8 Jan 2025 15:11:49 -0700
Subject: [PATCH 4/9] sets default credentials in sample.env for required
 variables

---
 README.md  | 16 +++++++++++++---
 sample.env | 12 ++++++------
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index ea2e9d4..4f03f12 100644
--- a/README.md
+++ b/README.md
@@ -21,10 +21,11 @@ The JPO ITS utilities repository serves as a central location for deploying open
     - [Configuration](#configuration)
     - [Configure Kafka Connector Creation](#configure-kafka-connector-creation)
     - [Quick Run](#quick-run-2)
-  - [5. Deduplicator](#5-jpo-Deduplicator)
-    - [Deduplication Configuration](#deduplication-config)
-    - [Github Token Generation](#generate-a-github-token)
+  - [5. jpo-deduplicator](#5-jpo-deduplicator)
+    - [Deduplication Config](#deduplication-config)
+    - [Generate a Github Token](#generate-a-github-token)
     - [Quick Run](#quick-run-3)
+  - [Security Notice](#security-notice)
 
 
 <a name="base-configuration"></a>
@@ -256,3 +257,12 @@ For local development the following steps are also required
    4. You should now see only one copy of the map message sent. 
 
 [Back to top](#toc)
+
+## Security Notice
+
+While default passwords are provided for development convenience, it is **strongly recommended** to:
+
+1. Change all passwords before deploying to any environment
+2. Never use default passwords in production
+3. Use secure password generation and management practices
+4. Consider using Docker secrets or environment management tools for production deployments
diff --git a/sample.env b/sample.env
index 797d2aa..4229a12 100644
--- a/sample.env
+++ b/sample.env
@@ -62,19 +62,19 @@ MONGO_DB_NAME=CV
 
 # Generate a random string for the MongoDB keyfile using the following command:
 # $ openssl rand -base64 32
-MONGO_DB_KEYFILE_STRING=
+MONGO_DB_KEYFILE_STRING=replace_me
 
 MONGO_ADMIN_DB_USER=admin
-MONGO_ADMIN_DB_PASS=
+MONGO_ADMIN_DB_PASS=replace_me
 
 MONGO_READ_WRITE_USER=ode
-MONGO_READ_WRITE_PASS=
+MONGO_READ_WRITE_PASS=replace_me
 
 MONGO_READ_USER=user
-MONGO_READ_PASS=
+MONGO_READ_PASS=replace_me
 
 MONGO_EXPORTER_USERNAME=export
-MONGO_EXPORTER_PASSWORD=
+MONGO_EXPORTER_PASSWORD=replace_me
 
 MONGO_EXPRESS_USER=${MONGO_ADMIN_DB_USER}
 MONGO_EXPRESS_PASS=${MONGO_ADMIN_DB_PASS}
@@ -126,7 +126,7 @@ CONNECT_CONFIG_RELATIVE_PATH="./jikkou/kafka-connectors-values.yaml"
 ### DEDUPLICATOR variables - START ###
 
 # Required for building the deduplicator. Documentation: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry#authenticating-to-github-packages
-MAVEN_GITHUB_TOKEN=
+MAVEN_GITHUB_TOKEN=replace_me
 MAVEN_GITHUB_ORG=usdot-jpo-ode
 
 ENABLE_PROCESSED_MAP_DEDUPLICATION=${KAFKA_TOPIC_CREATE_GEOJSONCONVERTER}

From bfc5f9d8ea78e70a2246583305ab9fd048f59a1e Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Wed, 8 Jan 2025 16:16:37 -0700
Subject: [PATCH 5/9] updates to have the deduplicator dockerfile check if
 build arguments are null

---
 docker-compose-deduplicator.yml | 11 ++++-------
 jpo-deduplicator/Dockerfile     | 13 ++-----------
 sample.env                      | 12 ++++++------
 3 files changed, 12 insertions(+), 24 deletions(-)

diff --git a/docker-compose-deduplicator.yml b/docker-compose-deduplicator.yml
index 5c315d7..c1e7410 100644
--- a/docker-compose-deduplicator.yml
+++ b/docker-compose-deduplicator.yml
@@ -7,14 +7,14 @@ services:
       context: jpo-deduplicator
       dockerfile: Dockerfile
       args:
-        MAVEN_GITHUB_TOKEN: ${MAVEN_GITHUB_TOKEN:?error}
-        MAVEN_GITHUB_ORG: ${MAVEN_GITHUB_ORG:?error}
+        MAVEN_GITHUB_TOKEN: ${MAVEN_GITHUB_TOKEN}
+        MAVEN_GITHUB_ORG: ${MAVEN_GITHUB_ORG}
     image: jpo-deduplicator:latest
     restart: ${RESTART_POLICY}
     environment:
       DOCKER_HOST_IP: ${DOCKER_HOST_IP}
-      KAFKA_BOOTSTRAP_SERVERS: ${KAFKA_BOOTSTRAP_SERVERS:?error}
-      spring.kafka.bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:?error}
+      KAFKA_BOOTSTRAP_SERVERS: ${KAFKA_BOOTSTRAP_SERVERS}
+      spring.kafka.bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS}
       enableProcessedMapDeduplication: ${ENABLE_PROCESSED_MAP_DEDUPLICATION}
       enableProcessedMapWktDeduplication: ${ENABLE_PROCESSED_MAP_WKT_DEDUPLICATION}
       enableOdeMapDeduplication: ${ENABLE_ODE_MAP_DEDUPLICATION}
@@ -22,9 +22,6 @@ services:
       enableOdeRawEncodedTimDeduplication: ${ENABLE_ODE_RAW_ENCODED_TIM_DEDUPLICATION}
       enableProcessedSpatDeduplication: ${ENABLE_PROCESSED_SPAT_DEDUPLICATION}
       enableOdeBsmDeduplication: ${ENABLE_ODE_BSM_DEDUPLICATION}
-
-
-
     healthcheck:
       test: ["CMD", "java", "-version"]
       interval: 10s
diff --git a/jpo-deduplicator/Dockerfile b/jpo-deduplicator/Dockerfile
index 6228e45..2631f79 100644
--- a/jpo-deduplicator/Dockerfile
+++ b/jpo-deduplicator/Dockerfile
@@ -8,17 +8,8 @@ ARG MAVEN_GITHUB_ORG
 ENV MAVEN_GITHUB_TOKEN=$MAVEN_GITHUB_TOKEN
 ENV MAVEN_GITHUB_ORG=$MAVEN_GITHUB_ORG
 
-# COPY ./jpo-conflictmonitor/pom.xml ./jpo-conflictmonitor/
-# COPY ./settings.xml ./jpo-conflictmonitor/
-
-# # Copy and Build Conflict Monitor
-# # Download dependencies alone to cache them first
-# WORKDIR /home/jpo-conflictmonitor
-# RUN mvn -s settings.xml dependency:resolve
-
-# # Copy the source code and build the conflict monitor
-# COPY ./jpo-conflictmonitor/src ./src
-# RUN mvn -s settings.xml install -DskipTests -Ppackage-jar
+RUN test -n "$MAVEN_GITHUB_TOKEN" || (echo "Error: MAVEN_GITHUB_TOKEN cannot be empty" && exit 1)
+RUN test -n "$MAVEN_GITHUB_ORG" || (echo "Error: MAVEN_GITHUB_ORG cannot be empty" && exit 1)
 
 # Copy and Build Deduplicator
 WORKDIR /home
diff --git a/sample.env b/sample.env
index 4229a12..797d2aa 100644
--- a/sample.env
+++ b/sample.env
@@ -62,19 +62,19 @@ MONGO_DB_NAME=CV
 
 # Generate a random string for the MongoDB keyfile using the following command:
 # $ openssl rand -base64 32
-MONGO_DB_KEYFILE_STRING=replace_me
+MONGO_DB_KEYFILE_STRING=
 
 MONGO_ADMIN_DB_USER=admin
-MONGO_ADMIN_DB_PASS=replace_me
+MONGO_ADMIN_DB_PASS=
 
 MONGO_READ_WRITE_USER=ode
-MONGO_READ_WRITE_PASS=replace_me
+MONGO_READ_WRITE_PASS=
 
 MONGO_READ_USER=user
-MONGO_READ_PASS=replace_me
+MONGO_READ_PASS=
 
 MONGO_EXPORTER_USERNAME=export
-MONGO_EXPORTER_PASSWORD=replace_me
+MONGO_EXPORTER_PASSWORD=
 
 MONGO_EXPRESS_USER=${MONGO_ADMIN_DB_USER}
 MONGO_EXPRESS_PASS=${MONGO_ADMIN_DB_PASS}
@@ -126,7 +126,7 @@ CONNECT_CONFIG_RELATIVE_PATH="./jikkou/kafka-connectors-values.yaml"
 ### DEDUPLICATOR variables - START ###
 
 # Required for building the deduplicator. Documentation: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry#authenticating-to-github-packages
-MAVEN_GITHUB_TOKEN=replace_me
+MAVEN_GITHUB_TOKEN=
 MAVEN_GITHUB_ORG=usdot-jpo-ode
 
 ENABLE_PROCESSED_MAP_DEDUPLICATION=${KAFKA_TOPIC_CREATE_GEOJSONCONVERTER}

From 974f8d9e7f3763aad0752457260deddd4b5b7848 Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Wed, 8 Jan 2025 16:23:33 -0700
Subject: [PATCH 6/9] setting default mongo passwords in sample.env

---
 sample.env | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/sample.env b/sample.env
index 797d2aa..a67d94f 100644
--- a/sample.env
+++ b/sample.env
@@ -62,19 +62,19 @@ MONGO_DB_NAME=CV
 
 # Generate a random string for the MongoDB keyfile using the following command:
 # $ openssl rand -base64 32
-MONGO_DB_KEYFILE_STRING=
+MONGO_DB_KEYFILE_STRING=replace_me
 
 MONGO_ADMIN_DB_USER=admin
-MONGO_ADMIN_DB_PASS=
+MONGO_ADMIN_DB_PASS=replace_me
 
 MONGO_READ_WRITE_USER=ode
-MONGO_READ_WRITE_PASS=
+MONGO_READ_WRITE_PASS=replace_me
 
 MONGO_READ_USER=user
-MONGO_READ_PASS=
+MONGO_READ_PASS=replace_me
 
 MONGO_EXPORTER_USERNAME=export
-MONGO_EXPORTER_PASSWORD=
+MONGO_EXPORTER_PASSWORD=replace_me
 
 MONGO_EXPRESS_USER=${MONGO_ADMIN_DB_USER}
 MONGO_EXPRESS_PASS=${MONGO_ADMIN_DB_PASS}

From 3f9cd00e5dc99f0fb727635308aca280b188604b Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Wed, 8 Jan 2025 16:57:14 -0700
Subject: [PATCH 7/9] adding missing ode topics

---
 jikkou/kafka-topics-values.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/jikkou/kafka-topics-values.yaml b/jikkou/kafka-topics-values.yaml
index 422d577..05825f7 100644
--- a/jikkou/kafka-topics-values.yaml
+++ b/jikkou/kafka-topics-values.yaml
@@ -82,6 +82,12 @@ apps:
       - topic.OdeRawEncodedPSMJson
       - topic.OdePsmTxPojo
       - topic.OdePsmJson
+      - topic.OdeTimRxJson
+      - topic.OdeDNMsgJson
+      - topic.OdeBsmDuringEventPojo
+      - topic.OdeBsmRxPojo
+      - topic.OdeBsmTxPojo
+      - topic.OdeTimBroadcastPojo
     tableTopics: {}
     customTopics: {}
   geojsonconverter:

From 06248a43406e5fedeb50b475e29bf0bd5b59e282 Mon Sep 17 00:00:00 2001
From: Michael7371 <40476797+Michael7371@users.noreply.github.com>
Date: Wed, 8 Jan 2025 17:50:58 -0700
Subject: [PATCH 8/9] remove disabled topics

---
 jikkou/kafka-topics-values.yaml | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/jikkou/kafka-topics-values.yaml b/jikkou/kafka-topics-values.yaml
index 05825f7..7c29e20 100644
--- a/jikkou/kafka-topics-values.yaml
+++ b/jikkou/kafka-topics-values.yaml
@@ -83,11 +83,6 @@ apps:
       - topic.OdePsmTxPojo
       - topic.OdePsmJson
       - topic.OdeTimRxJson
-      - topic.OdeDNMsgJson
-      - topic.OdeBsmDuringEventPojo
-      - topic.OdeBsmRxPojo
-      - topic.OdeBsmTxPojo
-      - topic.OdeTimBroadcastPojo
     tableTopics: {}
     customTopics: {}
   geojsonconverter:

From 1c4b5bf831557303009a70a42577044fa524aab3 Mon Sep 17 00:00:00 2001
From: John-Wiens <jwiens3141@gmail.com>
Date: Thu, 9 Jan 2025 10:55:45 -0700
Subject: [PATCH 9/9] Adding index for Conflict monitor Reporting

---
 mongo/create_indexes.js | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/mongo/create_indexes.js b/mongo/create_indexes.js
index 96fffe8..db0090d 100644
--- a/mongo/create_indexes.js
+++ b/mongo/create_indexes.js
@@ -113,16 +113,16 @@ const conflictMonitorCollections = [
     { name: "CmMapMessageCountProgressionEvents", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
     { name: "CmBsmMessageCountProgressionEvents", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
 
-    { name: "SpatMinimumDataAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "MapMinimumDataAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "IntersectionReferenceAlignmentAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "SignalGroupAlignmentAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "SignalStateConflictAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "TimeChangeDetailsAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "EventStateProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "BsmMessageCountProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "MapMessageCountProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "SpatMessageCountProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmSpatMinimumDataAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmMapMinimumDataAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmIntersectionReferenceAlignmentAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmSignalGroupAlignmentAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmSignalStateConflictAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmTimeChangeDetailsAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmEventStateProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmBsmMessageCountProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmMapMessageCountProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmSpatMessageCountProgressionAggregation", ttlField: "eventGeneratedAt", timeField: "eventGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
 
 
     // Conflict Monitor Assessments
@@ -142,11 +142,14 @@ const conflictMonitorCollections = [
     { name: "CmStopLineStopNotification", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
     { name: "CmNotification", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
 
-    { name: "EventStateProgressionNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "IntersectionReferenceAlignmentNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "SignalGroupAlignmentNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "SignalStateConflictNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
-    { name: "TimeChangeDetailsNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds }
+    { name: "CmEventStateProgressionNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmIntersectionReferenceAlignmentNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmSignalGroupAlignmentNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmSignalStateConflictNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+    { name: "CmTimeChangeDetailsNotificationAggregation", ttlField: "notificationGeneratedAt", timeField: "notificationGeneratedAt", intersectionField: "intersectionID", expireTime: expireSeconds },
+
+    // Reports
+    { name: "CmReport", timeField: "reportGeneratedAt", intersectionField: "intersectionID"},
 
 ];