UI: Layout for tenant profile and queue
This commit is contained in:
parent
a5050cdf7f
commit
d1995bc27e
@ -15,7 +15,7 @@
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<form (ngSubmit)="add()" style="min-width: 400px;" [ngStyle]="entitiesTableConfig.addDialogStyle">
|
||||
<form (ngSubmit)="add()" style="min-width: 400px; width: 700px;" [ngStyle]="entitiesTableConfig.addDialogStyle">
|
||||
<mat-toolbar color="primary">
|
||||
<h2 translate>{{ translations.add }}</h2>
|
||||
<span fxFlex></span>
|
||||
|
||||
@ -47,8 +47,8 @@
|
||||
</div>
|
||||
<div class="mat-padding" fxLayout="column">
|
||||
<form [formGroup]="entityForm">
|
||||
<fieldset [disabled]="(isLoading$ | async) || !isEdit">
|
||||
<mat-form-field class="mat-block">
|
||||
<fieldset [disabled]="(isLoading$ | async) || !isEdit" style="min-inline-size: 100%;">
|
||||
<mat-form-field class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.name</mat-label>
|
||||
<input matInput formControlName="name" required/>
|
||||
<mat-error *ngIf="entityForm.get('name').hasError('required')">
|
||||
@ -99,7 +99,7 @@
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
</div>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-form-field class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.description</mat-label>
|
||||
<textarea matInput formControlName="description" rows="2"></textarea>
|
||||
</mat-form-field>
|
||||
|
||||
@ -14,6 +14,10 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
:host ::ng-deep {
|
||||
.mat-form-field-infix {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.mat-checkbox{
|
||||
&.hinted-checkbox {
|
||||
.mat-checkbox-inner-container {
|
||||
|
||||
@ -16,387 +16,499 @@
|
||||
|
||||
-->
|
||||
<section [formGroup]="defaultTenantProfileConfigurationFormGroup" fxLayout="column">
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-devices</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxDevices"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-devices-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-devices-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-assets</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxAssets"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-assets-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-assets-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-customers</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxCustomers"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-customers-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-customers-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-users</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxUsers"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-users-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-users-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-dashboards</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxDashboards"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-dashboards-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-dashboards-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-rule-chains</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxRuleChains"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleChains').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-rule-chains-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleChains').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-rule-chains-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-resources-sum-data-size</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxResourcesInBytes"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxResourcesInBytes').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-resources-sum-data-size-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxResourcesInBytes').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-resources-sum-data-size-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.maximum-ota-packages-sum-data-size</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxOtaPackagesInBytes"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxOtaPackagesInBytes').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-ota-packages-sum-data-size-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxOtaPackagesInBytes').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-ota-packages-sum-data-size-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-transport-messages</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxTransportMessages"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('required')">
|
||||
{{ 'tenant-profile.max-transport-messages-range' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('min')">
|
||||
{{ 'tenant-profile.max-transport-messages-required' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-transport-data-points</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxTransportDataPoints"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('required')">
|
||||
{{ 'tenant-profile.max-transport-data-points-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('min')">
|
||||
{{ 'tenant-profile.max-transport-data-points-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-r-e-executions</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxREExecutions"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('required')">
|
||||
{{ 'tenant-profile.max-r-e-executions-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('min')">
|
||||
{{ 'tenant-profile.max-r-e-executions-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-j-s-executions</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxJSExecutions"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('required')">
|
||||
{{ 'tenant-profile.max-j-s-executions-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('min')">
|
||||
{{ 'tenant-profile.max-j-s-executions-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-d-p-storage-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxDPStorageDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('required')">
|
||||
{{ 'tenant-profile.max-d-p-storage-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('min')">
|
||||
{{ 'tenant-profile.max-d-p-storage-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.default-storage-ttl-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="defaultStorageTtlDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('required')">
|
||||
{{ 'tenant-profile.default-storage-ttl-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('min')">
|
||||
{{ 'tenant-profile.default-storage-ttl-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.alarms-ttl-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="alarmsTtlDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('alarmsTtlDays').hasError('required')">
|
||||
{{ 'tenant-profile.alarms-ttl-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('alarmsTtlDays').hasError('min')">
|
||||
{{ 'tenant-profile.alarms-ttl-days-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.rpc-ttl-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="rpcTtlDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rpcTtlDays').hasError('required')">
|
||||
{{ 'tenant-profile.rpc-ttl-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rpcTtlDays').hasError('min')">
|
||||
{{ 'tenant-profile.rpc-ttl-days-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-rule-node-executions-per-message</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxRuleNodeExecutionsPerMessage"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('required')">
|
||||
{{ 'tenant-profile.max-rule-node-executions-per-message-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('min')">
|
||||
{{ 'tenant-profile.max-rule-node-executions-per-message-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-emails</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxEmails"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('required')">
|
||||
{{ 'tenant-profile.max-emails-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('min')">
|
||||
{{ 'tenant-profile.max-emails-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-sms</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxSms"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('required')">
|
||||
{{ 'tenant-profile.max-sms-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('min')">
|
||||
{{ 'tenant-profile.max-sms-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.max-created-alarms</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxCreatedAlarms"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('required')">
|
||||
{{ 'tenant-profile.max-created-alarms-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('min')">
|
||||
{{ 'tenant-profile.max-created-alarms-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title">{{ 'tenant-profile.entities' | translate }} <span>(0 - unlimited)</span></legend>
|
||||
<div class="fields-element" fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-devices</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxDevices"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-devices-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-devices-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-dashboards</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxDashboards"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-dashboards-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-dashboards-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-assets</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxAssets"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-assets-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-assets-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-users</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxUsers"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-users-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-users-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<mat-expansion-panel class="configuration-panel">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-description fxLayoutAlign="end" translate>
|
||||
tenant-profile.advanced-settings
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-customers</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxCustomers"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-customers-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-customers-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-rule-chains</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxRuleChains"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleChains').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-rule-chains-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleChains').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-rule-chains-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
</fieldset>
|
||||
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-tenant-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportTenantMsgRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantMsgRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-tenant-telemetry-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportTenantTelemetryMsgRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantTelemetryMsgRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-tenant-telemetry-data-points-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportTenantTelemetryDataPointsRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantTelemetryDataPointsRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-device-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportDeviceMsgRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportDeviceMsgRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-device-telemetry-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportDeviceTelemetryMsgRateLimit">
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-device-telemetry-data-points-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportDeviceTelemetryDataPointsRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportDeviceTelemetryDataPointsRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.tenant-rest-limits</mat-label>
|
||||
<input matInput
|
||||
formControlName="tenantServerRestLimitsConfiguration"
|
||||
type="text">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('tenantServerRestLimitsConfiguration').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.customer-rest-limits</mat-label>
|
||||
<input matInput
|
||||
formControlName="customerServerRestLimitsConfiguration"
|
||||
type="text">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('customerServerRestLimitsConfiguration').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-tenant</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerTenant">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerTenant').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-customer</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerCustomer">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerCustomer').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-regular-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerRegularUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerRegularUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-public-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerPublicUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerPublicUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-queue-per-session</mat-label>
|
||||
<input matInput type="number" formControlName="wsMsgQueueLimitPerSession">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsMsgQueueLimitPerSession').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-one' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-tenant</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerTenant">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerTenant').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-customer</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerCustomer">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerCustomer').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-regular-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerRegularUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerRegularUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-public-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerPublicUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerPublicUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-updates-per-session</mat-label>
|
||||
<input matInput type="text" formControlName="wsUpdatesPerSessionRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsUpdatesPerSessionRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.cassandra-tenant-limits-configuration</mat-label>
|
||||
<input matInput type="text" formControlName="cassandraQueryTenantRateLimitsConfiguration">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('cassandraQueryTenantRateLimitsConfiguration').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.tenant-entity-export-rate-limit</mat-label>
|
||||
<input matInput formControlName="tenantEntityExportRateLimit">
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>tenant-profile.tenant-entity-import-rate-limit</mat-label>
|
||||
<input matInput formControlName="tenantEntityImportRateLimit">
|
||||
</mat-form-field>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title">{{ 'tenant-profile.rule-engine' | translate }} <span>(0 - unlimited)</span></legend>
|
||||
<div class="fields-element" fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-r-e-executions</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxREExecutions"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('required')">
|
||||
{{ 'tenant-profile.max-r-e-executions-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('min')">
|
||||
{{ 'tenant-profile.max-r-e-executions-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-transport-messages</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxTransportMessages"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('required')">
|
||||
{{ 'tenant-profile.max-transport-messages-range' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('min')">
|
||||
{{ 'tenant-profile.max-transport-messages-required' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<mat-expansion-panel class="configuration-panel">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-description fxLayoutAlign="end" translate>
|
||||
tenant-profile.advanced-settings
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-j-s-executions</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxJSExecutions"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('required')">
|
||||
{{ 'tenant-profile.max-j-s-executions-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('min')">
|
||||
{{ 'tenant-profile.max-j-s-executions-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-transport-data-points</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxTransportDataPoints"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('required')">
|
||||
{{ 'tenant-profile.max-transport-data-points-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('min')">
|
||||
{{ 'tenant-profile.max-transport-data-points-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-rule-node-executions-per-message</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxRuleNodeExecutionsPerMessage"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('required')">
|
||||
{{ 'tenant-profile.max-rule-node-executions-per-message-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('min')">
|
||||
{{ 'tenant-profile.max-rule-node-executions-per-message-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<div fxFlex></div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title">{{ 'tenant-profile.time-to-live' | translate }} <span>(0 - unlimited)</span></legend>
|
||||
<div class="fields-element" fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-d-p-storage-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxDPStorageDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('required')">
|
||||
{{ 'tenant-profile.max-d-p-storage-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('min')">
|
||||
{{ 'tenant-profile.max-d-p-storage-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.alarms-ttl-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="alarmsTtlDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('alarmsTtlDays').hasError('required')">
|
||||
{{ 'tenant-profile.alarms-ttl-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('alarmsTtlDays').hasError('min')">
|
||||
{{ 'tenant-profile.alarms-ttl-days-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.default-storage-ttl-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="defaultStorageTtlDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('required')">
|
||||
{{ 'tenant-profile.default-storage-ttl-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('min')">
|
||||
{{ 'tenant-profile.default-storage-ttl-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.rpc-ttl-days</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="rpcTtlDays"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rpcTtlDays').hasError('required')">
|
||||
{{ 'tenant-profile.rpc-ttl-days-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rpcTtlDays').hasError('min')">
|
||||
{{ 'tenant-profile.rpc-ttl-days-days-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title">{{ 'tenant-profile.alarms-and-notifications' | translate }} <span>(0 - unlimited)</span></legend>
|
||||
<div class="fields-element" fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-emails</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxEmails"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('required')">
|
||||
{{ 'tenant-profile.max-emails-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('min')">
|
||||
{{ 'tenant-profile.max-emails-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-created-alarms</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxCreatedAlarms"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('required')">
|
||||
{{ 'tenant-profile.max-created-alarms-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('min')">
|
||||
{{ 'tenant-profile.max-created-alarms-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.max-sms</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxSms"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('required')">
|
||||
{{ 'tenant-profile.max-sms-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('min')">
|
||||
{{ 'tenant-profile.max-sms-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<div fxFlex></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title">{{ 'tenant-profile.ota-files-in-bytes' | translate }} <span>(0 - unlimited)</span></legend>
|
||||
<div class="fields-element" fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-resources-sum-data-size</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxResourcesInBytes"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxResourcesInBytes').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-resources-sum-data-size-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxResourcesInBytes').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-resources-sum-data-size-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.maximum-ota-packages-sum-data-size</mat-label>
|
||||
<input matInput required min="0" step="1"
|
||||
formControlName="maxOtaPackagesInBytes"
|
||||
type="number">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxOtaPackagesInBytes').hasError('required')">
|
||||
{{ 'tenant-profile.maximum-ota-packages-sum-data-size-required' | translate}}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxOtaPackagesInBytes').hasError('min')">
|
||||
{{ 'tenant-profile.maximum-ota-packages-sum-data-size-range' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title">{{ 'tenant-profile.ws-title' | translate }} <span>(0 - unlimited)</span></legend>
|
||||
<div class="fields-element" fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-tenant</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerTenant">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerTenant').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-tenant</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerTenant">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerTenant').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-customer</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerCustomer">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerCustomer').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-customer</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerCustomer">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerCustomer').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<mat-expansion-panel class="configuration-panel">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-description fxLayoutAlign="end" translate>
|
||||
tenant-profile.advanced-settings
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-public-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerPublicUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerPublicUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-public-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerPublicUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerPublicUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-regular-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSessionsPerRegularUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSessionsPerRegularUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-max-subscriptions-per-regular-user</mat-label>
|
||||
<input matInput type="number" formControlName="maxWsSubscriptionsPerRegularUser">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxWsSubscriptionsPerRegularUser').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-zero' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block" appearance="fill">
|
||||
<mat-label translate>tenant-profile.ws-limit-queue-per-session</mat-label>
|
||||
<input matInput type="number" formControlName="wsMsgQueueLimitPerSession">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsMsgQueueLimitPerSession').hasError('min')">
|
||||
{{ 'tenant-profile.too-small-value-one' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<div fxFlex></div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title">Rate limits</legend>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-tenant-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportTenantMsgRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantMsgRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-device-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportDeviceMsgRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportDeviceMsgRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-tenant-telemetry-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportTenantTelemetryMsgRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantTelemetryMsgRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-device-telemetry-msg-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportDeviceTelemetryMsgRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantTelemetryMsgRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<mat-expansion-panel class="configuration-panel">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-description fxLayoutAlign="end" translate>
|
||||
tenant-profile.advanced-settings
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-tenant-telemetry-data-points-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportTenantTelemetryDataPointsRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantTelemetryDataPointsRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.transport-device-telemetry-data-points-rate-limit</mat-label>
|
||||
<input matInput formControlName="transportDeviceTelemetryDataPointsRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportDeviceTelemetryDataPointsRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.tenant-rest-limits</mat-label>
|
||||
<input matInput
|
||||
formControlName="tenantServerRestLimitsConfiguration"
|
||||
type="text">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('tenantServerRestLimitsConfiguration').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.customer-rest-limits</mat-label>
|
||||
<input matInput
|
||||
formControlName="customerServerRestLimitsConfiguration"
|
||||
type="text">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('customerServerRestLimitsConfiguration').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.tenant-entity-export-rate-limit</mat-label>
|
||||
<input matInput formControlName="tenantEntityExportRateLimit">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.tenant-entity-import-rate-limit</mat-label>
|
||||
<input matInput formControlName="tenantEntityImportRateLimit">
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.ws-limit-updates-per-session</mat-label>
|
||||
<input matInput type="text" formControlName="wsUpdatesPerSessionRateLimit">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsUpdatesPerSessionRateLimit').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>tenant-profile.cassandra-tenant-limits-configuration</mat-label>
|
||||
<input matInput type="text" formControlName="cassandraQueryTenantRateLimitsConfiguration">
|
||||
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('cassandraQueryTenantRateLimitsConfiguration').hasError('pattern')">
|
||||
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
</fieldset>
|
||||
</section>
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
:host {
|
||||
.fields-element {
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.group-title > span {
|
||||
color: rgba(0, 0, 0, 0.54);
|
||||
}
|
||||
|
||||
::ng-deep {
|
||||
.mat-expansion-panel {
|
||||
&.configuration-panel {
|
||||
box-shadow: none;
|
||||
|
||||
.mat-expansion-panel-header {
|
||||
padding: 0;
|
||||
|
||||
&:hover {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
.mat-expansion-indicator {
|
||||
padding: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
> .mat-expansion-panel-content {
|
||||
> .mat-expansion-panel-body {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mat-expansion-panel-header-description {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -25,7 +25,7 @@ import { isDefinedAndNotNull } from '@core/utils';
|
||||
@Component({
|
||||
selector: 'tb-default-tenant-profile-configuration',
|
||||
templateUrl: './default-tenant-profile-configuration.component.html',
|
||||
styleUrls: [],
|
||||
styleUrls: ['./default-tenant-profile-configuration.component.scss'],
|
||||
providers: [{
|
||||
provide: NG_VALUE_ACCESSOR,
|
||||
useExisting: forwardRef(() => DefaultTenantProfileConfigurationComponent),
|
||||
@ -35,7 +35,7 @@ import { isDefinedAndNotNull } from '@core/utils';
|
||||
export class DefaultTenantProfileConfigurationComponent implements ControlValueAccessor, OnInit {
|
||||
|
||||
defaultTenantProfileConfigurationFormGroup: FormGroup;
|
||||
rateLimitsPattern = '^(((\\d+):(\\d+)),)*((\\d+):(\\d+))$';
|
||||
rateLimitsPattern = '([1-9]\\d*:[1-9]\\d*)(,[1-9]\\d*:[1-9]\\d*)*';
|
||||
|
||||
private requiredValue: boolean;
|
||||
get required(): boolean {
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
-->
|
||||
|
||||
<form [formGroup]="queueFormGroup" fxLayout="column">
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-form-field class="mat-block" appearance="fill">
|
||||
<mat-label translate>admin.queue-name</mat-label>
|
||||
<input matInput formControlName="name" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('name').hasError('required')">
|
||||
@ -27,151 +27,181 @@
|
||||
{{ 'queue.name-unique' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.poll-interval</mat-label>
|
||||
<input type="number" matInput formControlName="pollInterval" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('pollInterval').hasError('required')">
|
||||
{{ 'queue.poll-interval-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('pollInterval').hasError('min') &&
|
||||
!queueFormGroup.get('pollInterval').hasError('required')">
|
||||
{{ 'queue.poll-interval-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.partitions</mat-label>
|
||||
<input type="number" matInput formControlName="partitions" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('partitions').hasError('required')">
|
||||
{{ 'queue.partitions-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('partitions').hasError('min') &&
|
||||
!queueFormGroup.get('partitions').hasError('required')">
|
||||
{{ 'queue.partitions-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-checkbox class="hinted-checkbox" formControlName="consumerPerPartition">
|
||||
<div>{{ 'queue.consumer-per-partition' | translate }}</div>
|
||||
<div class="tb-hint">{{'queue.consumer-per-partition-hint' | translate}}</div>
|
||||
</mat-checkbox>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.processing-timeout</mat-label>
|
||||
<input type="number" matInput formControlName="packProcessingTimeout" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('packProcessingTimeout').hasError('required')">
|
||||
{{ 'queue.pack-processing-timeout-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('packProcessingTimeout').hasError('min') &&
|
||||
!queueFormGroup.get('packProcessingTimeout').hasError('required')">
|
||||
{{ 'queue.pack-processing-timeout-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-accordion class="queue-strategy" [multi]="true">
|
||||
<mat-expansion-panel [expanded]="false">
|
||||
<mat-expansion-panel [expanded]="true">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title translate>
|
||||
queue.submit-strategy
|
||||
<mat-panel-title class="panel-title" translate>
|
||||
queue.submit-settings
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<div formGroupName="submitStrategy">
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.submit-strategy</mat-label>
|
||||
<mat-select formControlName="type" required>
|
||||
<mat-option *ngFor="let strategy of submitStrategies" [value]="strategy">
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap="16px" formGroupName="submitStrategy" style="padding-bottom: 15px;">
|
||||
<div fxFlex>
|
||||
<label class="group-label" translate>queue.submit-strategy</label>
|
||||
<mat-radio-group fxFlex fxLayout="column" fxLayoutGap="15px" formControlName="type" required>
|
||||
<mat-radio-button *ngFor="let strategy of submitStrategies" [value]="strategy">
|
||||
{{ queueSubmitStrategyTypesMap.get(queueSubmitStrategyTypes[strategy]).label | translate }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="queueFormGroup.get('submitStrategy.type').hasError('required')">
|
||||
{{ 'queue.submit-strategy-type-required' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block" *ngIf="hideBatchSize">
|
||||
<mat-label translate>queue.batch-size</mat-label>
|
||||
<input type="number" matInput formControlName="batchSize" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('submitStrategy.batchSize').hasError('required')">
|
||||
{{ 'queue.batch-size-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('submitStrategy.batchSize').hasError('min') &&
|
||||
!queueFormGroup.get('submitStrategy.batchSize').hasError('required')">
|
||||
{{ 'queue.batch-size-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-icon
|
||||
class="hint-icon"
|
||||
matTooltip="{{ queueSubmitStrategyTypesMap.get(queueSubmitStrategyTypes[strategy]).hint | translate }}"
|
||||
svgIcon="mdi:information-outline">
|
||||
</mat-icon>
|
||||
</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
</div>
|
||||
<div fxFlex *ngIf="hideBatchSize">
|
||||
<label class="group-label" translate>queue.grouping-parameter</label>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.batch-size</mat-label>
|
||||
<input type="number" matInput formControlName="batchSize" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('submitStrategy.batchSize').hasError('required')">
|
||||
{{ 'queue.batch-size-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('submitStrategy.batchSize').hasError('min') &&
|
||||
!queueFormGroup.get('submitStrategy.batchSize').hasError('required')">
|
||||
{{ 'queue.batch-size-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
<mat-expansion-panel [expanded]="false">
|
||||
<mat-expansion-panel [expanded]="true">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title translate>
|
||||
queue.processing-strategy
|
||||
<mat-panel-title class="panel-title" translate>
|
||||
queue.processing-settings
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<div formGroupName="processingStrategy">
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.processing-strategy</mat-label>
|
||||
<mat-select formControlName="type" required>
|
||||
<mat-option *ngFor="let strategy of processingStrategies" [value]="strategy">
|
||||
{{ queueProcessingStrategyTypesMap.get(queueProcessingStrategyTypes[strategy]).label | translate }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.type').hasError('required')">
|
||||
{{ 'queue.processing-strategy-type-required' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.retries</mat-label>
|
||||
<input type="number" matInput formControlName="retries" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.retries').hasError('required')">
|
||||
{{ 'queue.retries-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.retries').hasError('min') &&
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap="16px" formGroupName="processingStrategy" style="padding-bottom: 15px;">
|
||||
<div fxFlex>
|
||||
<label class="group-label" translate>queue.processing-strategy</label>
|
||||
<mat-radio-group fxFlex fxLayout="column" fxLayoutGap="15px" formControlName="type" required>
|
||||
<mat-radio-button *ngFor="let strategy of processingStrategies" [value]="strategy">
|
||||
{{ queueProcessingStrategyTypesMap.get(queueProcessingStrategyTypes[strategy]).label | translate }}
|
||||
<mat-icon
|
||||
class="hint-icon"
|
||||
matTooltip="{{ queueProcessingStrategyTypesMap.get(queueProcessingStrategyTypes[strategy]).hint | translate }}"
|
||||
svgIcon="mdi:information-outline">
|
||||
</mat-icon>
|
||||
</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
</div>
|
||||
<div fxFlex>
|
||||
<label class="group-label" translate>queue.retries-settings</label>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.retries</mat-label>
|
||||
<input type="number" matInput formControlName="retries" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.retries').hasError('required')">
|
||||
{{ 'queue.retries-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.retries').hasError('min') &&
|
||||
!queueFormGroup.get('processingStrategy.retries').hasError('required')">
|
||||
{{ 'queue.retries-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.failure-percentage</mat-label>
|
||||
<input type="number" matInput formControlName="failurePercentage" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.failurePercentage').hasError('required')">
|
||||
{{ 'queue.failure-percentage-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.failurePercentage').hasError('min') &&
|
||||
{{ 'queue.retries-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.failure-percentage</mat-label>
|
||||
<input type="number" matInput formControlName="failurePercentage" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.failurePercentage').hasError('required')">
|
||||
{{ 'queue.failure-percentage-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.failurePercentage').hasError('min') &&
|
||||
!queueFormGroup.get('processingStrategy.failurePercentage').hasError('required') &&
|
||||
!queueFormGroup.get('processingStrategy.failurePercentage').hasError('max')">
|
||||
{{ 'queue.failure-percentage-min-value' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.failurePercentage').hasError('max') &&
|
||||
{{ 'queue.failure-percentage-min-value' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.failurePercentage').hasError('max') &&
|
||||
!queueFormGroup.get('processingStrategy.failurePercentage').hasError('required') &&
|
||||
!queueFormGroup.get('processingStrategy.failurePercentage').hasError('min')">
|
||||
{{ 'queue.failure-percentage-max-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.pause-between-retries</mat-label>
|
||||
<input type="number" matInput formControlName="pauseBetweenRetries" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.pauseBetweenRetries').hasError('required')">
|
||||
{{ 'queue.pause-between-retries-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.pauseBetweenRetries').hasError('min') &&
|
||||
{{ 'queue.failure-percentage-max-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.pause-between-retries</mat-label>
|
||||
<input type="number" matInput formControlName="pauseBetweenRetries" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.pauseBetweenRetries').hasError('required')">
|
||||
{{ 'queue.pause-between-retries-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.pauseBetweenRetries').hasError('min') &&
|
||||
!queueFormGroup.get('processingStrategy.pauseBetweenRetries').hasError('required')">
|
||||
{{ 'queue.pause-between-retries-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.max-pause-between-retries</mat-label>
|
||||
<input type="number" matInput formControlName="maxPauseBetweenRetries" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.maxPauseBetweenRetries').hasError('required')">
|
||||
{{ 'queue.max-pause-between-retries-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.maxPauseBetweenRetries').hasError('min') &&
|
||||
{{ 'queue.pause-between-retries-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="mat-block">
|
||||
<mat-label translate>queue.max-pause-between-retries</mat-label>
|
||||
<input type="number" matInput formControlName="maxPauseBetweenRetries" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.maxPauseBetweenRetries').hasError('required')">
|
||||
{{ 'queue.max-pause-between-retries-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.maxPauseBetweenRetries').hasError('min') &&
|
||||
!queueFormGroup.get('processingStrategy.maxPauseBetweenRetries').hasError('required')">
|
||||
{{ 'queue.max-pause-between-retries-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
{{ 'queue.max-pause-between-retries-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
<mat-expansion-panel [expanded]="true">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title class="panel-title" translate>
|
||||
queue.polling-settings
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<div fxFlex fxLayout="column" fxLayoutGap="10px" style="padding-bottom: 15px;">
|
||||
<div fxFlex>
|
||||
<label class="group-label" translate>queue.batch-processing</label>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap="10px">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>queue.poll-interval</mat-label>
|
||||
<input type="number" matInput formControlName="pollInterval" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('pollInterval').hasError('required')">
|
||||
{{ 'queue.poll-interval-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('pollInterval').hasError('min') &&
|
||||
!queueFormGroup.get('pollInterval').hasError('required')">
|
||||
{{ 'queue.poll-interval-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>queue.partitions</mat-label>
|
||||
<input type="number" matInput formControlName="partitions" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('partitions').hasError('required')">
|
||||
{{ 'queue.partitions-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('partitions').hasError('min') &&
|
||||
!queueFormGroup.get('partitions').hasError('required')">
|
||||
{{ 'queue.partitions-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
<div fxFlex>
|
||||
<label class="group-label" translate>queue.immediate-processing</label>
|
||||
<div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap="10px">
|
||||
<mat-checkbox fxFlex fxFlexAlign.gt-xs="center" formControlName="consumerPerPartition">
|
||||
{{ 'queue.consumer-per-partition' | translate }}
|
||||
</mat-checkbox>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>queue.processing-timeout</mat-label>
|
||||
<input type="number" matInput formControlName="packProcessingTimeout" required>
|
||||
<mat-error *ngIf="queueFormGroup.get('packProcessingTimeout').hasError('required')">
|
||||
{{ 'queue.pack-processing-timeout-required' | translate }}
|
||||
</mat-error>
|
||||
<mat-error *ngIf="queueFormGroup.get('packProcessingTimeout').hasError('min') &&
|
||||
!queueFormGroup.get('packProcessingTimeout').hasError('required')">
|
||||
{{ 'queue.pack-processing-timeout-min-value' | translate }}
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
<mat-form-field class="mat-block" formGroupName="additionalInfo">
|
||||
<mat-form-field class="mat-block" formGroupName="additionalInfo" appearance="fill">
|
||||
<mat-label translate>queue.description</mat-label>
|
||||
<textarea matInput formControlName="description" rows="2"></textarea>
|
||||
<mat-hint translate>queue.description-hint</mat-hint>
|
||||
|
||||
@ -13,16 +13,38 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
:host ::ng-deep {
|
||||
:host {
|
||||
.queue-strategy {
|
||||
padding-bottom: 16px;
|
||||
|
||||
.mat-expansion-panel-header {
|
||||
height: 50px;
|
||||
.group-label {
|
||||
display: block;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.mat-expansion-panel-body {
|
||||
padding-bottom: 0 !important;
|
||||
.panel-title {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.hint-icon {
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
|
||||
::ng-deep {
|
||||
.mat-form-field-infix {
|
||||
width: 100% !important;
|
||||
}
|
||||
.queue-strategy {
|
||||
.mat-expansion-panel-header {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.mat-expansion-panel-body {
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2957,18 +2957,25 @@
|
||||
"add" : "Add queue",
|
||||
"details": "Queue details",
|
||||
"topic": "Topic",
|
||||
"submit-strategy": "Submit Strategy",
|
||||
"processing-strategy": "Processing Strategy",
|
||||
"submit-settings": "Submit settings",
|
||||
"submit-strategy": "Strategy type *",
|
||||
"grouping-parameter": "Grouping parameter",
|
||||
"processing-settings": "Retries processing settings",
|
||||
"processing-strategy": "Processing type *",
|
||||
"retries-settings": "Retries settings",
|
||||
"polling-settings": "Polling settings",
|
||||
"batch-processing": "Batch processing",
|
||||
"poll-interval": "Poll interval",
|
||||
"partitions": "Partitions",
|
||||
"consumer-per-partition": "Consumer per partition",
|
||||
"immediate-processing": "Immediate processing",
|
||||
"consumer-per-partition": "Send message poll for each consumer",
|
||||
"consumer-per-partition-hint": "Enable separate consumer(s) per each partition",
|
||||
"processing-timeout": "Processing timeout, ms",
|
||||
"processing-timeout": "Processing within, ms",
|
||||
"batch-size": "Batch size",
|
||||
"retries": "Retries (0 - unlimited)",
|
||||
"failure-percentage": "Failure Percentage",
|
||||
"pause-between-retries": "Pause between retries",
|
||||
"max-pause-between-retries": "Maximal pause between retries",
|
||||
"retries": "Number of retries (0 – unlimited)",
|
||||
"failure-percentage": "Percentage of failure messages for skipping retries",
|
||||
"pause-between-retries": "Retry within, sec",
|
||||
"max-pause-between-retries": "Additional retry within, sec",
|
||||
"delete": "Delete queue",
|
||||
"copyId": "Copy queue Id",
|
||||
"idCopiedMessage": "Queue Id has been copied to clipboard",
|
||||
@ -3083,93 +3090,100 @@
|
||||
"export-failed-error": "Unable to export tenant profile: {{error}}",
|
||||
"tenant-profile-file": "Tenant profile file",
|
||||
"invalid-tenant-profile-file-error": "Unable to import tenant profile: Invalid tenant profile data structure.",
|
||||
"maximum-devices": "Maximum number of devices (0 - unlimited)",
|
||||
"maximum-devices-required": "Maximum number of devices is required.",
|
||||
"maximum-devices-range": "Minimum number of devices can't be negative",
|
||||
"maximum-assets": "Maximum number of assets (0 - unlimited)",
|
||||
"maximum-assets-required": "Maximum number of assets is required.",
|
||||
"maximum-assets-range": "Maximum number of assets can't be negative",
|
||||
"maximum-customers": "Maximum number of customers (0 - unlimited)",
|
||||
"maximum-customers-required": "Maximum number of customers is required.",
|
||||
"maximum-customers-range": "Maximum number of customers can't be negative",
|
||||
"maximum-users": "Maximum number of users (0 - unlimited)",
|
||||
"maximum-users-required": "Maximum number of users is required.",
|
||||
"maximum-users-range": "Maximum number of users can't be negative",
|
||||
"maximum-dashboards": "Maximum number of dashboards (0 - unlimited)",
|
||||
"maximum-dashboards-required": "Maximum number of dashboards is required.",
|
||||
"maximum-dashboards-range": "Maximum number of dashboards can't be negative",
|
||||
"maximum-rule-chains": "Maximum number of rule chains (0 - unlimited)",
|
||||
"maximum-rule-chains-required": "Maximum number of rule chains is required.",
|
||||
"maximum-rule-chains-range": "Maximum number of rule chains can't be negative",
|
||||
"maximum-resources-sum-data-size": "Maximum sum of resource files size in bytes (0 - unlimited)",
|
||||
"maximum-resources-sum-data-size-required": "Maximum sum of resource files size is required.",
|
||||
"maximum-resources-sum-data-size-range": "Maximum sum of resource files size can`t be negative",
|
||||
"maximum-ota-packages-sum-data-size": "Maximum sum of ota package files size in bytes (0 - unlimited)",
|
||||
"maximum-ota-package-sum-data-size-required": "Maximum sum of ota package files size is required.",
|
||||
"maximum-ota-package-sum-data-size-range": "Maximum sum of ota package files size can`t be negative",
|
||||
"transport-tenant-msg-rate-limit": "Transport tenant messages rate limit.",
|
||||
"transport-tenant-telemetry-msg-rate-limit": "Transport tenant telemetry messages rate limit.",
|
||||
"transport-tenant-telemetry-data-points-rate-limit": "Transport tenant telemetry data points rate limit.",
|
||||
"transport-device-msg-rate-limit": "Transport device messages rate limit.",
|
||||
"transport-device-telemetry-msg-rate-limit": "Transport device telemetry messages rate limit.",
|
||||
"transport-device-telemetry-data-points-rate-limit": "Transport device telemetry data points rate limit.",
|
||||
"tenant-entity-export-rate-limit": "Entity version creation rate limit",
|
||||
"tenant-entity-import-rate-limit": "Entity version load rate limit",
|
||||
"max-transport-messages": "Maximum number of transport messages (0 - unlimited)",
|
||||
"max-transport-messages-required": "Maximum number of transport messages is required.",
|
||||
"max-transport-messages-range": "Maximum number of transport messages can't be negative",
|
||||
"max-transport-data-points": "Maximum number of transport data points (0 - unlimited)",
|
||||
"max-transport-data-points-required": "Maximum number of transport data points is required.",
|
||||
"max-transport-data-points-range": "Maximum number of transport data points can't be negative",
|
||||
"max-r-e-executions": "Maximum number of Rule Engine executions (0 - unlimited)",
|
||||
"max-r-e-executions-required": "Maximum number of Rule Engine executions is required.",
|
||||
"max-r-e-executions-range": "Maximum number of Rule Engine executions can't be negative",
|
||||
"max-j-s-executions": "Maximum number of JavaScript executions (0 - unlimited)",
|
||||
"max-j-s-executions-required": "Maximum number of JavaScript executions is required.",
|
||||
"max-j-s-executions-range": "Maximum number of JavaScript executions can't be negative",
|
||||
"max-d-p-storage-days": "Maximum number of data points storage days (0 - unlimited)",
|
||||
"max-d-p-storage-days-required": "Maximum number of data points storage days is required.",
|
||||
"max-d-p-storage-days-range": "Maximum number of data points storage days can't be negative",
|
||||
"default-storage-ttl-days": "Default storage TTL days (0 - unlimited)",
|
||||
"default-storage-ttl-days-required": "Default storage TTL days is required.",
|
||||
"default-storage-ttl-days-range": "Default storage TTL days can't be negative",
|
||||
"alarms-ttl-days": "Alarms TTL days (0 - unlimited)",
|
||||
"advanced-settings": "Advanced settings",
|
||||
"entities": "Entities",
|
||||
"rule-engine": "Rule Engine",
|
||||
"time-to-live": "Time-to-live",
|
||||
"alarms-and-notifications": "Alarms and notifications",
|
||||
"ota-files-in-bytes": "OTA files in bytes",
|
||||
"ws-title": "WS",
|
||||
"maximum-devices": "Devices maximum number",
|
||||
"maximum-devices-required": "Devices maximum number is required.",
|
||||
"maximum-devices-range": "Devices maximum number can't be negative",
|
||||
"maximum-assets": "Assets maximum number",
|
||||
"maximum-assets-required": "Assets maximum number is required.",
|
||||
"maximum-assets-range": "Assets maximum number can't be negative",
|
||||
"maximum-customers": "Customers maximum number",
|
||||
"maximum-customers-required": "Customers maximum number is required.",
|
||||
"maximum-customers-range": "Customers maximum number can't be negative",
|
||||
"maximum-users": "Users maximum number",
|
||||
"maximum-users-required": "Users maximum number is required.",
|
||||
"maximum-users-range": "Users maximum number can't be negative",
|
||||
"maximum-dashboards": "Dashboards maximum number",
|
||||
"maximum-dashboards-required": "Dashboards maximum number is required.",
|
||||
"maximum-dashboards-range": "Dashboards maximum number can't be negative",
|
||||
"maximum-rule-chains": "Rule chains maximum number",
|
||||
"maximum-rule-chains-required": "Rule chains maximum number is required.",
|
||||
"maximum-rule-chains-range": "Rule chains maximum number can't be negative",
|
||||
"maximum-resources-sum-data-size": "Resource files sum size",
|
||||
"maximum-resources-sum-data-size-required": "Resource files sum size is required.",
|
||||
"maximum-resources-sum-data-size-range": "Resource files sum size can`t be negative",
|
||||
"maximum-ota-packages-sum-data-size": "OTA package files sum size",
|
||||
"maximum-ota-package-sum-data-size-required": "OTA package files sum size is required.",
|
||||
"maximum-ota-package-sum-data-size-range": "OTA package files sum size can`t be negative",
|
||||
"transport-tenant-msg-rate-limit": "Transport tenant messages",
|
||||
"transport-tenant-telemetry-msg-rate-limit": "Transport tenant telemetry messages",
|
||||
"transport-tenant-telemetry-data-points-rate-limit": "Transport tenant telemetry data points",
|
||||
"transport-device-msg-rate-limit": "Transport device messages",
|
||||
"transport-device-telemetry-msg-rate-limit": "Transport device telemetry messages",
|
||||
"transport-device-telemetry-data-points-rate-limit": "Transport device telemetry data points",
|
||||
"tenant-entity-export-rate-limit": "Entity version creation",
|
||||
"tenant-entity-import-rate-limit": "Entity version load",
|
||||
"max-transport-messages": "Transport messages maximum number",
|
||||
"max-transport-messages-required": "Transport messages maximum number is required.",
|
||||
"max-transport-messages-range": "Transport messages maximum number can't be negative",
|
||||
"max-transport-data-points": "Transport data points maximum number ",
|
||||
"max-transport-data-points-required": "Transport data points maximum number is required.",
|
||||
"max-transport-data-points-range": "Transport data points maximum number can't be negative",
|
||||
"max-r-e-executions": "Rule Engine executions maximum number",
|
||||
"max-r-e-executions-required": "Rule Engine executions maximum number is required.",
|
||||
"max-r-e-executions-range": "Rule Engine executions maximum number can't be negative",
|
||||
"max-j-s-executions": "JavaScript executions maximum number ",
|
||||
"max-j-s-executions-required": "JavaScript executions maximum number is required.",
|
||||
"max-j-s-executions-range": "JavaScript executions maximum number can't be negative",
|
||||
"max-d-p-storage-days": "Data points storage days maximum number",
|
||||
"max-d-p-storage-days-required": "Data points storage days maximum number is required.",
|
||||
"max-d-p-storage-days-range": "Data points storage days maximum number can't be negative",
|
||||
"default-storage-ttl-days": "Storage TTL days by default",
|
||||
"default-storage-ttl-days-required": "Storage TTL days by default is required.",
|
||||
"default-storage-ttl-days-range": "Storage TTL days by default can't be negative",
|
||||
"alarms-ttl-days": "Alarms TTL days",
|
||||
"alarms-ttl-days-required": "Alarms TTL days required",
|
||||
"alarms-ttl-days-days-range": "Alarms TTL days can't be negative",
|
||||
"rpc-ttl-days": "RPC TTL days (0 - unlimited)",
|
||||
"rpc-ttl-days": "RPC TTL days",
|
||||
"rpc-ttl-days-required": "RPC TTL days required",
|
||||
"rpc-ttl-days-days-range": "RPC TTL days can't be negative",
|
||||
"max-rule-node-executions-per-message": "Maximum number of rule node executions per message (0 - unlimited)",
|
||||
"max-rule-node-executions-per-message-required": "Maximum number of rule node executions per message is required.",
|
||||
"max-rule-node-executions-per-message-range": "Maximum number of rule node executions per message can't be negative",
|
||||
"max-emails": "Maximum number of emails sent (0 - unlimited)",
|
||||
"max-emails-required": "Maximum number of emails sent is required.",
|
||||
"max-emails-range": "Maximum number of emails sent can't be negative",
|
||||
"max-sms": "Maximum number of SMS sent (0 - unlimited)",
|
||||
"max-sms-required": "Maximum number of SMS sent is required.",
|
||||
"max-sms-range": "Maximum number of SMS sent can't be negative",
|
||||
"max-created-alarms": "Maximum number of alarms created (0 - unlimited)",
|
||||
"max-created-alarms-required": "Maximum number of alarms created is required.",
|
||||
"max-created-alarms-range": "Maximum number of alarms created can't be negative",
|
||||
"max-rule-node-executions-per-message": "Rule node per message executions maximum number",
|
||||
"max-rule-node-executions-per-message-required": "MRule node per message executions maximum number is required.",
|
||||
"max-rule-node-executions-per-message-range": "Rule node per message executions maximum number can't be negative",
|
||||
"max-emails": "Emails sent maximum number",
|
||||
"max-emails-required": "Emails sent maximum number is required.",
|
||||
"max-emails-range": "Emails sent maximum number can't be negative",
|
||||
"max-sms": "SMS sent maximum number",
|
||||
"max-sms-required": "SMS sent maximum number is required.",
|
||||
"max-sms-range": "SMS sent maximum number can't be negative",
|
||||
"max-created-alarms": "Alarms created maximum number",
|
||||
"max-created-alarms-required": "Alarms created maximum number is required.",
|
||||
"max-created-alarms-range": "Alarms created maximum number be negative",
|
||||
"no-queue": "No Queue configured",
|
||||
"add-queue": "Add Queue",
|
||||
"queues-with-count": "Queues ({{count}})",
|
||||
"tenant-rest-limits": "Rate limit for REST requests for tenant",
|
||||
"customer-rest-limits": "Rate limit for REST requests for customer",
|
||||
"tenant-rest-limits": "REST requests for tenant",
|
||||
"customer-rest-limits": "REST requests for customer",
|
||||
"incorrect-pattern-for-rate-limits": "The format is comma separated pairs of capacity and period (in seconds) with a colon between, e.g. 100:1,2000:60",
|
||||
"too-small-value-zero": "The value must be bigger than 0",
|
||||
"too-small-value-one": "The value must be bigger than 1",
|
||||
"cassandra-tenant-limits-configuration": "Cassandra query rate limit for tenant",
|
||||
"ws-limit-max-sessions-per-tenant": "Maximum number of WS sessions per tenant",
|
||||
"ws-limit-max-sessions-per-customer": "Maximum number of WS sessions per customer",
|
||||
"ws-limit-max-sessions-per-regular-user": "Maximum number of WS sessions per regular user",
|
||||
"ws-limit-max-sessions-per-public-user": "Maximum number of WS sessions per public user",
|
||||
"ws-limit-queue-per-session": "Maximum size of WS message queue per session",
|
||||
"ws-limit-max-subscriptions-per-tenant": "Maximum number of WS subscriptions per tenant",
|
||||
"ws-limit-max-subscriptions-per-customer": "Maximum number of WS subscriptions per customer",
|
||||
"ws-limit-max-subscriptions-per-regular-user": "Maximum number of WS subscriptions per regular user",
|
||||
"ws-limit-max-subscriptions-per-public-user": "Maximum number of WS subscriptions per public user",
|
||||
"ws-limit-updates-per-session": "Rate limit for WS updates per session"
|
||||
"cassandra-tenant-limits-configuration": "Cassandra query for tenant",
|
||||
"ws-limit-max-sessions-per-tenant": "Sessions per tenant maximum number",
|
||||
"ws-limit-max-sessions-per-customer": "Sessions per customer maximum number",
|
||||
"ws-limit-max-sessions-per-regular-user": "Sessions per regular user maximum number",
|
||||
"ws-limit-max-sessions-per-public-user": "Sessions per public user maximum number",
|
||||
"ws-limit-queue-per-session": "Message queue per session maximum size",
|
||||
"ws-limit-max-subscriptions-per-tenant": "Subscriptions per tenant maximum number",
|
||||
"ws-limit-max-subscriptions-per-customer": "Subscriptions per customer maximum number",
|
||||
"ws-limit-max-subscriptions-per-regular-user": "Subscriptions per regular user maximum number",
|
||||
"ws-limit-max-subscriptions-per-public-user": "Subscriptions per public user maximum number",
|
||||
"ws-limit-updates-per-session": "WS updates per session"
|
||||
},
|
||||
"timeinterval": {
|
||||
"seconds-interval": "{ seconds, plural, 1 {1 second} other {# seconds} }",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user