Los flujos de trabajo pueden emitir registros de auditoría si llaman a la función audit(). El único argumento de la función audit es una cadena que se colocará en el log de auditoría.
La función audit() muestra el usuario real que ejecutó el flujo de trabajo solo si setid está configurado en false. Sin embargo, si el propietario de un flujo de trabajo es el usuario root y setid está configurado en true, los logs de auditoría mostrarán root como el usuario de ejecución, aun si el flujo de trabajo fue ejecutado por otro usuario.
Para determinar qué usuario está ejecutando el flujo de trabajo independientemente de la configuración de setid, use la función whoami().
Ejemplo 13 Función whoami de prueba de flujo de trabajovar workflow = { name: "Test whoami", description: "Print current username", execute: function () { return ("Hello " + whoami()); } };
Para los flujos de trabajo complicados cuya ejecución requiere bastante tiempo, puede ser útil proporcionar información clara acerca del progreso para el usuario que ejecuta el flujo de trabajo. Para permitir que se genere un informe sobre la ejecución de un flujo de trabajo de esta manera, el miembro execute debe devolver una matriz de pasos. Cada elemento de la matriz debe contener los siguientes miembros:
|
Al igual que con la función execute para el flujo de trabajo como un todo, el miembro execute de cada paso toma como argumento un objeto que contiene los parámetros del flujo de trabajo.
Ejemplo 14 Generación de informes de ejecución de flujos de trabajoComo ejemplo, en el siguiente flujo de trabajo, se crea un nuevo proyecto, recurso compartido y registro de auditoría en tres pasos:
var steps = [ { step: 'Checking for associated project', execute: function (params) { try { run('shares select ' + params.unit); } catch (err) { if (err.code != EAKSH_ENTITY_BADSELECT) throw (err); /* * We haven't yet created a project that corresponds to * this business unit; create it now. */ run('shares project ' + params.unit); set('mountpoint', '/export/' + params.unit); run('commit'); run('shares select ' + params.unit); } } }, { step: 'Creating share', execute: function (params) { run('filesystem ' + params.name); run('commit'); } }, { step: 'Creating audit record', execute: function (params) { audit('created "' + params.name + '" in "' + params.unit); } } ]; var workflow = { name: 'Create share', description: 'Creates a new share in a business unit', parameters: { name: { label: 'Name of new share', type: 'String' }, unit: { label: 'Business unit', type: 'ChooseOne', options: [ 'development', 'finance', 'qa', 'sales' ], optionlabels: [ 'Development', 'Finance', 'Quality Assurance', 'Sales/Administrative' ], } }, validate: function (params) { try { run('shares select ' + params.unit); run('select ' + params.name); } catch (err) { if (err.code == EAKSH_ENTITY_BADSELECT) return; } return ({ name: 'share already exists' }); }, execute: function (params) { return (steps); } };
Mediante el uso de la función de correo, los flujos de trabajo pueden enviar ciertas salidas del flujo de trabajo por correo electrónico. La función de correo debe contener los siguientes argumentos: un objeto con to y subject, y una cadena messageBody.
Ejemplo 15 Ejecución del flujo de trabajo con una aplicación de correovar workflow = { name: 'email controller state', description: 'email controller state', execute: function () { // verify state of the controller var faulted = run('maintenance hardware "chassis-000" get faulted'); var messageBody = faulted; emailAddress = 'first.last@xyz.com'; subjectLine = 'Controller State'; mail({To: emailAddress, Subject: subjectLine}, messageBody); } };