Skip to content

Commit

Permalink
feat(kayenta): support explicitly disallowing canary config editing i…
Browse files Browse the repository at this point in the history
…n the spinnaker ui
  • Loading branch information
stevenlandrydd committed May 14, 2024
1 parent cf21606 commit 3cfdc77
Show file tree
Hide file tree
Showing 20 changed files with 112 additions and 54 deletions.
4 changes: 2 additions & 2 deletions src/kayenta/edit/changeMetricGroupModal.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as Creators from 'kayenta/actions/creators';
import { ICanaryMetricConfig } from 'kayenta/domain/ICanaryConfig';
import { DISABLE_EDIT_CONFIG, DisableableSelect } from 'kayenta/layout/disableable';
import { CANARY_EDIT_DISABLED, DISABLE_EDIT_CONFIG, DisableableSelect } from 'kayenta/layout/disableable';
import Styleguide from 'kayenta/layout/styleguide';
import { ICanaryState } from 'kayenta/reducers';
import * as React from 'react';
Expand Down Expand Up @@ -43,7 +43,7 @@ function ChangeMetricGroupModal({
value={toGroup || ''}
onChange={select}
className="form-control input-sm"
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
>
<option value={''}>-- select group --</option>
{groups.map((g) => (
Expand Down
3 changes: 2 additions & 1 deletion src/kayenta/edit/configDetailHeader.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { UISref } from '@uirouter/react';
import { CanarySettings } from 'kayenta/canary.settings';
import { ICanaryConfig } from 'kayenta/domain';
import FormattedDate from 'kayenta/layout/formattedDate';
import { ICanaryState } from 'kayenta/reducers';
Expand Down Expand Up @@ -80,7 +81,7 @@ function ConfigDetailHeader({ selectedConfig, editingDisabled }: IConfigDetailSt
function mapStateToProps(state: ICanaryState): IConfigDetailStateProps {
return {
selectedConfig: mapStateToConfig(state),
editingDisabled: state.app.disableConfigEdit,
editingDisabled: state.app.disableConfigEdit || CanarySettings.disableConfigEdit,
};
}

Expand Down
4 changes: 2 additions & 2 deletions src/kayenta/edit/configJsonModal.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'brace/ext/searchbox';
import 'brace/mode/json';
import * as Creators from 'kayenta/actions/creators';
import { DISABLE_EDIT_CONFIG } from 'kayenta/layout/disableable';
import { CanarySettings } from 'kayenta/canary.settings';
import Styleguide from 'kayenta/layout/styleguide';
import { Tab, Tabs } from 'kayenta/layout/tabs';
import { ICanaryState } from 'kayenta/reducers';
Expand Down Expand Up @@ -142,7 +142,7 @@ function mapStateToProps(state: ICanaryState): IConfigJsonStateProps {
state.selectedConfig.json.configJson ||
JsonUtils.makeSortedStringFromObject(omit(mapStateToConfig(state) || {}, 'id'));

const disabled = get(state, DISABLE_EDIT_CONFIG, false);
const disabled = state.app.disableConfigEdit || CanarySettings.disableConfigEdit;

return {
configJson,
Expand Down
4 changes: 3 additions & 1 deletion src/kayenta/edit/copyConfigButton.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { UISref } from '@uirouter/react';
import { CanarySettings } from 'kayenta/canary.settings';
import { get } from 'lodash';
import * as React from 'react';
import { connect } from 'react-redux';
Expand All @@ -25,7 +26,8 @@ function CopyConfigButton({ disabled }: ICopyConfigButtonStateProps) {

function mapStateToProps(state: ICanaryState) {
return {
disabled: get(state.selectedConfig, 'config.isNew') || state.app.disableConfigEdit,
disabled:
get(state.selectedConfig, 'config.isNew') || state.app.disableConfigEdit || CanarySettings.disableConfigEdit,
};
}

Expand Down
3 changes: 2 additions & 1 deletion src/kayenta/edit/createConfigButton.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { UISref } from '@uirouter/react';
import { CanarySettings } from 'kayenta/canary.settings';
import * as React from 'react';
import { connect } from 'react-redux';

Expand Down Expand Up @@ -26,7 +27,7 @@ function CreateConfigButton({ disabled }: ICreateConfigButtonStateProps) {

function mapStateToProps(state: ICanaryState): ICreateConfigButtonStateProps {
return {
disabled: state.selectedConfig.config && state.selectedConfig.config.isNew,
disabled: (state.selectedConfig.config && state.selectedConfig.config.isNew) || CanarySettings.disableConfigEdit,
};
}

Expand Down
7 changes: 4 additions & 3 deletions src/kayenta/edit/editMetricEffectSizes.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as Creators from 'kayenta/actions/creators';
import { CanarySettings } from 'kayenta/canary.settings';
import { ICanaryMetricEffectSizeConfig } from 'kayenta/domain';
import FormRow from 'kayenta/layout/formRow';
import RadioChoice from 'kayenta/layout/radioChoice';
Expand All @@ -8,7 +9,7 @@ import { connect } from 'react-redux';

import { HelpField, robotToHuman } from '@spinnaker/core';

import { DISABLE_EDIT_CONFIG, DisableableInput } from '../layout/disableable';
import { CANARY_EDIT_DISABLED, DISABLE_EDIT_CONFIG, DisableableInput } from '../layout/disableable';

interface IEditMetricEffectSizesProps {
metricId: string;
Expand Down Expand Up @@ -114,7 +115,7 @@ export function EditMetricEffectSizes({
step={isCles ? 0.01 : 1}
onChange={(e) => updateSize(field, e.target.value)}
value={isCles ? value : toPercent(value, field)}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
{!isCles && <div className="input-group-addon">%</div>}
</div>
Expand Down Expand Up @@ -169,7 +170,7 @@ function mapStateToProps(state: ICanaryState): IEditMetricEffectSizesProps {
return {
metricId: state.selectedConfig.editingMetric.id,
direction: state.selectedConfig.editingMetric.analysisConfigurations?.canary?.direction ?? 'either',
disabled: state.app.disableConfigEdit,
disabled: state.app.disableConfigEdit || CanarySettings.disableConfigEdit,
effectSizes: state.selectedConfig.editingMetric.analysisConfigurations?.canary?.effectSize ?? {},
};
}
Expand Down
27 changes: 19 additions & 8 deletions src/kayenta/edit/editMetricModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ import classNames from 'classnames';
import * as Creators from 'kayenta/actions/creators';
import { CanarySettings } from 'kayenta/canary.settings';
import { ICanaryMetricConfig } from 'kayenta/domain';
import { DISABLE_EDIT_CONFIG, DisableableInput, DisableableSelect } from 'kayenta/layout/disableable';
import {
CANARY_EDIT_DISABLED,
DISABLE_EDIT_CONFIG,
DisableableInput,
DisableableSelect,
} from 'kayenta/layout/disableable';
import FormRow from 'kayenta/layout/formRow';
import RadioChoice from 'kayenta/layout/radioChoice';
import Styleguide from 'kayenta/layout/styleguide';
Expand Down Expand Up @@ -69,7 +74,11 @@ function EditMetricModal({
const direction = metric.analysisConfigurations?.canary?.direction ?? 'either';
const nanStrategy = metric.analysisConfigurations?.canary?.nanStrategy ?? 'default';
const critical = metric.analysisConfigurations?.canary?.critical ?? false;
const isConfirmDisabled = !isTemplateValid || disableEdit || values(validationErrors).some((e) => !isNull(e));
const isConfirmDisabled =
!isTemplateValid ||
disableEdit ||
CanarySettings.disableConfigEdit ||
values(validationErrors).some((e) => !isNull(e));

const metricGroup = metric.groups.length ? metric.groups[0] : groups[0];
const templatesEnabled =
Expand All @@ -80,7 +89,9 @@ function EditMetricModal({
<Modal bsSize="large" show={true} onHide={noop} className={classNames('kayenta-edit-metric-modal')}>
<Styleguide>
<Modal.Header>
<Modal.Title>{disableEdit ? 'Metric Details' : 'Configure Metric'}</Modal.Title>
<Modal.Title>
{disableEdit || CanarySettings.disableConfigEdit ? 'Metric Details' : 'Configure Metric'}
</Modal.Title>
</Modal.Header>
<Modal.Body>
<FormRow label="Group" inputOnly={true}>
Expand All @@ -90,15 +101,15 @@ function EditMetricModal({
value={metric.groups}
data-id={metric.id}
onChange={changeGroup}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
)}
{metric.groups.length < 2 && (
<DisableableSelect
value={metricGroup}
onChange={changeGroup}
className="form-control input-sm"
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
>
{groups.map((g) => (
<option key={g} value={g}>
Expand All @@ -114,7 +125,7 @@ function EditMetricModal({
value={metric.name}
data-id={metric.id}
onChange={rename}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
</FormRow>
<FormRow label="Fail on">
Expand All @@ -140,7 +151,7 @@ function EditMetricModal({
type="checkbox"
checked={critical}
onChange={updateCriticality}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
Fail the canary if this metric fails
</label>
Expand Down Expand Up @@ -227,7 +238,7 @@ function mapStateToProps(state: ICanaryState): IEditMetricModalStateProps {
isTemplateValid: isTemplateValidSelector(state),
// eslint-disable-next-line react-hooks/rules-of-hooks
useInlineTemplateEditor: useInlineTemplateEditorSelector(state),
disableEdit: state.app.disableConfigEdit,
disableEdit: state.app.disableConfigEdit || CanarySettings.disableConfigEdit,
validationErrors: editingMetricValidationErrorsSelector(state),
};
}
Expand Down
7 changes: 4 additions & 3 deletions src/kayenta/edit/filterTemplateSelector.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import * as Creators from 'kayenta/actions/creators';
import { ICanaryFilterTemplateValidationMessages } from 'kayenta/edit/filterTemplatesValidation';
import {
CANARY_EDIT_DISABLED,
DISABLE_EDIT_CONFIG,
DisableableInput,
DisableableReactSelect,
Expand Down Expand Up @@ -94,7 +95,7 @@ export class FilterTemplateSelector extends React.Component<IFilterTemplateSelec
{!isEditing && (
<DisableableReactSelect
value={selectedTemplateName}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
onChange={selectTemplate}
options={this.getOptions()}
optionRenderer={this.optionRenderer}
Expand All @@ -105,7 +106,7 @@ export class FilterTemplateSelector extends React.Component<IFilterTemplateSelec
<>
<FormRow label="Name" error={get(validation, 'errors.templateName.message')} inputOnly={true}>
<DisableableInput
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
onChange={editTemplateName}
value={editedTemplateName}
/>
Expand All @@ -118,7 +119,7 @@ export class FilterTemplateSelector extends React.Component<IFilterTemplateSelec
>
<DisableableTextarea
className="template-editor-textarea"
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
onChange={editTemplateValue}
value={editedTemplateValue}
/>
Expand Down
4 changes: 2 additions & 2 deletions src/kayenta/edit/groupName.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as Creators from 'kayenta/actions/creators';
import { DISABLE_EDIT_CONFIG, DisableableInput } from 'kayenta/layout/disableable';
import { CANARY_EDIT_DISABLED, DISABLE_EDIT_CONFIG, DisableableInput } from 'kayenta/layout/disableable';
import { ICanaryState } from 'kayenta/reducers';
import * as React from 'react';
import { connect } from 'react-redux';
Expand Down Expand Up @@ -42,7 +42,7 @@ function GroupName({
autoFocus={true}
value={edit}
onChange={handleUpdate}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
</form>
);
Expand Down
17 changes: 12 additions & 5 deletions src/kayenta/edit/groupTabs.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import classNames from 'classnames';
import * as Creators from 'kayenta/actions/creators';
import { DISABLE_EDIT_CONFIG, DisableableButton } from 'kayenta/layout/disableable';
import { CanarySettings } from 'kayenta/canary.settings';
import { CANARY_EDIT_DISABLED, DISABLE_EDIT_CONFIG, DisableableButton } from 'kayenta/layout/disableable';
import { Tab, Tabs } from 'kayenta/layout/tabs';
import { ICanaryState } from 'kayenta/reducers';
import * as React from 'react';
Expand Down Expand Up @@ -46,8 +47,10 @@ function GroupTabs({
{selected && editable && !editing && (
<i
data-group={group}
onClick={disableConfigEdit ? noop : editGroupBegin}
className={classNames('fas', 'fa-pencil-alt', { disabled: disableConfigEdit })}
onClick={disableConfigEdit || CanarySettings.disableConfigEdit ? noop : editGroupBegin}
className={classNames('fas', 'fa-pencil-alt', {
disabled: disableConfigEdit || CanarySettings.disableConfigEdit,
})}
/>
)}
</Tab>
Expand All @@ -60,7 +63,11 @@ function GroupTabs({
{groupList.map((group) => (
<GroupTab key={group} group={group} editable={true} />
))}
<DisableableButton className="passive float-right" onClick={addGroup} disabledStateKeys={[DISABLE_EDIT_CONFIG]}>
<DisableableButton
className="passive float-right"
onClick={addGroup}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
>
Add Group
</DisableableButton>
</Tabs>
Expand All @@ -73,7 +80,7 @@ function mapStateToProps(state: ICanaryState): IGroupTabsStateProps {
groupList: state.selectedConfig.group.list,
selectedGroup: state.selectedConfig.group.selected,
editing: !!state.selectedConfig.group.edit || state.selectedConfig.group.edit === '',
disableConfigEdit: state.app.disableConfigEdit,
disableConfigEdit: state.app.disableConfigEdit || CanarySettings.disableConfigEdit,
};
}

Expand Down
4 changes: 2 additions & 2 deletions src/kayenta/edit/groupWeight.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as Creators from 'kayenta/actions/creators';
import { ICanaryConfig } from 'kayenta/domain/ICanaryConfig';
import { DISABLE_EDIT_CONFIG, DisableableInput } from 'kayenta/layout/disableable';
import { CANARY_EDIT_DISABLED, DISABLE_EDIT_CONFIG, DisableableInput } from 'kayenta/layout/disableable';
import { ICanaryState } from 'kayenta/reducers';
import { mapStateToConfig } from 'kayenta/service/canaryConfig.service';
import { get, isNumber } from 'lodash';
Expand Down Expand Up @@ -39,7 +39,7 @@ function GroupWeight({
onChange={handleInputChange}
min={0}
max={100}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
</FormRow>
);
Expand Down
4 changes: 2 additions & 2 deletions src/kayenta/edit/inlineTemplateEditor.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as Creators from 'kayenta/actions/creators';
import { DISABLE_EDIT_CONFIG, DisableableTextarea } from 'kayenta/layout/disableable';
import { CANARY_EDIT_DISABLED, DISABLE_EDIT_CONFIG, DisableableTextarea } from 'kayenta/layout/disableable';
import FormRow from 'kayenta/layout/formRow';
import { ICanaryState } from 'kayenta/reducers';
import {
Expand Down Expand Up @@ -35,7 +35,7 @@ export function InlineTemplateEditor({
>
<DisableableTextarea
className="template-editor-textarea"
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
onChange={(e: any) => editTemplateValue(transformValueForSave(e.target.value))}
value={templateValue}
/>
Expand Down
11 changes: 8 additions & 3 deletions src/kayenta/edit/judgeSelect.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import * as Creators from 'kayenta/actions/creators';
import { DISABLE_EDIT_CONFIG, DisableableInput, DisableableReactSelect } from 'kayenta/layout/disableable';
import {
CANARY_EDIT_DISABLED,
DISABLE_EDIT_CONFIG,
DisableableInput,
DisableableReactSelect,
} from 'kayenta/layout/disableable';
import FormRow from 'kayenta/layout/formRow';
import { ICanaryState } from 'kayenta/reducers';
import * as React from 'react';
Expand Down Expand Up @@ -41,7 +46,7 @@ function JudgeSelect({
options={judgeOptions}
clearable={false}
onChange={handleJudgeSelect}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
</FormRow>
);
Expand All @@ -52,7 +57,7 @@ function JudgeSelect({
type="text"
value={selectedJudge}
disabled={true}
disabledStateKeys={[DISABLE_EDIT_CONFIG]}
disabledStateKeys={[DISABLE_EDIT_CONFIG, CANARY_EDIT_DISABLED]}
/>
</FormRow>
);
Expand Down
Loading

0 comments on commit 3cfdc77

Please sign in to comment.