Merge pull request #1373 from webrecorder/1329-show-consistent-unit-of-time-for-execution-minutes-in-dashboard
Update execution time display
This commit is contained in:
		
						commit
						bf0227ccbf
					
				| @ -4,12 +4,13 @@ import { when } from "lit/directives/when.js"; | |||||||
| import { ifDefined } from "lit/directives/if-defined.js"; | import { ifDefined } from "lit/directives/if-defined.js"; | ||||||
| import { msg, localized, str } from "@lit/localize"; | import { msg, localized, str } from "@lit/localize"; | ||||||
| import type { SlSelectEvent } from "@shoelace-style/shoelace"; | import type { SlSelectEvent } from "@shoelace-style/shoelace"; | ||||||
| import humanizeDuration from "pretty-ms"; | import humanizeMilliseconds from "pretty-ms"; | ||||||
| 
 | 
 | ||||||
| import LiteElement, { html } from "../../utils/LiteElement"; | import LiteElement, { html } from "../../utils/LiteElement"; | ||||||
| import type { AuthState } from "../../utils/AuthService"; | import type { AuthState } from "../../utils/AuthService"; | ||||||
| import type { OrgData } from "../../utils/orgs"; | import type { OrgData } from "../../utils/orgs"; | ||||||
| import type { SelectNewDialogEvent } from "./index"; | import type { SelectNewDialogEvent } from "./index"; | ||||||
|  | import { getLocale } from "../../utils/localization"; | ||||||
| 
 | 
 | ||||||
| type Metrics = { | type Metrics = { | ||||||
|   storageUsedBytes: number; |   storageUsedBytes: number; | ||||||
| @ -58,6 +59,30 @@ export class Dashboard extends LiteElement { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   private humanizeExecutionSeconds = (seconds: number) => { | ||||||
|  |     const minutes = Math.ceil(seconds / 60); | ||||||
|  | 
 | ||||||
|  |     const locale = getLocale(); | ||||||
|  |     const compactFormatter = new Intl.NumberFormat(locale, { | ||||||
|  |       notation: "compact", | ||||||
|  |       style: "unit", | ||||||
|  |       unit: "minute", | ||||||
|  |       unitDisplay: "long", | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const fullFormatter = new Intl.NumberFormat(locale, { | ||||||
|  |       style: "unit", | ||||||
|  |       unit: "minute", | ||||||
|  |       unitDisplay: "long", | ||||||
|  |       maximumFractionDigits: 0, | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     return html`<span title="${fullFormatter.format(minutes)}">
 | ||||||
|  |         ${compactFormatter.format(minutes)}</span | ||||||
|  |       > | ||||||
|  |       (${humanizeMilliseconds(seconds * 1000)})`;
 | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|   render() { |   render() { | ||||||
|     const hasQuota = Boolean(this.metrics?.storageQuotaBytes); |     const hasQuota = Boolean(this.metrics?.storageQuotaBytes); | ||||||
|     const quotaReached = |     const quotaReached = | ||||||
| @ -363,7 +388,12 @@ export class Dashboard extends LiteElement { | |||||||
|       usageSeconds = quotaSeconds; |       usageSeconds = quotaSeconds; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const renderBar = (value: number, label: string, color: string) => html` |     const renderBar = ( | ||||||
|  |       /** Time in Seconds */ | ||||||
|  |       value: number, | ||||||
|  |       label: string, | ||||||
|  |       color: string | ||||||
|  |     ) => html` | ||||||
|       <btrix-meter-bar |       <btrix-meter-bar | ||||||
|         value=${(value / usageSeconds) * 100} |         value=${(value / usageSeconds) * 100} | ||||||
|         style="--background-color:var(--sl-color-${color}-400)" |         style="--background-color:var(--sl-color-${color}-400)" | ||||||
| @ -371,7 +401,7 @@ export class Dashboard extends LiteElement { | |||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|           <div>${label}</div> |           <div>${label}</div> | ||||||
|           <div class="text-xs opacity-80"> |           <div class="text-xs opacity-80"> | ||||||
|             ${humanizeDuration(value * 1000)} | |             ${humanizeMilliseconds(value * 1000)} | | ||||||
|             ${this.renderPercentage(value / quotaSeconds)} |             ${this.renderPercentage(value / quotaSeconds)} | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
| @ -394,7 +424,9 @@ export class Dashboard extends LiteElement { | |||||||
|             hasQuota |             hasQuota | ||||||
|               ? html` |               ? html` | ||||||
|                   <span class="inline-flex items-center"> |                   <span class="inline-flex items-center"> | ||||||
|                     ${humanizeDuration((quotaSeconds - usageSeconds) * 1000)} |                     ${this.humanizeExecutionSeconds( | ||||||
|  |                       quotaSeconds - usageSeconds | ||||||
|  |                     )} | ||||||
|                     ${msg("Available")} |                     ${msg("Available")} | ||||||
|                   </span> |                   </span> | ||||||
|                 ` |                 ` | ||||||
| @ -422,7 +454,9 @@ export class Dashboard extends LiteElement { | |||||||
|                   <div slot="content"> |                   <div slot="content"> | ||||||
|                     <div>${msg("Monthly Execution Time Available")}</div> |                     <div>${msg("Monthly Execution Time Available")}</div> | ||||||
|                     <div class="text-xs opacity-80"> |                     <div class="text-xs opacity-80"> | ||||||
|                       ${humanizeDuration((quotaSeconds - usageSeconds) * 1000)} |                       ${this.humanizeExecutionSeconds( | ||||||
|  |                         quotaSeconds - usageSeconds | ||||||
|  |                       )} | ||||||
|                       | |                       | | ||||||
|                       ${this.renderPercentage( |                       ${this.renderPercentage( | ||||||
|                         (quotaSeconds - usageSeconds) / quotaSeconds |                         (quotaSeconds - usageSeconds) / quotaSeconds | ||||||
| @ -433,10 +467,10 @@ export class Dashboard extends LiteElement { | |||||||
|                 </sl-tooltip> |                 </sl-tooltip> | ||||||
|               </div> |               </div> | ||||||
|               <span slot="valueLabel"> |               <span slot="valueLabel"> | ||||||
|                 ${humanizeDuration(usageSeconds * 1000)} |                 ${this.humanizeExecutionSeconds(usageSeconds)} | ||||||
|               </span> |               </span> | ||||||
|               <span slot="maxLabel"> |               <span slot="maxLabel"> | ||||||
|                 ${humanizeDuration(quotaSeconds * 1000)} |                 ${this.humanizeExecutionSeconds(quotaSeconds)} | ||||||
|               </span> |               </span> | ||||||
|             </btrix-meter> |             </btrix-meter> | ||||||
|           </div> |           </div> | ||||||
| @ -555,8 +589,8 @@ export class Dashboard extends LiteElement { | |||||||
|             > |             > | ||||||
|             </sl-format-date> |             </sl-format-date> | ||||||
|           `,
 |           `,
 | ||||||
|           value ? humanizeDuration(value * 1000) : "--", |           value ? this.humanizeExecutionSeconds(value) : "--", | ||||||
|           humanizeDuration((crawlTime || 0) * 1000), |           humanizeMilliseconds(crawlTime * 1000 || 0), | ||||||
|         ]; |         ]; | ||||||
|       }); |       }); | ||||||
|     return html` |     return html` | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user