n8n-nodes-tail
Version:
Tail trigger
92 lines • 3.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Tail = void 0;
const child_process_1 = require("child_process");
class Tail {
constructor() {
this.description = {
displayName: 'Tail Trigger',
name: 'tail',
icon: 'fa:terminal',
group: ['trigger'],
version: 1,
triggerPanel: true,
subtitle: '={{$parameter["file"]}}',
description: 'Starts the workflow when lines are added to this file',
defaults: {
name: 'Tail Trigger',
},
inputs: ['main'],
outputs: ['main'],
properties: [
{
displayName: 'Directory',
name: 'directory',
type: 'string',
default: '/home/user/',
required: true,
description: 'Define a working directory',
},
{
displayName: 'File',
name: 'file',
type: 'string',
default: 'file.log',
required: true,
description: 'Specify a file to monitor for real-time updates',
},
{
displayName: 'Options',
name: 'options',
type: 'collection',
placeholder: 'Add option',
default: {},
options: [
{
displayName: 'Last Lines',
name: 'last',
type: 'number',
default: 0,
description: 'How many last lines are loaded on startup?',
},
],
},
],
};
}
async trigger() {
const directory = this.getNodeParameter('directory');
const file = this.getNodeParameter('file');
const options = this.getNodeParameter('options');
const last = options.last || 0;
const args = ['-f', '-n', last.toString(), directory + file];
console.log(`Tail process starting on ${directory}${file}`);
let child = (0, child_process_1.spawn)('tail', args);
child.stderr.pipe(process.stderr);
child.stdout.on('data', (data) => {
console.log(data.toString());
const lines = data
.toString()
.split('\n')
.filter((line) => line.trim() !== '');
for (const line of lines) {
this.emit([this.helpers.returnJsonArray([{ line: line }])]);
}
});
child.on('close', (code, signal) => {
console.log(`Tail process terminated on ${directory}${file}`);
});
child.stderr.on('data', (error) => {
closeFunction();
this.emitError(new Error(error.toString()));
});
async function closeFunction() {
child.kill('SIGHUP');
}
return {
closeFunction,
};
}
}
exports.Tail = Tail;
//# sourceMappingURL=Tail.node.js.map