Browse Source

Tenant profile rate limits configuration UI refactoring

pull/5946/head
Viacheslav Klimov 5 years ago
parent
commit
ffd2a02742
  1. 8
      ui-ngx/src/app/modules/home/components/profile/tenant-profile.component.html
  2. 709
      ui-ngx/src/app/modules/home/components/profile/tenant/default-tenant-profile-configuration.component.html
  3. 29
      ui-ngx/src/app/modules/home/components/profile/tenant/default-tenant-profile-configuration.component.ts
  4. 61
      ui-ngx/src/app/shared/models/tenant.model.ts
  5. 31
      ui-ngx/src/assets/locale/locale.constant-en_US.json

8
ui-ngx/src/app/modules/home/components/profile/tenant-profile.component.html

@ -62,14 +62,14 @@
<div class="tb-hint">{{'tenant.isolated-tb-rule-engine-details' | translate}}</div> <div class="tb-hint">{{'tenant.isolated-tb-rule-engine-details' | translate}}</div>
</mat-checkbox> </mat-checkbox>
</div> </div>
<tb-tenant-profile-data
formControlName="profileData"
required>
</tb-tenant-profile-data>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.description</mat-label> <mat-label translate>tenant-profile.description</mat-label>
<textarea matInput formControlName="description" rows="2"></textarea> <textarea matInput formControlName="description" rows="2"></textarea>
</mat-form-field> </mat-form-field>
<tb-tenant-profile-data
formControlName="profileData"
required>
</tb-tenant-profile-data>
</fieldset> </fieldset>
</form> </form>
</div> </div>

709
ui-ngx/src/app/modules/home/components/profile/tenant/default-tenant-profile-configuration.component.html

@ -15,87 +15,81 @@
limitations under the License. limitations under the License.
--> -->
<section [formGroup]="defaultTenantProfileConfigurationFormGroup" fxLayout="column" fxLayoutGap="20px"> <section [formGroup]="defaultTenantProfileConfigurationFormGroup" fxLayout="column">
<mat-accordion [multi]="true"> <mat-form-field class="mat-block">
<mat-expansion-panel> <mat-label translate>tenant-profile.maximum-devices</mat-label>
<mat-expansion-panel-header> <input matInput required min="0" step="1"
Thingsboard rate limits formControlName="maxDevices"
</mat-expansion-panel-header> type="number">
<ng-template matExpansionPanelContent> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('required')">
<mat-form-field class="mat-block"> {{ 'tenant-profile.maximum-devices-required' | translate}}
<mat-label translate>tenant-profile.maximum-devices</mat-label> </mat-error>
<input matInput required min="0" step="1" <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('min')">
formControlName="maxDevices" {{ 'tenant-profile.maximum-devices-range' | translate}}
type="number"> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('required')"> </mat-form-field>
{{ 'tenant-profile.maximum-devices-required' | translate}} <mat-form-field class="mat-block">
</mat-error> <mat-label translate>tenant-profile.maximum-assets</mat-label>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDevices').hasError('min')"> <input matInput required min="0" step="1"
{{ 'tenant-profile.maximum-devices-range' | translate}} formControlName="maxAssets"
</mat-error> type="number">
</mat-form-field> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('required')">
<mat-form-field class="mat-block"> {{ 'tenant-profile.maximum-assets-required' | translate}}
<mat-label translate>tenant-profile.maximum-assets</mat-label> </mat-error>
<input matInput required min="0" step="1" <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('min')">
formControlName="maxAssets" {{ 'tenant-profile.maximum-assets-range' | translate}}
type="number"> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('required')"> </mat-form-field>
{{ 'tenant-profile.maximum-assets-required' | translate}} <mat-form-field class="mat-block">
</mat-error> <mat-label translate>tenant-profile.maximum-customers</mat-label>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxAssets').hasError('min')"> <input matInput required min="0" step="1"
{{ 'tenant-profile.maximum-assets-range' | translate}} formControlName="maxCustomers"
</mat-error> type="number">
</mat-form-field> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('required')">
<mat-form-field class="mat-block"> {{ 'tenant-profile.maximum-customers-required' | translate}}
<mat-label translate>tenant-profile.maximum-customers</mat-label> </mat-error>
<input matInput required min="0" step="1" <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('min')">
formControlName="maxCustomers" {{ 'tenant-profile.maximum-customers-range' | translate}}
type="number"> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('required')"> </mat-form-field>
{{ 'tenant-profile.maximum-customers-required' | translate}} <mat-form-field class="mat-block">
</mat-error> <mat-label translate>tenant-profile.maximum-users</mat-label>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCustomers').hasError('min')"> <input matInput required min="0" step="1"
{{ 'tenant-profile.maximum-customers-range' | translate}} formControlName="maxUsers"
</mat-error> type="number">
</mat-form-field> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('required')">
<mat-form-field class="mat-block"> {{ 'tenant-profile.maximum-users-required' | translate}}
<mat-label translate>tenant-profile.maximum-users</mat-label> </mat-error>
<input matInput required min="0" step="1" <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('min')">
formControlName="maxUsers" {{ 'tenant-profile.maximum-users-range' | translate}}
type="number"> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('required')"> </mat-form-field>
{{ 'tenant-profile.maximum-users-required' | translate}} <mat-form-field class="mat-block">
</mat-error> <mat-label translate>tenant-profile.maximum-dashboards</mat-label>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxUsers').hasError('min')"> <input matInput required min="0" step="1"
{{ 'tenant-profile.maximum-users-range' | translate}} formControlName="maxDashboards"
</mat-error> type="number">
</mat-form-field> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('required')">
<mat-form-field class="mat-block"> {{ 'tenant-profile.maximum-dashboards-required' | translate}}
<mat-label translate>tenant-profile.maximum-dashboards</mat-label> </mat-error>
<input matInput required min="0" step="1" <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('min')">
formControlName="maxDashboards" {{ 'tenant-profile.maximum-dashboards-range' | translate}}
type="number"> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('required')"> </mat-form-field>
{{ 'tenant-profile.maximum-dashboards-required' | translate}} <mat-form-field class="mat-block">
</mat-error> <mat-label translate>tenant-profile.maximum-rule-chains</mat-label>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDashboards').hasError('min')"> <input matInput required min="0" step="1"
{{ 'tenant-profile.maximum-dashboards-range' | translate}} formControlName="maxRuleChains"
</mat-error> type="number">
</mat-form-field> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleChains').hasError('required')">
<mat-form-field class="mat-block"> {{ 'tenant-profile.maximum-rule-chains-required' | translate}}
<mat-label translate>tenant-profile.maximum-rule-chains</mat-label> </mat-error>
<input matInput required min="0" step="1" <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleChains').hasError('min')">
formControlName="maxRuleChains" {{ 'tenant-profile.maximum-rule-chains-range' | translate}}
type="number"> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleChains').hasError('required')"> </mat-form-field>
{{ 'tenant-profile.maximum-rule-chains-required' | translate}} <mat-form-field class="mat-block">
</mat-error> <mat-label translate>tenant-profile.maximum-resources-sum-data-size</mat-label>
<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" <input matInput required min="0" step="1"
formControlName="maxResourcesInBytes" formControlName="maxResourcesInBytes"
type="number"> type="number">
@ -120,74 +114,74 @@
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.max-transport-messages</mat-label> <mat-label translate>tenant-profile.max-transport-messages</mat-label>
<input matInput required min="0" step="1" <input matInput required min="0" step="1"
formControlName="maxTransportMessages" formControlName="maxTransportMessages"
type="number"> type="number">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('required')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('required')">
{{ 'tenant-profile.max-transport-messages-range' | translate}} {{ 'tenant-profile.max-transport-messages-range' | translate}}
</mat-error> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('min')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportMessages').hasError('min')">
{{ 'tenant-profile.max-transport-messages-required' | translate}} {{ 'tenant-profile.max-transport-messages-required' | translate}}
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.max-transport-data-points</mat-label> <mat-label translate>tenant-profile.max-transport-data-points</mat-label>
<input matInput required min="0" step="1" <input matInput required min="0" step="1"
formControlName="maxTransportDataPoints" formControlName="maxTransportDataPoints"
type="number"> type="number">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('required')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('required')">
{{ 'tenant-profile.max-transport-data-points-required' | translate}} {{ 'tenant-profile.max-transport-data-points-required' | translate}}
</mat-error> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('min')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxTransportDataPoints').hasError('min')">
{{ 'tenant-profile.max-transport-data-points-range' | translate}} {{ 'tenant-profile.max-transport-data-points-range' | translate}}
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.max-r-e-executions</mat-label> <mat-label translate>tenant-profile.max-r-e-executions</mat-label>
<input matInput required min="0" step="1" <input matInput required min="0" step="1"
formControlName="maxREExecutions" formControlName="maxREExecutions"
type="number"> type="number">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('required')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('required')">
{{ 'tenant-profile.max-r-e-executions-required' | translate}} {{ 'tenant-profile.max-r-e-executions-required' | translate}}
</mat-error> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('min')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxREExecutions').hasError('min')">
{{ 'tenant-profile.max-r-e-executions-range' | translate}} {{ 'tenant-profile.max-r-e-executions-range' | translate}}
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.max-j-s-executions</mat-label> <mat-label translate>tenant-profile.max-j-s-executions</mat-label>
<input matInput required min="0" step="1" <input matInput required min="0" step="1"
formControlName="maxJSExecutions" formControlName="maxJSExecutions"
type="number"> type="number">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('required')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('required')">
{{ 'tenant-profile.max-j-s-executions-required' | translate}} {{ 'tenant-profile.max-j-s-executions-required' | translate}}
</mat-error> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('min')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxJSExecutions').hasError('min')">
{{ 'tenant-profile.max-j-s-executions-range' | translate}} {{ 'tenant-profile.max-j-s-executions-range' | translate}}
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.max-d-p-storage-days</mat-label> <mat-label translate>tenant-profile.max-d-p-storage-days</mat-label>
<input matInput required min="0" step="1" <input matInput required min="0" step="1"
formControlName="maxDPStorageDays" formControlName="maxDPStorageDays"
type="number"> type="number">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('required')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('required')">
{{ 'tenant-profile.max-d-p-storage-days-required' | translate}} {{ 'tenant-profile.max-d-p-storage-days-required' | translate}}
</mat-error> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('min')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxDPStorageDays').hasError('min')">
{{ 'tenant-profile.max-d-p-storage-days-range' | translate}} {{ 'tenant-profile.max-d-p-storage-days-range' | translate}}
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.default-storage-ttl-days</mat-label> <mat-label translate>tenant-profile.default-storage-ttl-days</mat-label>
<input matInput required min="0" step="1" <input matInput required min="0" step="1"
formControlName="defaultStorageTtlDays" formControlName="defaultStorageTtlDays"
type="number"> type="number">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('required')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('required')">
{{ 'tenant-profile.default-storage-ttl-days-required' | translate}} {{ 'tenant-profile.default-storage-ttl-days-required' | translate}}
</mat-error> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('min')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('defaultStorageTtlDays').hasError('min')">
{{ 'tenant-profile.default-storage-ttl-days-range' | translate}} {{ 'tenant-profile.default-storage-ttl-days-range' | translate}}
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
@ -212,222 +206,205 @@
</mat-error> </mat-error>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rpcTtlDays').hasError('min')"> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rpcTtlDays').hasError('min')">
{{ 'tenant-profile.rpc-ttl-days-days-range' | translate}} {{ 'tenant-profile.rpc-ttl-days-days-range' | translate}}
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="mat-block"> <mat-form-field class="mat-block">
<mat-label translate>tenant-profile.max-rule-node-executions-per-message</mat-label> <mat-label translate>tenant-profile.max-rule-node-executions-per-message</mat-label>
<input matInput required min="0" step="1" <input matInput required min="0" step="1"
formControlName="maxRuleNodeExecutionsPerMessage" formControlName="maxRuleNodeExecutionsPerMessage"
type="number"> type="number">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('required')"> <mat-error
{{ 'tenant-profile.max-rule-node-executions-per-message-required' | translate}} *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('required')">
</mat-error> {{ 'tenant-profile.max-rule-node-executions-per-message-required' | translate}}
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('min')"> </mat-error>
{{ 'tenant-profile.max-rule-node-executions-per-message-range' | translate}} <mat-error
</mat-error> *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxRuleNodeExecutionsPerMessage').hasError('min')">
</mat-form-field> {{ 'tenant-profile.max-rule-node-executions-per-message-range' | translate}}
<mat-form-field class="mat-block"> </mat-error>
<mat-label translate>tenant-profile.max-emails</mat-label> </mat-form-field>
<input matInput required min="0" step="1" <mat-form-field class="mat-block">
formControlName="maxEmails" <mat-label translate>tenant-profile.max-emails</mat-label>
type="number"> <input matInput required min="0" step="1"
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('required')"> formControlName="maxEmails"
{{ 'tenant-profile.max-emails-required' | translate}} type="number">
</mat-error> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('required')">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('min')"> {{ 'tenant-profile.max-emails-required' | translate}}
{{ 'tenant-profile.max-emails-range' | translate}} </mat-error>
</mat-error> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxEmails').hasError('min')">
</mat-form-field> {{ 'tenant-profile.max-emails-range' | translate}}
<mat-form-field class="mat-block"> </mat-error>
<mat-label translate>tenant-profile.max-sms</mat-label> </mat-form-field>
<input matInput required min="0" step="1" <mat-form-field class="mat-block">
formControlName="maxSms" <mat-label translate>tenant-profile.max-sms</mat-label>
type="number"> <input matInput required min="0" step="1"
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('required')"> formControlName="maxSms"
{{ 'tenant-profile.max-sms-required' | translate}} type="number">
</mat-error> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('required')">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('min')"> {{ 'tenant-profile.max-sms-required' | translate}}
{{ 'tenant-profile.max-sms-range' | translate}} </mat-error>
</mat-error> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxSms').hasError('min')">
</mat-form-field> {{ 'tenant-profile.max-sms-range' | translate}}
<mat-form-field class="mat-block"> </mat-error>
<mat-label translate>tenant-profile.max-created-alarms</mat-label> </mat-form-field>
<input matInput required min="0" step="1" <mat-form-field class="mat-block">
formControlName="maxCreatedAlarms" <mat-label translate>tenant-profile.max-created-alarms</mat-label>
type="number"> <input matInput required min="0" step="1"
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('required')"> formControlName="maxCreatedAlarms"
{{ 'tenant-profile.max-created-alarms-required' | translate}} type="number">
</mat-error> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('required')">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('min')"> {{ 'tenant-profile.max-created-alarms-required' | translate}}
{{ 'tenant-profile.max-created-alarms-range' | translate}} </mat-error>
</mat-error> <mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('maxCreatedAlarms').hasError('min')">
</mat-form-field> {{ 'tenant-profile.max-created-alarms-range' | translate}}
</ng-template> </mat-error>
</mat-expansion-panel> </mat-form-field>
<mat-expansion-panel>
<mat-expansion-panel-header>
Server rate limits
</mat-expansion-panel-header>
<ng-template matExpansionPanelContent>
<mat-form-field class="mat-block">
<mat-label translate>tenant-profile.tenant-rest-limits</mat-label>
<input matInput
formControlName="rateLimitsTenantConfiguration"
type="text">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rateLimitsTenantConfiguration').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="rateLimitsCustomerConfiguration"
type="text">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('rateLimitsCustomerConfiguration').hasError('pattern')">
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
</mat-error>
</mat-form-field>
</ng-template>
</mat-expansion-panel>
<mat-expansion-panel>
<mat-expansion-panel-header>
Transport rate limits
</mat-expansion-panel-header>
<ng-template matExpansionPanelContent>
<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-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportDeviceTelemetryMsgRateLimit').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-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>
</ng-template>
</mat-expansion-panel>
<mat-expansion-panel>
<mat-expansion-panel-header>
Web Socket rate limits
</mat-expansion-panel-header>
<ng-template matExpansionPanelContent>
<mat-form-field class="mat-block">
<mat-label translate>tenant-profile.ws-limit-max-sessions-per-tenant</mat-label>
<input matInput type="number" formControlName="wsLimitMaxSessionsPerTenant">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitMaxSessionsPerTenant').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="wsLimitMaxSessionsPerCustomer">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitMaxSessionsPerCustomer').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="wsLimitMaxSessionsPerPublicUser">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitMaxSessionsPerPublicUser').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="wsLimitQueuePerWsSession">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitQueuePerWsSession').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="wsLimitMaxSubscriptionsPerTenant">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitMaxSubscriptionsPerTenant').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="wsLimitMaxSubscriptionsPerCustomer">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitMaxSubscriptionsPerCustomer').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="wsLimitMaxSubscriptionsPerRegularUser">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitMaxSubscriptionsPerRegularUser').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="wsLimitMaxSubscriptionsPerPublicUser">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitMaxSubscriptionsPerPublicUser').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="wsLimitUpdatesPerSession">
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('wsLimitUpdatesPerSession').hasError('pattern')">
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
</mat-error>
</mat-form-field>
</ng-template>
</mat-expansion-panel>
<mat-expansion-panel> <mat-form-field class="mat-block">
<mat-expansion-panel-header> <mat-label translate>tenant-profile.transport-tenant-msg-rate-limit</mat-label>
Cassandra rate limits <input matInput formControlName="transportTenantMsgRateLimit">
</mat-expansion-panel-header> <mat-error
<ng-template matExpansionPanelContent> *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantMsgRateLimit').hasError('pattern')">
<mat-form-field class="mat-block"> {{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
<mat-label translate>tenant-profile.cassandra-tenant-limits-configuration</mat-label> </mat-error>
<input matInput type="text" formControlName="cassandraTenantLimitsConfiguration"> </mat-form-field>
<mat-error *ngIf="defaultTenantProfileConfigurationFormGroup.get('cassandraTenantLimitsConfiguration').hasError('pattern')"> <mat-form-field class="mat-block">
{{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}} <mat-label translate>tenant-profile.transport-tenant-telemetry-msg-rate-limit</mat-label>
</mat-error> <input matInput formControlName="transportTenantTelemetryMsgRateLimit">
</mat-form-field> <mat-error
<mat-checkbox formControlName="printTenantNames"> *ngIf="defaultTenantProfileConfigurationFormGroup.get('transportTenantTelemetryMsgRateLimit').hasError('pattern')">
{{ 'tenant-profile.cassandra-print-tenant-names' | translate }} {{ 'tenant-profile.incorrect-pattern-for-rate-limits' | translate}}
</mat-checkbox> </mat-error>
</ng-template> </mat-form-field>
</mat-expansion-panel> <mat-form-field class="mat-block">
</mat-accordion> <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-public-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>
</section> </section>

29
ui-ngx/src/app/modules/home/components/profile/tenant/default-tenant-profile-configuration.component.ts

@ -80,22 +80,19 @@ export class DefaultTenantProfileConfigurationComponent implements ControlValueA
defaultStorageTtlDays: [null, [Validators.required, Validators.min(0)]], defaultStorageTtlDays: [null, [Validators.required, Validators.min(0)]],
alarmsTtlDays: [null, [Validators.required, Validators.min(0)]], alarmsTtlDays: [null, [Validators.required, Validators.min(0)]],
rpcTtlDays: [null, [Validators.required, Validators.min(0)]], rpcTtlDays: [null, [Validators.required, Validators.min(0)]],
tenantServerRestLimitsConfiguration: [null, [Validators.pattern(this.rateLimitsPattern)]],
rateLimitsTenantConfiguration: [null, [Validators.pattern(this.rateLimitsPattern)]], customerServerRestLimitsConfiguration: [null, [Validators.pattern(this.rateLimitsPattern)]],
rateLimitsCustomerConfiguration: [null, [Validators.pattern(this.rateLimitsPattern)]], maxWsSessionsPerTenant: [null, [Validators.min(0)]],
maxWsSessionsPerCustomer: [null, [Validators.min(0)]],
wsLimitMaxSessionsPerTenant: [null, [Validators.min(0)]], maxWsSessionsPerRegularUser: [null, [Validators.min(0)]],
wsLimitMaxSessionsPerCustomer: [null, [Validators.min(0)]], maxWsSessionsPerPublicUser: [null, [Validators.min(0)]],
wsLimitMaxSessionsPerPublicUser: [null, [Validators.min(0)]], wsMsgQueueLimitPerSession: [null, [Validators.min(0)]],
wsLimitQueuePerWsSession: [null, [Validators.min(0)]], maxWsSubscriptionsPerTenant: [null, [Validators.min(0)]],
wsLimitMaxSubscriptionsPerTenant: [null, [Validators.min(0)]], maxWsSubscriptionsPerCustomer: [null, [Validators.min(0)]],
wsLimitMaxSubscriptionsPerCustomer: [null, [Validators.min(0)]], maxWsSubscriptionsPerRegularUser: [null, [Validators.min(0)]],
wsLimitMaxSubscriptionsPerRegularUser: [null, [Validators.min(0)]], maxWsSubscriptionsPerPublicUser: [null, [Validators.min(0)]],
wsLimitMaxSubscriptionsPerPublicUser: [null, [Validators.min(0)]], wsUpdatesPerSessionRateLimit: [null, [Validators.pattern(this.rateLimitsPattern)]],
wsLimitUpdatesPerSession: [null, [Validators.pattern(this.rateLimitsPattern)]], cassandraQueryTenantRateLimitsConfiguration: [null, [Validators.pattern(this.rateLimitsPattern)]]
cassandraTenantLimitsConfiguration: [null, [Validators.pattern(this.rateLimitsPattern)]],
printTenantNames: [null, []]
}); });
this.defaultTenantProfileConfigurationFormGroup.valueChanges.subscribe(() => { this.defaultTenantProfileConfigurationFormGroup.valueChanges.subscribe(() => {
this.updateModel(); this.updateModel();

61
ui-ngx/src/app/shared/models/tenant.model.ts

@ -51,22 +51,21 @@ export interface DefaultTenantProfileConfiguration {
maxSms: number; maxSms: number;
maxCreatedAlarms: number; maxCreatedAlarms: number;
rateLimitsTenantConfiguration: string; tenantServerRestLimitsConfiguration: string;
rateLimitsCustomerConfiguration: string; customerServerRestLimitsConfiguration: string;
wsLimitMaxSessionsPerTenant: number; maxWsSessionsPerTenant: number;
wsLimitMaxSessionsPerCustomer: number; maxWsSessionsPerCustomer: number;
wsLimitMaxSessionsPerRegularUser: number; maxWsSessionsPerRegularUser: number;
wsLimitMaxSessionsPerPublicUser: number; maxWsSessionsPerPublicUser: number;
wsLimitQueuePerWsSession: number; wsMsgQueueLimitPerSession: number;
wsLimitMaxSubscriptionsPerTenant: number; maxWsSubscriptionsPerTenant: number;
wsLimitMaxSubscriptionsPerCustomer: number; maxWsSubscriptionsPerCustomer: number;
wsLimitMaxSubscriptionsPerRegularUser: number; maxWsSubscriptionsPerRegularUser: number;
wsLimitMaxSubscriptionsPerPublicUser: number; maxWsSubscriptionsPerPublicUser: number;
wsLimitUpdatesPerSession: string; wsUpdatesPerSessionRateLimit: string;
cassandraTenantLimitsConfiguration: string; cassandraQueryTenantRateLimitsConfiguration: string;
printTenantNames: boolean;
defaultStorageTtlDays: number; defaultStorageTtlDays: number;
alarmsTtlDays: number; alarmsTtlDays: number;
@ -102,26 +101,22 @@ export function createTenantProfileConfiguration(type: TenantProfileType): Tenan
maxEmails: 0, maxEmails: 0,
maxSms: 0, maxSms: 0,
maxCreatedAlarms: 0, maxCreatedAlarms: 0,
tenantServerRestLimitsConfiguration: '',
customerServerRestLimitsConfiguration: '',
maxWsSessionsPerTenant: 0,
maxWsSessionsPerCustomer: 0,
maxWsSessionsPerRegularUser: 0,
maxWsSessionsPerPublicUser: 0,
wsMsgQueueLimitPerSession: 0,
maxWsSubscriptionsPerTenant: 0,
maxWsSubscriptionsPerCustomer: 0,
maxWsSubscriptionsPerRegularUser: 0,
maxWsSubscriptionsPerPublicUser: 0,
wsUpdatesPerSessionRateLimit: '',
cassandraQueryTenantRateLimitsConfiguration: '',
defaultStorageTtlDays: 0, defaultStorageTtlDays: 0,
alarmsTtlDays: 0, alarmsTtlDays: 0,
rpcTtlDays: 0, rpcTtlDays: 0,
rateLimitsTenantConfiguration: '',
rateLimitsCustomerConfiguration: '',
wsLimitMaxSessionsPerTenant: 0,
wsLimitMaxSessionsPerCustomer: 0,
wsLimitMaxSessionsPerRegularUser: 0,
wsLimitMaxSessionsPerPublicUser: 0,
wsLimitQueuePerWsSession: 500,
wsLimitMaxSubscriptionsPerTenant: 0,
wsLimitMaxSubscriptionsPerCustomer: 0,
wsLimitMaxSubscriptionsPerRegularUser: 0,
wsLimitMaxSubscriptionsPerPublicUser: 0,
wsLimitUpdatesPerSession: '' ,
cassandraTenantLimitsConfiguration: '',
printTenantNames: false
}; };
configuration = {...defaultConfiguration, type: TenantProfileType.DEFAULT}; configuration = {...defaultConfiguration, type: TenantProfileType.DEFAULT};
break; break;

31
ui-ngx/src/assets/locale/locale.constant-en_US.json

@ -2814,22 +2814,21 @@
"max-created-alarms": "Maximum number of alarms created (0 - unlimited)", "max-created-alarms": "Maximum number of alarms created (0 - unlimited)",
"max-created-alarms-required": "Maximum number of alarms created is required.", "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-created-alarms-range": "Maximum number of alarms created can't be negative",
"tenant-rest-limits": "Server limits of request for Tenant", "tenant-rest-limits": "Rate limit for REST requests for tenant",
"customer-rest-limits": "Server limits of request for Customer", "customer-rest-limits": "Rate limit for REST requests for customer",
"incorrect-pattern-for-rate-limits": "Here should be conformity of a number of requests per seconds divided by colon, comma separated. For example: 100:1,2000:60", "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": "Too small value specified, it should be more than 0", "too-small-value-zero": "The value must be bigger than 0",
"too-small-value-one": "Too small value specified, it should be more than 1", "too-small-value-one": "The value must be bigger than 1",
"cassandra-tenant-limits-configuration": "Tenant limits configuration", "cassandra-tenant-limits-configuration": "Cassandra query rate limit for tenant",
"ws-limit-max-sessions-per-tenant": "Max sessions per Tenant", "ws-limit-max-sessions-per-tenant": "Maximum number of WS sessions per tenant",
"ws-limit-max-sessions-per-customer": "Max sessions per Customer", "ws-limit-max-sessions-per-customer": "Maximum number of WS sessions per customer",
"ws-limit-max-sessions-per-public-user": "Max sessions per Public User", "ws-limit-max-sessions-per-public-user": "Maximum number of WS sessions per public user",
"ws-limit-queue-per-session": "Limit queue per session", "ws-limit-queue-per-session": "Maximum size of WS message queue per session",
"ws-limit-max-subscriptions-per-tenant": "Max subscriptions per Tenant", "ws-limit-max-subscriptions-per-tenant": "Maximum number of WS subscriptions per tenant",
"ws-limit-max-subscriptions-per-customer": "Max subscriptions per Customer", "ws-limit-max-subscriptions-per-customer": "Maximum number of WS subscriptions per customer",
"ws-limit-max-subscriptions-per-regular-user": "Max subscriptions per regular User", "ws-limit-max-subscriptions-per-regular-user": "Maximum number of WS subscriptions per regular user",
"ws-limit-max-subscriptions-per-public-user": "Max subscriptions per public User", "ws-limit-max-subscriptions-per-public-user": "Maximum number of WS subscriptions per public user",
"ws-limit-updates-per-session": "Constraint of updates per session", "ws-limit-updates-per-session": "Rate limit for WS updates per session"
"cassandra-print-tenant-names": "Print Tenant names to log"
}, },
"timeinterval": { "timeinterval": {
"seconds-interval": "{ seconds, plural, 1 {1 second} other {# seconds} }", "seconds-interval": "{ seconds, plural, 1 {1 second} other {# seconds} }",

Loading…
Cancel
Save