Εξέταση των γεγονότων ελέγχου δράσης με εγχώριο έλεγχο
Μια ενέργεια μπορεί να ορίσει το audit ως πρότυπο κειμένου. Με την επιτυχή ολοκλήρωση, το framework στέλνει μια εγγραφή audit στο DEF.onAudit(name, data, context). Η αυτόματη εγγραφή χρησιμοποιεί το όνομα sink actions και περιλαμβάνει το id της ενέργειας. Μια ενέργεια μπορεί επίσης να καλέσει ρητά το $.audit(message, type)· αυτό εκπέμπει τη δική του εγγραφή και μπορεί να φέρει τύπο όπως info.
Το παράδειγμα αντικαθιστά το audit sink με έναν συλλέκτη στη μνήμη ώστε να εξεταστεί το συμβόλαιό του. Καταγράφει μόνο το όνομα, το id της ενέργειας, το μήνυμα και τον τύπο. Το framework προετοιμάζει επίσης δεδομένα πλαισίου και σειριοποιημένα δεδομένα αιτήματος: ένα πραγματικό sink χρειάζεται ρητή πολιτική για μυστικά, διατήρηση, πρόσβαση και αποτυχίες. Ένα συμβάν audit δεν αποδεικνύει ότι μια επιχειρηματική συναλλαγή επικυρώθηκε· η ενέργεια πρέπει να καλεί το 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); });
};