25 changed files with 382 additions and 580 deletions
@ -1,194 +0,0 @@ |
|||||
<!-- |
|
||||
|
|
||||
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. |
|
||||
|
|
||||
--> |
|
||||
<mat-expansion-panel fxFlex [formGroup]="queueFormGroup" [(expanded)]="expanded"> |
|
||||
<mat-expansion-panel-header> |
|
||||
<div fxFlex fxLayout="row" fxLayoutAlign="start center"> |
|
||||
<mat-panel-title> |
|
||||
<div fxLayout="row" fxFlex fxLayoutAlign="start center"> |
|
||||
{{ queueTitle }} |
|
||||
</div> |
|
||||
</mat-panel-title> |
|
||||
<span fxFlex></span> |
|
||||
<button *ngIf="!mainQueue && !disabled" mat-icon-button style="min-width: 40px;" |
|
||||
type="button" |
|
||||
(click)="removeQueue.emit()" |
|
||||
matTooltip="{{ 'action.remove' | translate }}" |
|
||||
matTooltipPosition="above"> |
|
||||
<mat-icon>delete</mat-icon> |
|
||||
</button> |
|
||||
</div> |
|
||||
</mat-expansion-panel-header> |
|
||||
<ng-template matExpansionPanelContent> |
|
||||
<div fxLayout="column" fxLayoutGap="0.5em"> |
|
||||
<mat-divider></mat-divider> |
|
||||
<mat-form-field class="mat-block"> |
|
||||
<mat-label translate>admin.queue-name</mat-label> |
|
||||
<input matInput formControlName="name" required> |
|
||||
<mat-error *ngIf="queueFormGroup.get('name').hasError('required')"> |
|
||||
{{ 'queue.name-required' | 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> |
|
||||
<mat-expansion-panel-header> |
|
||||
<mat-panel-title translate> |
|
||||
queue.submit-strategy |
|
||||
</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"> |
|
||||
{{ strategy }} |
|
||||
</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> |
|
||||
</div> |
|
||||
</ng-template> |
|
||||
</mat-expansion-panel> |
|
||||
<mat-expansion-panel> |
|
||||
<mat-expansion-panel-header> |
|
||||
<mat-panel-title translate> |
|
||||
queue.processing-strategy |
|
||||
</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"> |
|
||||
{{ strategy }} |
|
||||
</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') && |
|
||||
!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') && |
|
||||
!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') && |
|
||||
!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') && |
|
||||
!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') && |
|
||||
!queueFormGroup.get('processingStrategy.maxPauseBetweenRetries').hasError('required')"> |
|
||||
{{ 'queue.max-pause-between-retries-min-value' | translate }} |
|
||||
</mat-error> |
|
||||
</mat-form-field> |
|
||||
</div> |
|
||||
</ng-template> |
|
||||
</mat-expansion-panel> |
|
||||
</mat-accordion> |
|
||||
</div> |
|
||||
</ng-template> |
|
||||
</mat-expansion-panel> |
|
||||
@ -0,0 +1,171 @@ |
|||||
|
<!-- |
||||
|
|
||||
|
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. |
||||
|
|
||||
|
--> |
||||
|
|
||||
|
<form [formGroup]="queueFormGroup" fxLayout="column" fxLayoutGap="0.5em"> |
||||
|
<mat-form-field class="mat-block"> |
||||
|
<mat-label translate>admin.queue-name</mat-label> |
||||
|
<input matInput formControlName="name" required> |
||||
|
<mat-error *ngIf="queueFormGroup.get('name').hasError('required')"> |
||||
|
{{ 'queue.name-required' | 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> |
||||
|
<mat-expansion-panel-header> |
||||
|
<mat-panel-title translate> |
||||
|
queue.submit-strategy |
||||
|
</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"> |
||||
|
{{ strategy }} |
||||
|
</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> |
||||
|
</div> |
||||
|
</ng-template> |
||||
|
</mat-expansion-panel> |
||||
|
<mat-expansion-panel> |
||||
|
<mat-expansion-panel-header> |
||||
|
<mat-panel-title translate> |
||||
|
queue.processing-strategy |
||||
|
</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"> |
||||
|
{{ strategy }} |
||||
|
</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') && |
||||
|
!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') && |
||||
|
!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') && |
||||
|
!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') && |
||||
|
!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') && |
||||
|
!queueFormGroup.get('processingStrategy.maxPauseBetweenRetries').hasError('required')"> |
||||
|
{{ 'queue.max-pause-between-retries-min-value' | translate }} |
||||
|
</mat-error> |
||||
|
</mat-form-field> |
||||
|
</div> |
||||
|
</ng-template> |
||||
|
</mat-expansion-panel> |
||||
|
</mat-accordion> |
||||
|
</form> |
||||
@ -1,22 +0,0 @@ |
|||||
/** |
|
||||
* 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 ::ng-deep { |
|
||||
.queue-form { |
|
||||
.mat-expansion-panel-body { |
|
||||
padding-bottom: 0 !important; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue