Рекордни събития за одитиране с индиански одит
Действие може да зададе audit като текстов шаблон. При успешно завършване frameworkът изпраща одит запис към DEF.onAudit(name, data, context). Автоматичният запис използва името на sink actions и включва id на действието. Действие може и изрично да извика $.audit(message, type); това излъчва собствен запис и може да носи тип като info.
Примерът замества одит sink с колектор в паметта, за да се огледа договорът му. Записва само името, id на действието, съобщението и типа. Frameworkът подготвя и данни за контекста и сериализирани данни на заявката: реален sink се нуждае от изрична политика за тайни, съхранение, достъп и грешки. Одит събитието не е доказателство, че бизнес транзакция е потвърдена; действието трябва да извика callback за успех едва след като предвиденият запис е успял.
В тази версия автоматичното събитие на одита се случва след успешния път за възстановяване на действията.
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); });
};