2022-02-08 21:07:04 +00:00
<div class="box is-sideless is-fullwidth is-marginless is-bottomless">
<p class="has-bottom-margin-xl">
This data is presented by full month. If there is data missing, it’ s possible that tracking was turned off at the time.
Vault will only show data for contiguous blocks of time during which tracking was on. Documentation is available
<DocLink @path="/docs/concepts/client-count">here</DocLink>.
</p>
2022-02-14 18:27:09 +00:00
<h2 class="title is-6 has-bottom-margin-xs">
{{ this .versionText .label }}
</h2>
2022-02-08 21:07:04 +00:00
<div data-test-start-date-editor class="is-flex-align-baseline">
2022-02-10 20:51:50 +00:00
{{ # if this .startTimeDisplay }}
<p class="is-size-6"> {{ this .startTimeDisplay }} </p>
<button type="button" class="button is-link" {{ on "click" ( fn ( mut this .isEditStartMonthOpen ) true ) }} >
Edit
</button>
{{ else }}
2022-02-17 20:17:59 +00:00
<DateDropdown @handleDateSelection= {{ this .handleClientActivityQuery }} @name= {{ "startTime" }} @submitText="Save" />
2022-02-10 20:51:50 +00:00
{{ / if }}
2022-02-08 21:07:04 +00:00
</div>
<p class="is-8 has-text-grey has-bottom-margin-xl">
2022-02-14 18:27:09 +00:00
{{ this .versionText .description }}
2022-02-08 21:07:04 +00:00
</p>
2022-02-17 20:17:59 +00:00
{{ # if this .licenseStartIsCurrentMonth }}
<EmptyState
@title="No data for this billing period"
@subTitle="Your billing period has just begun, so there is no data yet. Data will be available here on the first of next month."
@message="To view data from a previous billing period, you can enter your previous billing start date."
@bottomBorder= {{ true }}
>
<DateDropdown @handleDateSelection= {{ this .handleClientActivityQuery }} @name= {{ "startTime" }} @submitText="View" />
</EmptyState>
{{ else if ( eq @ model .config .queriesAvailable false ) }}
2022-02-08 21:07:04 +00:00
{{ # if ( eq @ model .config .enabled "On" ) }}
<EmptyState
@title= {{ concat "No monthly history " ( if this .noActivityDate "from " ) this .noActivityDate }}
@message="There is no data in the monthly history yet. We collect it at the end of each month, so your data will be available on the first of next month."
/>
{{ else }}
<EmptyState
@title="Data tracking is disabled"
@message="Tracking is disabled, and no data is being collected. To turn it on, edit the configuration."
>
{{ # if @ model .config .configPath .canUpdate }}
<p>
<LinkTo @route="vault.cluster.clients.config">
2021-09-16 22:28:03 +00:00
Go to configuration
</LinkTo>
2022-02-08 21:07:04 +00:00
</p>
{{ / if }}
</EmptyState>
2021-09-16 22:28:03 +00:00
{{ / if }}
2022-02-08 21:07:04 +00:00
{{ else }}
{{ # if ( eq @ model .config .enabled "Off" ) }}
<AlertBanner data-test-tracking-disabled @type="warning" @title="Tracking is disabled">
Tracking is currently disabled and data is not being collected. Historical data can be searched, but you will need to
<LinkTo @route="vault.cluster.clients.edit">
edit the configuration
</LinkTo>
to enable tracking again.
</AlertBanner>
{{ / if }}
{{! check for startTimeFromLicense or startTimeFromResponse otherwise emptyState}}
{{ # if ( or @ model .startTimeFromLicense this .startTimeFromResponse ) }}
<div class="is-subtitle-gray has-bottom-margin-m">
FILTERS
<Toolbar>
<ToolbarFilters>
<CalendarWidget
@arrayOfMonths= {{ this .arrayOfMonths }}
@endTimeDisplay= {{ this .endTimeDisplay }}
@endTimeFromResponse= {{ this .endTimeFromResponse }}
@handleClientActivityQuery= {{ this .handleClientActivityQuery }}
@handleCurrentBillingPeriod= {{ this .handleCurrentBillingPeriod }}
@startTimeDisplay= {{ this .startTimeDisplay }}
/>
{{ # if this .namespaceArray }}
<SearchSelect
@id="namespace-search-select"
@options= {{ this .namespaceArray }}
@selectLimit="1"
@disallowNewItems= {{ true }}
@fallbackComponent="input-search"
@onChange= {{ this .selectNamespace }}
@placeholder= {{ "Filter by namespace" }}
@displayInherit= {{ true }}
2022-02-17 20:17:59 +00:00
class="is-marginless"
/>
{{ / if }}
{{ # if this .selectedNamespace }}
<SearchSelect
@id="auth-method-search-select"
@options= {{ this .authMethodOptions }}
@selectLimit="1"
@disallowNewItems= {{ true }}
@fallbackComponent="input-search"
@onChange= {{ this .setAuthMethod }}
@placeholder= {{ "Filter by auth method" }}
@displayInherit= {{ true }}
2021-12-17 03:44:29 +00:00
/>
2022-02-08 21:07:04 +00:00
{{ / if }}
</ToolbarFilters>
</Toolbar>
2021-12-17 03:44:29 +00:00
</div>
2022-02-10 16:43:40 +00:00
{{ # if ( or this .countsIncludeOlderData this .responseRangeDiffMessage ) }}
2022-02-08 21:07:04 +00:00
<AlertBanner @type="warning" @title="Warning">
2022-02-10 16:43:40 +00:00
<ul class= {{ if ( and this .countsIncludeOlderData this .responseRangeDiffMessage ) "bullet" }} >
2022-02-08 21:07:04 +00:00
{{ # if this .responseRangeDiffMessage }}
<li> {{ this .responseRangeDiffMessage }} </li>
{{ / if }}
2022-02-10 16:43:40 +00:00
{{ # if this .countsIncludeOlderData }}
<li>
{{ concat
"You upgraded to Vault "
this.firstUpgradeVersion
" on "
(date-format this.upgradeDate "MMMM d, yyyy.")
}}
How we count clients changed in 1.9, so please keep that in mind when looking at the data below, and you can
<DocLink
@path="/docs/concepts/client-count/faq#q-which-vault-version-reflects-the-most-accurate-client-counts"
>
read more here.
</DocLink>
</li>
{{ / if }}
2022-02-08 21:07:04 +00:00
</ul>
</AlertBanner>
2021-12-17 03:44:29 +00:00
{{ / if }}
2022-02-11 22:15:12 +00:00
{{ # if this .isLoadingQuery }}
2022-02-08 21:07:04 +00:00
<LayoutLoading />
{{ else }}
{{ # if this .totalUsageCounts }}
<Clients::UsageStats @title="Total usage" @totalUsageCounts= {{ this .totalUsageCounts }} />
2022-02-10 20:51:50 +00:00
{{ # if this .hasAttributionData }}
2022-02-08 21:07:04 +00:00
<Clients::Attribution
@chartLegend= {{ this .chartLegend }}
@totalClientsData= {{ this .totalClientsData }}
@totalUsageCounts= {{ this .totalUsageCounts }}
@selectedNamespace= {{ this .selectedNamespace }}
@startTimeDisplay= {{ this .startTimeDisplay }}
@endTimeDisplay= {{ this .endTimeDisplay }}
@isDateRange= {{ this .isDateRange }}
@timestamp= {{ this .responseTimestamp }}
/>
{{ / if }}
{{ else }}
<EmptyState @title="No data received" @message="No data exists for that query period. Try searching again." />
{{ / if }}
2021-12-17 03:44:29 +00:00
{{ / if }}
2022-02-17 20:17:59 +00:00
{{ else if ( or ( not @ model .startTimeFromLicense ) ( not this .startTimeFromResponse ) ) }}
2022-02-17 16:10:56 +00:00
<EmptyState @title= {{ this .versionText .title }} @message= {{ this .versionText .message }} />
2022-02-17 20:17:59 +00:00
{{ else }}
<EmptyState @title="No data received" @message="No data exists for that query period. Try searching again." />
2021-10-14 19:16:14 +00:00
{{ / if }}
2022-02-08 21:07:04 +00:00
{{ / if }}
{{! BILLING START DATE MODAL }}
<Modal
@title="Edit start month"
@onClose= {{ action ( mut this .isEditStartMonthOpen ) false }}
@isActive= {{ this .isEditStartMonthOpen }}
@showCloseButton= {{ true }}
>
<section class="modal-card-body">
<p class="has-bottom-margin-s">
2022-02-14 18:27:09 +00:00
{{ this .versionText .description }}
2022-02-08 21:07:04 +00:00
</p>
2022-02-14 18:27:09 +00:00
<p class="has-bottom-margin-s"><strong> {{ this .versionText .label }} </strong></p>
2022-02-08 21:07:04 +00:00
<div class="modal-radio-button">
<BasicDropdown @class="popup-menu" @horizontalPosition="auto-right" @verticalPosition="below" as |D|>
<D.Trigger
data-test-popup-menu-trigger="true"
class= {{ concat "toolbar-link" ( if D .isOpen " is-active" ) }}
@htmlTag="button"
>
{{ or this .startMonth "Month" }}
<Chevron @direction="down" @isButton= {{ true }} />
</D.Trigger>
2022-02-15 17:43:37 +00:00
<D.Content @defaultClass="popup-menu-content is-wide">
2022-02-08 21:07:04 +00:00
<nav class="box menu scroll">
<ul class="menu-list">
2022-02-17 20:17:59 +00:00
{{ # each this .months as | month in dex | }}
2022-02-08 21:07:04 +00:00
<button
type="button"
2022-02-17 20:17:59 +00:00
class="button link"
disabled= {{ if ( lt in dex this .allowedMonthMax ) false true }}
{{ on "click" ( fn this .selectStartMonth month D .actions ) }}
2022-02-08 21:07:04 +00:00
>
{{ month }}
</button>
{{ / each }}
</ul>
</nav>
</D.Content>
</BasicDropdown>
<BasicDropdown @class="popup-menu" @horizontalPosition="auto-right" @verticalPosition="below" as |D|>
<D.Trigger
data-test-popup-menu-trigger="true"
class= {{ concat "toolbar-link" ( if D .isOpen " is-active" ) }}
@htmlTag="button"
>
{{ or this .startYear "Year" }}
<Chevron @direction="down" @isButton= {{ true }} />
</D.Trigger>
2022-02-15 17:43:37 +00:00
<D.Content @defaultClass="popup-menu-content is-wide">
2022-02-08 21:07:04 +00:00
<nav class="box menu">
<ul class="menu-list">
{{ # each this .years as | year | }}
<button
type="button"
2022-02-17 20:17:59 +00:00
class="button link"
disabled= {{ if ( eq year this .disabledYear ) true false }}
{{ on "click" ( fn this .selectStartYear year D .actions ) }}
2022-02-08 21:07:04 +00:00
>
{{ year }}
</button>
{{ / each }}
</ul>
</nav>
</D.Content>
</BasicDropdown>
</div>
</section>
<footer class="modal-card-foot modal-card-foot-outlined">
<button
type="button"
class="button is-primary"
2022-02-17 20:17:59 +00:00
disabled= {{ or ( if ( and this .startMonth this .startYear ) false true ) }}
{{ on "click" ( fn this .handleClientActivityQuery this .startMonth this .startYear "startTime" ) }}
2022-02-08 21:07:04 +00:00
>
Save
</button>
2022-02-17 20:17:59 +00:00
<button type="button" class="button is-secondary" {{ on "click" ( fn this .handleClientActivityQuery 0 0 "cancel" ) }} >
2022-02-08 21:07:04 +00:00
Cancel
</button>
</footer>
</Modal>
</div>