# Рекордни събития за одитиране с индиански одит

> Следвайте опцията за одитиране и изрично обаждайте $.audit(), без да се свързвате с услуга за записване или да пишете чувствителен вход към дневник на заявлението.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: bg
Content-SHA256: dc92b90382d622032dd30f9bd9da5525d77eb035066dfe42d720c9af7312331a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Действие може да зададе `audit` като текстов шаблон. При успешно завършване frameworkът изпраща одит запис към `DEF.onAudit(name, data, context)`. Автоматичният запис използва името на sink `actions` и включва id на действието. Действие може и изрично да извика `$.audit(message, type)`; това излъчва собствен запис и може да носи тип като `info`.

Примерът замества одит sink с колектор в паметта, за да се огледа договорът му. Записва само името, id на действието, съобщението и типа. Frameworkът подготвя и данни за контекста и сериализирани данни на заявката: реален sink се нуждае от изрична политика за тайни, съхранение, достъп и грешки. Одит събитието не е доказателство, че бизнес транзакция е потвърдена; действието трябва да извика callback за успех едва след като предвиденият запис е успял.

В тази версия автоматичното събитие на одита се случва след успешния път за възстановяване на действията.

```js definitions/audit.js
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);
	}
});
```

```js controllers/audit.js
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); });
};
```
