48 lines
4.1 KiB
TypeScript
48 lines
4.1 KiB
TypeScript
/** Public operation names only: never display URLs, query parameters or client identifiers. */
|
|
export function requestActivity(path: string, method = 'GET'): { area: string; label: string } | undefined {
|
|
const route = path.split('?')[0];
|
|
if (route === '/health') return undefined;
|
|
if (route.includes('/work-packages')) return { area: 'Remediation Engine', label: 'Preparing work packages' };
|
|
if (route.includes('/assessment-context')) return { area: 'Context Engine', label: 'Loading and calculating assessment context' };
|
|
if (route.includes('/report-runs')) return { area: 'Report Engine', label: 'Generating assessment report' };
|
|
if (route.includes('/timeslot-comparison')) return { area: 'Comparison Engine', label: 'Comparing timeslots' };
|
|
const compliance = complianceActivity(route, method);
|
|
if (compliance) return { area: 'Compliance Engine', label: compliance };
|
|
if (route.includes('/mitre-attack')) return { area: 'Core Engine', label: route.endsWith('/source') ? 'Downloading MITRE source' : route.endsWith('/refresh') ? 'Updating MITRE catalog' : 'Loading MITRE catalog' };
|
|
const resources: [RegExp, string][] = [
|
|
[/db-structure/, 'database structure'], [/references/, 'reference recognition'],
|
|
[/policy-evaluation-rule-catalog/, 'evaluation rule catalog'], [/microsoft-security-baselines/, 'security baseline catalog'],
|
|
[/timeslot-result-metrics/, 'timeslot metrics'], [/environment-snapshot/, 'client environment'],
|
|
[/policy-analysis-overview/, 'policy analysis overview'], [/policy-evaluations/, 'policy evaluations'],
|
|
[/policy-finding-runs/, 'policy findings'], [/policy-snapshot-aggregations/, 'policy snapshots'],
|
|
[/policy-analyses/, 'policy analyses'], [/environment-profiles/, 'environment profiles'],
|
|
[/gpo-backups/, 'GPO backups'], [/import-batches\/preview/, 'import preview'], [/import-batches\/complete/, 'import results'],
|
|
[/import-sources/, 'source file'], [/import-files/, 'imported files'], [/risk-acceptances/, 'risk acceptance'], [/reviews/, 'work tracking'],
|
|
[/assessment-history/, 'assessment history'], [/\/model$/, 'scan data and findings'], [/assessments/, 'assessments'],
|
|
[/results\/facets/, 'Result DB filters'], [/results\/status/, 'Result DB status'], [/results/, 'Result DB rows'],
|
|
[/\/export$/, 'client export'], [/projects/, 'clients']
|
|
];
|
|
const noun = resources.find(([pattern]) => pattern.test(route))?.[1] ?? 'application data';
|
|
const action = method === 'DELETE' ? 'Deleting' : method === 'GET' ? 'Loading' : 'Processing';
|
|
return { area: 'Core Engine', label: `${action} ${noun}` };
|
|
}
|
|
|
|
/** Compliance Engine routes; checked before the generic project patterns so they never read as client work. */
|
|
function complianceActivity(route: string, method: string): string | undefined {
|
|
const write = method !== 'GET';
|
|
if (route.includes('/regulatory-control-assignments')) return 'Loading ISO control filters';
|
|
if (route.includes('/regulatory-control-overview')) return 'Loading ISO control overview';
|
|
if (route.includes('/regulatory-mapping-batches')) return write ? 'Starting compliance mapping batch' : 'Loading compliance mapping batch status';
|
|
if (route.includes('/regulatory-mapping-runs')) return 'Generating ISO control proposals';
|
|
if (route.includes('/regulatory-mapping-decisions')) return 'Saving ISO mapping decision';
|
|
if (route.includes('/regulatory-mappings/')) return 'Loading ISO mapping';
|
|
if (route.endsWith('/ai-overview')) return write ? 'Starting AI overview' : 'Loading AI overview status';
|
|
if (route.endsWith('/reference-data/iso-corpus')) return write ? 'Uploading ISO corpus' : 'Loading ISO corpus status';
|
|
if (route.endsWith('/reference-data/bsi-grundschutz/search-index/build')) return 'Building BSI search index';
|
|
if (route.endsWith('/reference-data/bsi-grundschutz/search-index')) return 'Loading BSI search index status';
|
|
if (route.endsWith('/reference-data/bsi-grundschutz/refresh')) return 'Updating BSI catalog';
|
|
if (route.endsWith('/reference-data/bsi-grundschutz/reset')) return 'Restoring bundled BSI catalog';
|
|
if (route.endsWith('/reference-data/bsi-grundschutz')) return 'Loading BSI catalog';
|
|
return undefined;
|
|
}
|