//-
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You 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.

include /app/helpers/jade/mixins

-var model = '$ctrl.clonedCluster.collision.PriorityQueue'

.pc-form-grid-col-30
    +form-field__number({
        label: 'Parallel jobs number:',
        model: `${model}.parallelJobsNumber`,
        name: '"priorityParallelJobsNumber"',
        placeholder: 'availableProcessors * 2',
        min: '1',
        tip: 'Number of jobs that can be executed in parallel'
    })
.pc-form-grid-col-30
    +form-field__number({
        label: 'Waiting jobs number:',
        model: `${model}.waitingJobsNumber`,
        name: '"priorityWaitingJobsNumber"',
        placeholder: 'Integer.MAX_VALUE',
        min: '0',
        tip: 'Maximum number of jobs that are allowed to wait in waiting queue'
    })
.pc-form-grid-col-30
    +form-field__text({
        label: 'Priority attribute key:',
        model: `${model}.priorityAttributeKey`,
        name: '"priorityPriorityAttributeKey"',
        placeholder: 'grid.task.priority',
        tip: 'Task priority attribute key'
    })
.pc-form-grid-col-30
    +form-field__text({
        label: 'Job priority attribute key:',
        model: `${model}.jobPriorityAttributeKey`,
        name: '"priorityJobPriorityAttributeKey"',
        placeholder: 'grid.job.priority',
        tip: 'Job priority attribute key'
    })
.pc-form-grid-col-30
    +form-field__number({
        label: 'Default priority:',
        model: `${model}.defaultPriority`,
        name: '"priorityDefaultPriority"',
        placeholder: '0',
        min: '0',
        tip: 'Default priority to use if a job does not have priority attribute set'
    })
.pc-form-grid-col-30
    +form-field__number({
        label: 'Starvation increment:',
        model: `${model}.starvationIncrement`,
        name: '"priorityStarvationIncrement"',
        placeholder: '1',
        min: '0',
        tip: 'Value to increment job priority by every time a lower priority job gets behind a higher priority job'
    })
.pc-form-grid-col-60
    +form-field__checkbox({
        label: 'Starvation prevention enabled',
        model: `${model}.starvationPreventionEnabled`,
        name: '"priorityStarvationPreventionEnabled"',
        tip: 'Job starvation prevention is enabled'
    })
