2013-12-12 35 views
1

我正在研究更多的安全仪表板,它监视整个主目录中包含数百个站点(所有Joomla,所以很多文件)的文件更改。NodeJS大型目录文件更改

为了保持潜在的安全问题,我们希望以有效的方式监视文件更改,而不会产生不必要的CPU /内存开销。我们希望以更快的时间间隔观看它,但是我更了解它的一个平衡行为,当你想避免使用更多的cpu时,则需要一个旁路过程。

我曾尝试使用“手表”用下面的代码,在主目录中运行:

var watch, fs; 
watch = require('watch'); 
fs = require('fs'); 

watch.createMonitor(__dirname,{interval:500,filter:function(file,stat){ 
    if(file.indexOf('index.php')!=-1){ 
     return true; 
    }else{ 
     return false; 
    } 
}},function(monitor){ 
    monitor.filter(function(file){ 
     console.log(file); 
    }) 
    monitor.on('created',function(file,stat){ 
     console.log(file + ' new'); 
    }); 
    monitor.on('changed',function(file,stat){ 
     console.log(file + ' changed'); 
    }); 
    monitor.on('removed',function(file,stat){ 
     console.log(file + ' deleted'); 
    }); 
}); 

但是这个尖峰CPU的单核(有时2)超过100%出8记忆也很快占用8GB的20%。这只是为了在所有文件上创建监视事件,因此它在它实际检测到任何文件更改之前。

我知道这个问题,它是通过每个文件单独,只有不跟踪它,如果你过滤该类文件。通常我需要注意的是每个目录中的index.php,直到它可以是一致的(有一些例外)。

有没有已经建立的模块来做到这一点?或者这是新的东西?我发现所有的模块都假定它的目录很小(比如看LESS或者其他东西),所以根本没有为这种应用程序构建。

任何想法?我知道这段代码需要被废弃,因为我无法看到停止CPU开销。

回答

0

不要使用package 'watch',只需使用fs.watch(...)

包 '手表':

fs.watch(..)

+0

这是我开始往下走的路线。它不能看任何其他文件,但通过与一些forEach循环使用fs.readdir我可以过滤只有我想要的文件足够轻松。 –