(instance: Instance)
| 150 | } |
| 151 | |
| 152 | function calcStats(instance: Instance): void { |
| 153 | const obj = uptimeObject.get(instance.name); |
| 154 | if (!obj) return; |
| 155 | |
| 156 | const now = Date.now(); |
| 157 | const day = now - 1000 * 60 * 60 * 24; |
| 158 | const week = now - 1000 * 60 * 60 * 24 * 7; |
| 159 | |
| 160 | let totalTimePassed = 0; |
| 161 | let alltime = 0; |
| 162 | let daytime = 0; |
| 163 | let weektime = 0; |
| 164 | let online = false; |
| 165 | |
| 166 | for (let i = 0; i < obj.length; i++) { |
| 167 | const entry = obj[i]; |
| 168 | online = entry.online; |
| 169 | const stamp = entry.time; |
| 170 | const nextStamp = obj[i + 1]?.time || now; |
| 171 | const timePassed = nextStamp - stamp; |
| 172 | |
| 173 | totalTimePassed += timePassed; |
| 174 | alltime += Number(online) * timePassed; |
| 175 | |
| 176 | if (stamp + timePassed > week) { |
| 177 | const weekTimePassed = Math.min(timePassed, nextStamp - week); |
| 178 | weektime += Number(online) * weekTimePassed; |
| 179 | |
| 180 | if (stamp + timePassed > day) { |
| 181 | const dayTimePassed = Math.min(weekTimePassed, nextStamp - day); |
| 182 | daytime += Number(online) * dayTimePassed; |
| 183 | } |
| 184 | } |
| 185 | } |
| 186 | |
| 187 | instance.online = online; |
| 188 | instance.uptime = calculateUptimeStats(totalTimePassed, alltime, daytime, weektime, online); |
| 189 | } |
| 190 | |
| 191 | function calculateUptimeStats( |
| 192 | totalTimePassed: number, |
no test coverage detected