Data Privacy and Exclusions
Masking and suppressing fields
Optional Features
Enabling optional capabilities
Thumbnail rule criteria
Matching rules for thumbnails
Full example
Sample configuration file
Overview
A monitoring rule tells GermainUX-Agent:
Monitoring rules are JSON documents. They are normally created and managed centrally in GermainUX Enterprise. This reference is primarily intended for advanced configuration, diagnostics, and locally managed deployments.
How the Agent Receives a Rule
The Agent resolves monitoring configuration in the following order:1
It retrieves the list of monitored applications and rule names from GermainUX Enterprise
2
It downloads the JSON configuration associated with each rule
3
If the server request fails, it looks for:
- If a local Registry rule exists for the executable, the Agent loads the JSON file specified by that rule.
To inspect the configuration currently applied to an application, right-click the GermainUX-Agent system-tray icon and select Configurations.
Top-level fields
monitorConfig
queue — how facts are sent
proxy
excludedPorts keeps the proxy from intercepting traffic on ports you don’t want captured (commonly the
GermainUX ports themselves, to avoid the agent monitoring its own uploads).
debug
control trees, sibling walks, snapshot contents, etc. to the log). All should stay
false in normal production use — they add log volume and are only useful when working with
support to diagnose a UI-capture issue.
logging
Profiler actually write their log files — that’s governed entirely by the
LogPath/WorkerLogLevel/CLRLogLevel registry settings described in Agent Settings. Leave this block as-is or omit it.
globalVariables — context attached to every fact
fact emitted afterward (e.g. the logged-in username shown somewhere in the app’s chrome).
See Context variable fields below for the full field list —
userClicks selector variables use the exact same shape.
Data privacy: masking and exclusions
Two related, independent settings control what raw values are allowed to leave themachine:
type values:
features — everything else is opt-in
All monitoring capability beyond basic identification lives under features, one block per capability, each independently
enabled. This section is required to be present in the rule JSON (even if every sub-feature inside it is left off).
processMetrics
(optionally) handle/GDI/USER object counts and disk I/O deltas — the classic native
resource-leak indicators for a long-running desktop app.
gcMetrics
whether it was induced, and heap size before/after), plus periodic cumulative gen0/1/2
collection counts every
interval seconds. Requires the CLR Profiler to be attached.
freezeDetection
pollIntervalMs) to see if it’s still responding to messages, waiting up to
hangTimeoutMs before considering it hung. A fact is emitted when a previously-hung window recovers, reporting how long it was
unresponsive. This runs its own background thread independent of other UI monitoring, so
it has a real (small) always-on cost — weigh that against how important freeze detection
is for the target application.
profiler — CPU sampling
interval is how often (ms) a stack sample is taken.
inclusions/exclusions are executable-name filters for which modules’ code should appear in samples (both empty = everything).
http — outbound HTTP monitoring
download timing phases.
exception
Requires the CLR Profiler.
monitor — core UI activity
(
clickMaps, userClicks, userSearches, userFacingErrors) requires enabled: true here as well.
clickMaps / mouseMaps — heatmap overlays
clickMaps reports one point per click (control + screen position) for click-heatmap visualizations.
mouseMaps buffers raw mouse movement and flushes it periodically (every 5 minutes, on view change, or at shutdown) for movement heatmaps. Both are tagged with
whichever “view” was most recently identified by a
userClicks selector — see below.
userClicks — business-level click tracking
monitor.mouseEnabled (which reports every click), userClicks only reports a click when it matches one of your named selectors — intended for tracking specific
business actions (“clicked Submit”, “opened a customer record”) rather than raw UI noise.
userSearches
trigger control is clicked, the current value of the separate valueControl is captured as the search term. Use this for search boxes where the meaningful value
lives in a different control than the one that was clicked.
userFacingErrors
expressions — a lightweight way to detect error/failure dialogs without needing to
identify their exact controls.
label becomes the fact’s name field on a match.
replay — session replay
independent of the plain monitoring facts above.
Filter fields
Used byuserClicks/userSearches selectors, globalVariables, and context variables, to identify a specific control:
Any combination of these can be set; all specified fields must match (AND).
Context variable fields
Used by bothglobalVariables and a userClicks selector’s variables:
Thumbnail rule criteria
Eachreplay.thumbnailRules[] entry has a method ("win32" or "screen" capture) and a
criteria object of AND’d match conditions, evaluated against each control the Worker encounters:
Each rule also takes a top-level
recaptureOn array listing which attribute changes (
label, visibility, bounds, value, selected) should trigger re-capturing the thumbnail for a matched control after its first capture; omit it (or leave it empty) to
capture once and never recapture.
Full example
SeeConfig/agent-config-sample.json in the agent source tree for a complete, valid starting-point file combining every block above with realistic default values and a
"description" field explaining it’s meant to be copied and customized per application.
Get Help
Contact GermainUX Support
The GermainUX team helps you get up and running faster, empower your team, turn data into actionable insights, and optimize performance to deliver measurable business outcomes.
Can't find what you need?
Search all GermainUX docs with Ctrl + K, or use the feedback buttons at the bottom of this page to tell us what is missing.
The content of this document is proprietary to GERMAIN SOFTWARE.

