Skip to content

Commit a49a976

Browse files
author
William Hou
committed
scale request validation flag for >=10 scale down
1 parent 08b8874 commit a49a976

3 files changed

Lines changed: 19 additions & 6 deletions

File tree

SingularityUI/app/actions/api/requests.es6

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ export const PersistSkipRequestHealthchecks = buildJsonApiAction(
137137
export const ScaleRequest = buildJsonApiAction(
138138
'SCALE_REQUEST',
139139
'PUT',
140-
(requestId, {instances, skipHealthchecks, durationMillis, message, actionId, bounce, incremental }) => ({
141-
url: `/requests/request/${requestId}/scale`,
140+
(requestId, {instances, skipHealthchecks, durationMillis, message, actionId, bounce, incremental, largeScaleDownAcknowledged }) => ({
141+
url: `/requests/request/${requestId}/scale?largeScaleDownAcknowledged=${largeScaleDownAcknowledged}`,
142142
body: { instances, skipHealthchecks, durationMillis, message, actionId, bounce, incremental }
143143
})
144144
);

SingularityUI/app/components/common/modal/FormModal.jsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,17 @@ export default class FormModal extends React.Component {
4545
}
4646

4747
static FormItem = (props) => {
48-
if ((props.element.dependsOn && props.formState[props.element.dependsOn]) || !props.element.dependsOn) {
48+
const noDepends = (!props.element.dependsOn && !props.element.dependsOnFormState);
49+
const dependsOnOk = (props.element.dependsOn && props.formState[props.element.dependsOn]);
50+
const dependsOnFormStateOk = (props.element.dependsOnFormState && props.element.dependsOnFormState(props.formState));
51+
if (noDepends || dependsOnOk || dependsOnFormStateOk) {
4952
return (
5053
<div className={classNames(props.className, {'childItem': props.formState[props.element.dependsOn]})}>
5154
{props.children}
5255
</div>
5356
);
5457
}
58+
5559
return null;
5660
};
5761

@@ -502,6 +506,7 @@ FormModal.propTypes = {
502506
values: React.PropTypes.array,
503507
defaultValue: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.bool, React.PropTypes.number, React.PropTypes.array]),
504508
validateField: React.PropTypes.func, // String -> String, return field validation error or falsey value if valid
505-
dependsOn: React.PropTypes.string // Only show this item if the other item (referenced by name) has a truthy value
509+
dependsOn: React.PropTypes.string, // Only show this item if the other item (referenced by name) has a truthy value
510+
dependsOnFormState: React.PropTypes.func, // Only show this item if this function applied to form state returns a truthy value
506511
})).isRequired
507512
};

SingularityUI/app/components/common/modalButtons/ScaleModal.jsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,16 @@ class ScaleModal extends Component {
3939
}
4040

4141
handleScale(data) {
42-
const { instances, durationMillis, message, bounce, incremental } = data;
42+
const { instances, durationMillis, message, bounce, incremental, largeScaleDownAcknowledged } = data;
4343
const isIncremental = incremental === 'incremental';
4444
this.props.scaleRequest(
4545
{
4646
instances,
4747
durationMillis,
4848
message,
4949
bounce,
50-
incremental: isIncremental
50+
incremental: isIncremental,
51+
largeScaleDownAcknowledged
5152
}
5253
);
5354
}
@@ -95,6 +96,13 @@ class ScaleModal extends Component {
9596
name: 'message',
9697
type: FormModal.INPUT_TYPES.STRING,
9798
label: 'Message: (optional)'
99+
},
100+
{
101+
name: 'largeScaleDownAcknowledged',
102+
type: FormModal.INPUT_TYPES.BOOLEAN,
103+
label: 'Explciit acknowledgement of large (>=10) scale down',
104+
defaultValue: false,
105+
dependsOnFormState: data => (this.props.currentInstances - data.instances) >= 10,
98106
}
99107
]}>
100108
<p>Scaling request:</p>

0 commit comments

Comments
 (0)