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