2013-12-12 62 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我可以過濾只有我想要的文件足夠輕鬆。 –