# Εξέταση των γεγονότων ελέγχου δράσης με εγχώριο έλεγχο

> Παρατηρήστε την επιλογή ελέγχου και εκφράστε τις κλήσεις $.audit() χωρίς να επικοινωνείτε με μια υπηρεσία εγγραφής ή να γράψετε ευαίσθητες εισαγωγές σε ένα λογότυπο εφαρμογής.

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

Μια ενέργεια μπορεί να ορίσει το `audit` ως πρότυπο κειμένου. Με την επιτυχή ολοκλήρωση, το framework στέλνει μια εγγραφή audit στο `DEF.onAudit(name, data, context)`. Η αυτόματη εγγραφή χρησιμοποιεί το όνομα sink `actions` και περιλαμβάνει το id της ενέργειας. Μια ενέργεια μπορεί επίσης να καλέσει ρητά το `$.audit(message, type)`· αυτό εκπέμπει τη δική του εγγραφή και μπορεί να φέρει τύπο όπως `info`.

Το παράδειγμα αντικαθιστά το audit sink με έναν συλλέκτη στη μνήμη ώστε να εξεταστεί το συμβόλαιό του. Καταγράφει μόνο το όνομα, το id της ενέργειας, το μήνυμα και τον τύπο. Το framework προετοιμάζει επίσης δεδομένα πλαισίου και σειριοποιημένα δεδομένα αιτήματος: ένα πραγματικό sink χρειάζεται ρητή πολιτική για μυστικά, διατήρηση, πρόσβαση και αποτυχίες. Ένα συμβάν audit δεν αποδεικνύει ότι μια επιχειρηματική συναλλαγή επικυρώθηκε· η ενέργεια πρέπει να καλεί το 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); });
};
```
