feat(core): add table actions (edit, pause, delete confirmation) and global action log
- Add Edit and Pause/Resume actions to connections table - Add delete confirmation modal to secrets table - Add 'paused' status to connections with full backend support - Skip paused connections in health checks and secrets scanning - Add global ActionLog service with filesystem persistence - Instrument all mutation handlers (connections, secrets, pipelines) with action logging - Add Action Log view with entity type filtering to dashboard
This commit is contained in:
@@ -11,6 +11,10 @@ export class SecretsHandler {
|
||||
this.registerHandlers();
|
||||
}
|
||||
|
||||
private get actionLog() {
|
||||
return this.opsServerRef.gitopsAppRef.actionLog;
|
||||
}
|
||||
|
||||
private registerHandlers(): void {
|
||||
// Get all secrets (cache-first, falls back to live fetch)
|
||||
this.typedrouter.addTypedHandler(
|
||||
@@ -146,6 +150,14 @@ export class SecretsHandler {
|
||||
// Refresh cache for this entity
|
||||
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
||||
scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => {});
|
||||
this.actionLog.append({
|
||||
actionType: 'create',
|
||||
entityType: 'secret',
|
||||
entityId: `${dataArg.scopeId}/${dataArg.key}`,
|
||||
entityName: dataArg.key,
|
||||
details: `Created ${dataArg.scope} secret "${dataArg.key}" in ${dataArg.scopeId}`,
|
||||
username: dataArg.identity.username,
|
||||
});
|
||||
return { secret };
|
||||
},
|
||||
),
|
||||
@@ -166,6 +178,14 @@ export class SecretsHandler {
|
||||
// Refresh cache for this entity
|
||||
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
||||
scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => {});
|
||||
this.actionLog.append({
|
||||
actionType: 'update',
|
||||
entityType: 'secret',
|
||||
entityId: `${dataArg.scopeId}/${dataArg.key}`,
|
||||
entityName: dataArg.key,
|
||||
details: `Updated ${dataArg.scope} secret "${dataArg.key}" in ${dataArg.scopeId}`,
|
||||
username: dataArg.identity.username,
|
||||
});
|
||||
return { secret };
|
||||
},
|
||||
),
|
||||
@@ -188,6 +208,14 @@ export class SecretsHandler {
|
||||
// Refresh cache for this entity
|
||||
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
||||
scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => {});
|
||||
this.actionLog.append({
|
||||
actionType: 'delete',
|
||||
entityType: 'secret',
|
||||
entityId: `${dataArg.scopeId}/${dataArg.key}`,
|
||||
entityName: dataArg.key,
|
||||
details: `Deleted ${dataArg.scope} secret "${dataArg.key}" from ${dataArg.scopeId}`,
|
||||
username: dataArg.identity.username,
|
||||
});
|
||||
return { ok: true };
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user