worker.lua 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. local g = require('g')
  2. -- run in master worker
  3. if ngx.worker.id() ~= 0 then
  4. return
  5. end
  6. local function buildDevTrafficFn(dev)
  7. -- 0 1 2 3 4 5 6 7
  8. -- eth0: bytes packets errs drop fifo frame compressed multicast
  9. -- bytes packets errs drop fifo colls carrier compressed
  10. local regex = dev .. ':%s+(%d+)%s+' .. ('%d+%s+'):rep(7) .. '(%d+)'
  11. local lastRxBytes = 0
  12. local lastTxBytes = 0
  13. return function(str)
  14. local
  15. sRxBytes,
  16. sTxBytes
  17. = str:match(regex)
  18. if sTxBytes == nil then
  19. return '0,0'
  20. end
  21. local nRxBytes = tonumber(sRxBytes)
  22. local nTxBytes = tonumber(sTxBytes)
  23. local rxBPS = nRxBytes - lastRxBytes
  24. local txBPS = nTxBytes - lastTxBytes
  25. lastRxBytes = nRxBytes
  26. lastTxBytes = nTxBytes
  27. return rxBPS .. ',' .. txBPS
  28. end
  29. end
  30. local fileStat = io.open('/proc/net/dev')
  31. if fileStat == nil then
  32. ngx.log(ngx.ERR, 'open `/proc/net/dev` fail')
  33. return
  34. end
  35. local firstRun = true
  36. local getDevTraffic = buildDevTrafficFn('eth0')
  37. local function updateTraffic()
  38. local r, err = fileStat:seek('set')
  39. local out = fileStat:read('*all')
  40. local traffDev = getDevTraffic(out)
  41. if firstRun then
  42. firstRun = false
  43. return
  44. end
  45. g.syn()
  46. local traffHttp = g.update()
  47. local stat = traffDev .. ',' .. traffHttp
  48. g.setStat(stat)
  49. end
  50. ngx.timer.every(1, updateTraffic)