Skip to content

Add generic SimpleCollection base classes to reduce collection boilerplate#964

Open
sridmad with Copilot wants to merge 5 commits into
masterfrom
copilot/adopt-generic-factory-pattern
Open

Add generic SimpleCollection base classes to reduce collection boilerplate#964
sridmad with Copilot wants to merge 5 commits into
masterfrom
copilot/adopt-generic-factory-pattern

Conversation

Copilot AI commented Jan 12, 2026

Copy link
Copy Markdown
Contributor
  • Analyze existing collection classes to identify boilerplate patterns
  • Create SimpleCollection and SimpleCollectionWithParent generic base classes in CollectionBase.ts
  • Refactor collections to use the new base classes:
    • BackupPolicyCollection
    • ApplicationBackupConfigurationInfoCollection
    • ServiceBackupConfigurationInfoCollection
    • SinglePartitionBackupCollection
    • PartitionCollection (with mergeClusterHealthStateChunk override)
    • ReplicaOnPartitionCollection (with additional getters)
    • ServiceCollection (with mergeClusterHealthStateChunk override)
  • Add unit tests for the generic collection classes
  • Validate build and lint pass
  • Validate existing tests pass
  • Run code review and security scan
  • Address code review feedback
Original prompt

This section details on the original issue you should resolve

<issue_title>Reduce boilerplate by adopting generic factory pattern for collections</issue_title>
<issue_description>### Proposal
Refactor the Service Fabric Explorer models to reduce code duplication in collection management by adopting a generic factory pattern for DataModelCollectionBase and its descendants. Many collection classes currently reimplement similar logic for data retrieval and mapping, making them hard to maintain and extend.

Rationale

  • Multiple collection classes (e.g., NodeCollection, ServiceCollection, DeployedApplicationCollection) implement nearly identical logic for fetching and instantiating model objects.
  • Extracting the shared logic into a generic factory function or abstract base will DRY up the code, improve maintainability, and make it easier to add new collections in the future.
  • Simplify testing and reduce onboarding time for new contributors.

Example Approach

function createCollection<T extends DataModelBase<R>, R>(
    ModelClass:  new (data: DataService, raw: R, parent?: any) => T,
    fetchFn: (data: DataService) => Observable<R[]>
) {
    return class extends DataModelCollectionBase<T> {
        protected retrieveNewCollection(): Observable<T[]> {
            return fetchFn(this.data).pipe(
                map(rawItems => rawItems.map(raw => new ModelClass(this.data, raw, this.parent)))
            );
        }
    };
}

Tasks

  • Identify all collection types that have boilerplate data fetching and mapping logic.
  • Refactor to use the generic factory or shared abstraction.
  • Update usage sites and add or update unit tests to validate behavior.

Benefits

  • Less code duplication
  • Easier maintenance and extensibility
  • Clearer patterns for future collections

Labels: refactoring, code quality</issue_description>

<agent_instructions>validate the changes to ensure tests pass and add additional tests as necessary</agent_instructions>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

…ses to reduce boilerplate in collection management

Co-authored-by: sridmad <7445097+sridmad@users.noreply.github.com>
@sridmad sridmad marked this pull request as ready for review January 12, 2026 20:43
@sridmad sridmad requested a review from Copilot January 12, 2026 20:43
Copilot AI changed the title [WIP] Refactor Service Fabric Explorer models with generic factory pattern Add generic SimpleCollection base classes to reduce collection boilerplate Jan 12, 2026
Copilot AI requested a review from sridmad January 12, 2026 20:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Service Fabric Explorer collection models by introducing a generic factory pattern to reduce boilerplate code. The refactoring creates two new generic base classes (SimpleCollection and SimpleCollectionWithParent) that encapsulate common patterns for fetching data and mapping it to model instances.

Changes:

  • Added SimpleCollection and SimpleCollectionWithParent generic base classes in CollectionBase.ts
  • Refactored 4 collection classes (BackupPolicyCollection, ApplicationBackupConfigurationInfoCollection, ServiceBackupConfigurationInfoCollection, SinglePartitionBackupCollection) to use the new generic pattern
  • Added comprehensive unit tests for the new generic collection classes

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.

File Description
src/SfxWeb/src/app/Models/DataModels/collections/CollectionBase.ts Added two new generic collection base classes with type-safe constructors and fetch patterns
src/SfxWeb/src/app/Models/DataModels/collections/Collections.ts Refactored 4 collection classes to use the new generic pattern, reducing boilerplate code
src/SfxWeb/src/app/Models/DataModels/collections/CollectionBase.spec.ts Added comprehensive unit tests covering both generic collection classes

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/SfxWeb/src/app/Models/DataModels/collections/Collections.ts Outdated
Comment thread src/SfxWeb/src/app/Models/DataModels/collections/Collections.ts Outdated
Comment thread src/SfxWeb/src/app/Models/DataModels/collections/Collections.ts Outdated
Comment thread src/SfxWeb/src/app/Models/DataModels/collections/CollectionBase.spec.ts Outdated
@sridmad

sridmad commented Jan 12, 2026

Copy link
Copy Markdown
Member

@copilot apply changes based on the comments in this thread

run tests and resolve fixed comments

…dback

Co-authored-by: sridmad <7445097+sridmad@users.noreply.github.com>

Copilot AI commented Jan 12, 2026

Copy link
Copy Markdown
Contributor Author

@copilot apply changes based on the comments in this thread

run tests and resolve fixed comments

Applied all review changes in commit 6268c0f:

  • Added missing imports for IRawApplicationBackupConfigurationInfo and IRawServiceBackupConfigurationInfo
  • Fixed generic type parameter for ApplicationBackupConfigurationInfoCollection to use IRawApplicationBackupConfigurationInfo
  • Fixed generic type parameter for ServiceBackupConfigurationInfoCollection to use IRawServiceBackupConfigurationInfo
  • Removed unused IDataModel import from test file

Build, lint, and all 79 tests pass.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3610 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-31160455 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,10017152181811175328,5459975626066034388,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-31160455 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=31160455 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • android.clients.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3610 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-31160455 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,10017152181811175328,5459975626066034388,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-31160455 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=31160455 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3610 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-31160455 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,10017152181811175328,5459975626066034388,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-31160455 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=31160455 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • clientservices.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3610 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-31160455 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,10017152181811175328,5459975626066034388,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-31160455 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=31160455 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3610 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-31160455 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,10017152181811175328,5459975626066034388,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-31160455 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=31160455 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • safebrowsingohttpgateway.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3610 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-31160455 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,10017152181811175328,5459975626066034388,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-31160455 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=31160455 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3610 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-31160455 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,10017152181811175328,5459975626066034388,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-31160455 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=31160455 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/SfxWeb/src/app/Models/DataModels/collections/Collections.ts Outdated
@sridmad

sridmad commented Jan 12, 2026

Copy link
Copy Markdown
Member

@copilot apply changes based on the comments in this thread

run tests on changes

Co-authored-by: sridmad <7445097+sridmad@users.noreply.github.com>

Copilot AI commented Jan 12, 2026

Copy link
Copy Markdown
Contributor Author

@copilot apply changes based on the comments in this thread

run tests on changes

Removed unused IRawBackupConfigurationInfo import in commit 24d5e96. Build and all 79 tests pass.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3631 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-88111537 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,11745635010767598962,4460874585458001280,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-88111537 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=88111537 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • android.clients.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3631 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-88111537 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,11745635010767598962,4460874585458001280,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-88111537 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=88111537 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3631 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-88111537 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,11745635010767598962,4460874585458001280,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-88111537 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=88111537 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • clientservices.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3631 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-88111537 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,11745635010767598962,4460874585458001280,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-88111537 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=88111537 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3631 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-88111537 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,11745635010767598962,4460874585458001280,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-88111537 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=88111537 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • safebrowsingohttpgateway.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3631 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-88111537 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,11745635010767598962,4460874585458001280,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-88111537 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=88111537 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3631 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-88111537 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,11745635010767598962,4460874585458001280,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-88111537 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=88111537 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@jeffj6123

Copy link
Copy Markdown
Member

@copilot update other existing collection classes to leverage this change.

…ceCollection to use generic base classes

Co-authored-by: jeffj6123 <15344718+jeffj6123@users.noreply.github.com>

Copilot AI commented Jan 13, 2026

Copy link
Copy Markdown
Contributor Author

@copilot update other existing collection classes to leverage this change.

Refactored 3 additional collection classes to use the generic base classes in commit 49bfe62:

  • PartitionCollection - now extends SimpleCollectionWithParent with mergeClusterHealthStateChunk override
  • ReplicaOnPartitionCollection - now extends SimpleCollectionWithParent with additional getters
  • ServiceCollection - now extends SimpleCollectionWithParent with mergeClusterHealthStateChunk override

Other collections like NodeCollection, ApplicationCollection, DeployedApplicationCollection, etc. have more complex logic (custom properties, multiple overrides, conditional fetching) that makes them less suitable for the generic pattern without significant changes to the base classes.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3685 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-57341387 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,13874591157256618731,6067329428578298471,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-57341387 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=57341387 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • android.clients.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3685 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-57341387 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,13874591157256618731,6067329428578298471,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-57341387 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=57341387 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3685 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-57341387 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,13874591157256618731,6067329428578298471,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-57341387 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=57341387 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • clientservices.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3685 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-57341387 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,13874591157256618731,6067329428578298471,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-57341387 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=57341387 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3685 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-57341387 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,13874591157256618731,6067329428578298471,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-57341387 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=57341387 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • safebrowsingohttpgateway.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3685 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-57341387 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,13874591157256618731,6067329428578298471,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-57341387 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=57341387 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3685 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-57341387 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,13874591157256618731,6067329428578298471,262144 --disable-features=PaintHolding --variations-seed-version --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --user-data-dir=/tmp/karma-57341387 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications http://localhost:9876/?id=57341387 --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI requested a review from jeffj6123 January 13, 2026 17:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reduce boilerplate by adopting generic factory pattern for collections

4 participants