Registra eventi di controllo delle azioni con un sink di controllo nativo
Un'azione può impostare audit su un modello di testo. Al completamento riuscito, il framework invia un record di audit a DEF.onAudit(name, data, context). Il record automatico usa il nome di sink actions e include l'id dell'azione. Un'azione può anche chiamare esplicitamente $.audit(message, type); questo emette un proprio record e può portare un tipo come info.
L'esempio sostituisce il sink di audit con un raccoglitore in memoria per ispezionarne il contratto. Registra solo il nome, l'id dell'azione, il messaggio e il tipo. Il framework prepara anche dati di contesto e dati della richiesta serializzati: un sink reale ha bisogno di una politica esplicita per segreti, conservazione, accesso e fallimenti. Un evento di audit non è la prova che una transazione di business sia stata confermata; l'azione dovrebbe chiamare il suo callback di successo solo dopo che la scrittura prevista è riuscita.
In questa versione, l'evento di audit automatico avviene dopo il successo della via di appello. non registra automaticamente fallimenti di validazione o azioni fallite.
MAIN.auditEvents = [];
DEF.onAudit = function(name, data) {
MAIN.auditEvents.push({ sink: name || null, action: data.action, message: data.message || '', type: data.type || null });
};
NEWACTION('AuditExample|save', {
input: '*name:String',
audit: 'Saved the example',
action: function($) {
$.callback({ ok: true });
}
});
NEWACTION('AuditExample|explicit', {
action: function($) {
$.audit('Explicit example event', 'info');
$.success();
}
});
NEWACTION('AuditExample|fail', {
audit: 'This must not become a success event',
action: function($) {
$.invalid(409);
}
});exports.install = function() {
ROUTE('POST /save/ --> *AuditExample|save');
ROUTE('POST /explicit/ --> *AuditExample|explicit');
ROUTE('POST /fail/ --> *AuditExample|fail');
ROUTE('GET /events/', function($) { $.json(MAIN.auditEvents); });
};