updateUsageQueue zeroes the accumulated usage all ActiveUsers valve and put the usage data im usageUpdateQueue
()
| 116 | |
| 117 | // updateUsageQueue zeroes the accumulated usage all ActiveUsers valve and put the usage data im usageUpdateQueue |
| 118 | func (panel *userPanel) updateUsageQueue() { |
| 119 | panel.activeUsersM.Lock() |
| 120 | panel.usageUpdateQueueM.Lock() |
| 121 | for _, user := range panel.activeUsers { |
| 122 | if user.bypass { |
| 123 | continue |
| 124 | } |
| 125 | |
| 126 | upIncured, downIncured := user.valve.Nullify() |
| 127 | if usage, ok := panel.usageUpdateQueue[user.arrUID]; ok { |
| 128 | atomic.AddInt64(usage.up, upIncured) |
| 129 | atomic.AddInt64(usage.down, downIncured) |
| 130 | } else { |
| 131 | // if the user hasn't been added to the queue |
| 132 | usage = &usagePair{&upIncured, &downIncured} |
| 133 | panel.usageUpdateQueue[user.arrUID] = usage |
| 134 | } |
| 135 | } |
| 136 | panel.activeUsersM.Unlock() |
| 137 | panel.usageUpdateQueueM.Unlock() |
| 138 | } |
| 139 | |
| 140 | // updateUsageQueueForOne is the same as updateUsageQueue except it only updates one user's usage |
| 141 | // this is useful when the user is being terminated |