2017-05-04 36 views
8

我正致力于将我们从ant移动到gulp,并且作为我希望将时序统计信息写入Graphite的工作的一部分。我们也在ant(不知道如何,除了这一点)。我的问题是,我宁愿不必为每个任务(我们已有60多个)手动添加一些或其他插件,而是需要某种全局行为,对于每个任务,在任务运行之前定时器开始,当它表示完成时,我们将一些数据推送到Graphite(超过statsd)。在Gulp中定义“全局”行为(测量任务持续时间)

有人可以指出我在正确的方向在哪里钩入这个吞咽?我找不到在文档/食谱中特别有用的东西...

我们正在运行[email protected]

+0

为什么不用你自己的逻辑覆盖gulp.task? –

+0

'gulp'依赖于暴露内部事件的['orchestrator'模块](https://github.com/robrich/orchestrator)。所以你可以做'gulp.on(“task_stop”,...)'并且听每个任务完成事件。我认为这不是一个好的做法,但在技术上是可行的。 – MarcoL

+0

@ elad.chen因为在吞吐(信息流完整,承诺解决,回调)中有多种信号完成方式,如果我正确地看到这一点,我将不得不考虑所有这些行为。 – Steven

回答

0

您可以使用NPM gulp-duration包,而不是将时间代码添加到您的众多任务中。

它的使用的一个例子的片段如下:

function rebundle() { 
var uglifyTimer = duration('uglify time') 
var bundleTimer = duration('bundle time') 

return bundler.bundle() 
    .pipe(source('bundle.js')) 
    .pipe(bundleTimer) 
    // start just before uglify recieves its first file 
    .once('data', uglifyTimer.start) 
    .pipe(uglify()) 
    .pipe(uglifyTimer) 
    .pipe(gulp.dest('example/')) 
} 

吞持续时间的函数duration

创建一个新的穿通持续时间流。当此流为 已关闭时,它会记录自创建至您的 终端以来的时间量。

然后将允许您记录任务的持续时间。

虽然这不是一个全局行为解决方案,但至少您可以在您的gulp文件中指定计时代码,而不必修改所有60个以上的任务。