import { set } from 'lodash'; import React from 'react'; import type { Option } from 'react-select'; import Select from 'react-select'; import type { IDeploymentStrategyAdditionalFieldsProps } from '../../deploymentStrategy.registry'; import { NumberList } from '../../../forms'; import { HelpField } from '../../../help/HelpField'; import type { IDeploymentMonitorDefinition } from '../../../pipeline/config/stages/monitoreddeploy/DeploymentMonitorReader'; import { DeploymentMonitorReader } from '../../../pipeline/config/stages/monitoreddeploy/DeploymentMonitorReader'; import type { IServerGroupCommand } from '../../../serverGroup'; export interface IMonitoredDeployCommand extends IServerGroupCommand { delayBeforeScaleDownSec: string; failureActions: { destroyInstances: boolean; rollback: string; }; maxRemainingAsgs: number; scaleDown: boolean; deploySteps: number[] | string; deploymentMonitor: { id: string; parameters: {}; }; } export enum RollbackType { None = 'None', Automatic = 'Automatic', Manual = 'Manual', } export interface IMonitoredDeployStrategyAdditionalFieldsProps extends IDeploymentStrategyAdditionalFieldsProps { command: IMonitoredDeployCommand; } export interface IMonitoredDeployStrategyAdditionalFieldsState { deploymentMonitors: IDeploymentMonitorDefinition[]; } export class AdditionalFields extends React.Component< IMonitoredDeployStrategyAdditionalFieldsProps, IMonitoredDeployStrategyAdditionalFieldsState > { public state: IMonitoredDeployStrategyAdditionalFieldsState = { deploymentMonitors: [], }; public componentDidMount() { DeploymentMonitorReader.getDeploymentMonitors().then((deploymentMonitors) => { this.setState({ deploymentMonitors }); }); } private deployStepsChange = (model: number[] | string) => { this.props.command.deploySteps = model; this.forceUpdate(); }; private scaleDownChange = (e: React.ChangeEvent) => { this.props.command.scaleDown = e.target.checked; this.forceUpdate(); }; private rollbackOnFailureChange = (e: React.ChangeEvent) => { this.props.command.failureActions.rollback = e.target.checked ? RollbackType.Automatic : RollbackType.None; if (this.props.command.failureActions.rollback === RollbackType.None) { this.props.command.failureActions.destroyInstances = false; } this.forceUpdate(); }; private destroyFailedAsgChange = (e: React.ChangeEvent) => { this.props.command.failureActions.destroyInstances = e.target.checked; this.forceUpdate(); }; private maxRemainingAsgsChange = (e: React.ChangeEvent) => { this.props.command.maxRemainingAsgs = parseInt(e.target.value, 10); this.forceUpdate(); }; private handleDeploymentMonitorChange = (option: Option) => { this.props.command.deploymentMonitor.id = option.value; this.forceUpdate(); }; private handleChange = (key: string, value: string) => { set(this.props.command, key, value); this.forceUpdate(); }; public render() { const { command } = this.props; const rollbackOnFailure = command.failureActions && command.failureActions.rollback === RollbackType.Automatic; const destroyFailedAsg = command.failureActions && command.failureActions.destroyInstances; return (
{this.state.deploymentMonitors && (
{command.scaleDown && (
this.handleChange('delayBeforeScaleDownSec', e.target.value)} placeholder="0" /> seconds
)}

Percentages

); } }