| // Utilities for autoroll frontend modules. |
| |
| import { html, TemplateResult } from 'lit-html'; |
| import { diffDate } from '../../infra-sk/modules/human'; |
| import { AutoRollMiniStatus } from './rpc'; |
| |
| /** |
| * lastCheckInTooOldThresholdMs is the threshold at which we consider a roller's |
| * last check-in time to be too old. |
| */ |
| const lastCheckInTooOldThresholdMs = 12 * 60 * 60 * 1000; // 12 hours. |
| |
| /** |
| * checkInTimesAddedAt is the approximate Date at which timestamps were added to |
| * the autoroller status check-ins. It is used in case a roller has not checked |
| * in since before the timestamps were added. |
| */ |
| const checkInTimesAddedAt = new Date(1666296000000); |
| |
| /** |
| * GetLastCheckInTime returns the Date at which the roller last checked in. |
| */ |
| export function GetLastCheckInTime(st: AutoRollMiniStatus): Date { |
| // If the timestamp is missing or is zero or less, then the roller has not |
| // checked in since before timestamps were added to the status updates. Use |
| // the timestamp at which timestamps were added as an approximation. |
| if (!st || !st.timestamp) { |
| return checkInTimesAddedAt; |
| } |
| let lastCheckedIn = new Date(st.timestamp); |
| if (lastCheckedIn.getTime() <= 0) { |
| lastCheckedIn = checkInTimesAddedAt; |
| } |
| return lastCheckedIn; |
| } |
| |
| /** |
| * LastCheckInMessage returns a string indicating the last check-in time of the |
| * roller, if it checked in longer than lastCheckInTooOldThresholdMs ago. |
| */ |
| export function LastCheckInMessage(st: AutoRollMiniStatus | null | undefined): String { |
| if (!st || !st.timestamp) { |
| return ''; |
| } |
| const lastedCheckedIn = GetLastCheckInTime(st).getTime(); |
| const now = new Date().getTime(); |
| if (now - lastedCheckedIn > lastCheckInTooOldThresholdMs) { |
| return 'last checked in ' + diffDate(lastedCheckedIn, now) + ' ago'; |
| } |
| return ''; |
| } |
| |
| /** |
| * LastCheckInSpan returns a TemplateResult indicating the last check-in time of |
| * the roller, if it checked in longer than lastCheckInTooOldThresholdMs ago. |
| */ |
| export function LastCheckInSpan(st: AutoRollMiniStatus | null | undefined): TemplateResult { |
| const msg = LastCheckInMessage(st); |
| if (msg) { |
| return html`<span class="fg-failure">${msg}</span>` |
| } |
| return html``; |
| } |