|
@@ -0,0 +1,70 @@
|
|
|
+local g = require('g')
|
|
|
+
|
|
|
+-- run in master worker
|
|
|
+if ngx.worker.id() ~= 0 then
|
|
|
+ return
|
|
|
+end
|
|
|
+
|
|
|
+local function getDevTraffic(dev)
|
|
|
+ -- 0 1 2 3 4 5 6 7
|
|
|
+ -- eth0: bytes packets errs drop fifo frame compressed multicast
|
|
|
+ -- bytes packets errs drop fifo colls carrier compressed
|
|
|
+ local regex = dev .. ':%s+(%d+)%s+' .. ('%d+%s+'):rep(7) .. '(%d+)'
|
|
|
+
|
|
|
+ local lastRxBytes = 0
|
|
|
+ local lastTxBytes = 0
|
|
|
+
|
|
|
+ return function(str)
|
|
|
+ local
|
|
|
+ sRxBytes,
|
|
|
+ sTxBytes
|
|
|
+ = str:match(regex)
|
|
|
+
|
|
|
+ if sTxBytes == nil then
|
|
|
+ return '0,0'
|
|
|
+ end
|
|
|
+
|
|
|
+ local nRxBytes = tonumber(sRxBytes)
|
|
|
+ local nTxBytes = tonumber(sTxBytes)
|
|
|
+
|
|
|
+ local rxBPS = nRxBytes - lastRxBytes
|
|
|
+ local txBPS = nTxBytes - lastTxBytes
|
|
|
+
|
|
|
+ lastRxBytes = nRxBytes
|
|
|
+ lastTxBytes = nTxBytes
|
|
|
+
|
|
|
+ return rxBPS .. ',' .. txBPS
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+local fileStat = io.open('/proc/net/dev')
|
|
|
+if fileStat == nil then
|
|
|
+ ngx.log(ngx.ERR, 'open `/proc/net/dev` fail')
|
|
|
+ return
|
|
|
+end
|
|
|
+
|
|
|
+local firstRun = true
|
|
|
+local getDevTraffic = getDevTraffic('eth0')
|
|
|
+
|
|
|
+
|
|
|
+local function updateTraffic()
|
|
|
+ local r, err = fileStat:seek('set')
|
|
|
+ local out = fileStat:read('*all')
|
|
|
+
|
|
|
+ local traffDev = getDevTraffic(out)
|
|
|
+
|
|
|
+ if firstRun then
|
|
|
+ firstRun = false
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ g.syn()
|
|
|
+
|
|
|
+ local traffHttp = g.update()
|
|
|
+ local stat = traffDev .. ',' .. traffHttp
|
|
|
+
|
|
|
+ g.setStat(stat)
|
|
|
+end
|
|
|
+
|
|
|
+ngx.timer.every(1, updateTraffic)
|