mirror of
https://github.com/prowler-cloud/prowler.git
synced 2025-12-19 05:17:47 +00:00
Co-authored-by: Alan Buscaglia <gentlemanprogramming@gmail.com> Co-authored-by: Pepe Fagoaga <pepe@prowler.com>
180 lines
4.3 KiB
TypeScript
180 lines
4.3 KiB
TypeScript
/**
|
|
* Sentry Breadcrumb Utilities
|
|
*
|
|
* Provides helper functions to add breadcrumbs for tracking critical paths
|
|
* and user actions throughout the application.
|
|
*
|
|
* Usage:
|
|
* ```typescript
|
|
* import { addUserAction, addApiCall, addTaskEvent } from '@/lib/sentry-breadcrumbs';
|
|
*
|
|
* addUserAction('clicked_create_scan', { provider: 'aws' });
|
|
* addApiCall('POST /scans', 'success');
|
|
* addTaskEvent('scan_started', 'scan-123');
|
|
* ```
|
|
*/
|
|
|
|
import * as Sentry from "@sentry/nextjs";
|
|
|
|
export interface BreadcrumbContext {
|
|
[key: string]: string | number | boolean | undefined;
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for user actions
|
|
* @param action - User action identifier
|
|
* @param context - Additional context data
|
|
*/
|
|
export function addUserAction(action: string, context?: BreadcrumbContext) {
|
|
Sentry.addBreadcrumb({
|
|
message: `User action: ${action}`,
|
|
category: "user.action",
|
|
level: "info",
|
|
data: context,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for API calls
|
|
* @param endpoint - API endpoint (e.g., "GET /scans")
|
|
* @param status - Status of the call (success, error, timeout)
|
|
* @param context - Additional context data
|
|
*/
|
|
export function addApiCall(
|
|
endpoint: string,
|
|
status: "success" | "error" | "timeout",
|
|
context?: BreadcrumbContext,
|
|
) {
|
|
Sentry.addBreadcrumb({
|
|
message: `API ${endpoint}`,
|
|
category: "api",
|
|
level: status === "error" ? "warning" : "info",
|
|
data: {
|
|
status,
|
|
...context,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for task events
|
|
* @param event - Task event (started, completed, failed)
|
|
* @param taskId - Task identifier
|
|
* @param context - Additional context data
|
|
*/
|
|
export function addTaskEvent(
|
|
event: "started" | "completed" | "failed" | "timeout",
|
|
taskId: string,
|
|
context?: BreadcrumbContext,
|
|
) {
|
|
Sentry.addBreadcrumb({
|
|
message: `Task ${event}: ${taskId}`,
|
|
category: "task",
|
|
level: event === "failed" ? "warning" : "info",
|
|
data: {
|
|
task_id: taskId,
|
|
...context,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for authentication events
|
|
* @param event - Auth event (login, logout, signup)
|
|
* @param context - Additional context data
|
|
*/
|
|
export function addAuthEvent(
|
|
event: "login" | "logout" | "signup" | "error",
|
|
context?: BreadcrumbContext,
|
|
) {
|
|
Sentry.addBreadcrumb({
|
|
message: `Auth event: ${event}`,
|
|
category: "auth",
|
|
level: event === "error" ? "warning" : "info",
|
|
data: context,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for form submissions
|
|
* @param formName - Name of the form
|
|
* @param status - Status of submission
|
|
* @param context - Additional context data
|
|
*/
|
|
export function addFormSubmission(
|
|
formName: string,
|
|
status: "started" | "success" | "error",
|
|
context?: BreadcrumbContext,
|
|
) {
|
|
Sentry.addBreadcrumb({
|
|
message: `Form submission: ${formName}`,
|
|
category: "form",
|
|
level: status === "error" ? "warning" : "info",
|
|
data: {
|
|
status,
|
|
...context,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for navigation
|
|
* @param from - Source path
|
|
* @param to - Destination path
|
|
*/
|
|
export function addNavigation(from: string, to: string) {
|
|
Sentry.addBreadcrumb({
|
|
message: `Navigation: ${from} → ${to}`,
|
|
category: "navigation",
|
|
level: "info",
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for scan operations
|
|
* @param operation - Operation type (create, start, cancel, etc.)
|
|
* @param scanId - Scan identifier
|
|
* @param context - Additional context data
|
|
*/
|
|
export function addScanOperation(
|
|
operation: "create" | "start" | "cancel" | "pause" | "resume",
|
|
scanId?: string,
|
|
context?: BreadcrumbContext,
|
|
) {
|
|
Sentry.addBreadcrumb({
|
|
message: `Scan ${operation}${scanId ? `: ${scanId}` : ""}`,
|
|
category: "scan",
|
|
level: "info",
|
|
data: {
|
|
scan_id: scanId,
|
|
...context,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add breadcrumb for data mutations
|
|
* @param entity - Entity type (provider, scan, role, etc.)
|
|
* @param action - Action type (create, update, delete)
|
|
* @param entityId - Entity identifier
|
|
* @param context - Additional context data
|
|
*/
|
|
export function addDataMutation(
|
|
entity: string,
|
|
action: "create" | "update" | "delete",
|
|
entityId?: string,
|
|
context?: BreadcrumbContext,
|
|
) {
|
|
Sentry.addBreadcrumb({
|
|
message: `Data mutation: ${action} ${entity}${entityId ? ` (${entityId})` : ""}`,
|
|
category: "data",
|
|
level: "info",
|
|
data: {
|
|
entity,
|
|
action,
|
|
entity_id: entityId,
|
|
...context,
|
|
},
|
|
});
|
|
}
|