UNPKG

1.98 kBtext/coffeescriptView Raw
1_ = require 'lodash'
2debug = (require 'debug')('octoblu-flow-canary:stats')
3
4class Stats
5
6 constructor: ({@Date,@stats,@CANARY_UPDATE_INTERVAL,@CANARY_HEALTH_CHECK_MAX_DIFF} = {}) ->
7 @Date ?= Date
8 @stats ?=
9 flows: {}
10 startTime: @Date.now()
11
12 setCanaryErrors: (error, trimSize) =>
13 @stats.errors ?= []
14 @stats.errors.unshift error
15 @stats.errors = @stats.errors.slice 0, trimSize
16
17 setFlowNames: (flow) =>
18 @stats.flows[flow.flowId] ?= {}
19 @stats.flows[flow.flowId].name = flow.name
20
21 getFlowById: (flowId) =>
22 return @stats.flows[flowId]
23
24 getFlows: =>
25 return @stats.flows
26
27 getCurrentStats: =>
28 @updateStats()
29 return @stats
30
31 getPassing: =>
32 @updateStats()
33 return {passing:true} if @stats.passing
34 return @stats
35
36 updateStats: =>
37 _.each @stats.flows, (flowInfo) =>
38 lastMessage = flowInfo.messageTime?[0] or flowInfo.startTime?[0] or 0
39 flowInfo.currentTimeDiff = @Date.now() - lastMessage
40 flowInfo.passing = @timeDiffLessThanMax flowInfo.currentTimeDiff
41 _.each flowInfo.timeDiffs, (timeDiff) =>
42 flowInfo.passing = false if !@passingTimeDiff timeDiff
43
44 @stats.passing = _.keys(@stats.flows).length != 0
45 _.each @stats.flows, (flowInfo) =>
46 @stats.passing = false if !flowInfo.passing
47
48 cleanupFlowStats: (flows) =>
49 debug 'cleaning up flow stats'
50 flowIds = {}
51 _.each flows, (flow) =>
52 debug "has flow id #{flow.flowId}"
53 flowIds[flow.flowId] = true
54 _.each _.keys(@stats.flows), (flowUuid) =>
55 if !flowIds[flowUuid]
56 delete @stats.flows[flowUuid]
57
58 timeDiffGreaterThanMin: (timeDiff) =>
59 return timeDiff >= (@CANARY_UPDATE_INTERVAL - @CANARY_HEALTH_CHECK_MAX_DIFF)
60
61 timeDiffLessThanMax: (timeDiff) =>
62 return timeDiff <= (@CANARY_UPDATE_INTERVAL + @CANARY_HEALTH_CHECK_MAX_DIFF)
63
64 passingTimeDiff: (timeDiff) =>
65 return @timeDiffGreaterThanMin(timeDiff) and @timeDiffLessThanMax(timeDiff)
66
67module.exports = Stats