@spinnaker/kayenta 2.2.0 → 2025.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/build/dist/index-70b2ac83.js +2 -0
  2. package/build/dist/{index-3a07fee8.js.map → index-70b2ac83.js.map} +1 -1
  3. package/build/dist/index.js +1 -1
  4. package/build/dist/kayenta/edit/changeMetricGroupModal.d.ts.map +1 -1
  5. package/build/dist/kayenta/edit/configDetailHeader.d.ts +1 -0
  6. package/build/dist/kayenta/edit/configDetailHeader.d.ts.map +1 -1
  7. package/build/dist/kayenta/edit/copyConfigButton.d.ts +1 -1
  8. package/build/dist/kayenta/edit/copyConfigButton.d.ts.map +1 -1
  9. package/build/dist/kayenta/edit/createConfigButton.d.ts +1 -1
  10. package/build/dist/kayenta/edit/createConfigButton.d.ts.map +1 -1
  11. package/build/dist/kayenta/edit/editMetricEffectSizes.d.ts.map +1 -1
  12. package/build/dist/kayenta/edit/editMetricModal.d.ts.map +1 -1
  13. package/build/dist/kayenta/edit/filterTemplateSelector.d.ts.map +1 -1
  14. package/build/dist/kayenta/edit/groupName.d.ts.map +1 -1
  15. package/build/dist/kayenta/edit/groupTabs.d.ts.map +1 -1
  16. package/build/dist/kayenta/edit/groupWeight.d.ts.map +1 -1
  17. package/build/dist/kayenta/edit/inlineTemplateEditor.d.ts.map +1 -1
  18. package/build/dist/kayenta/edit/judgeSelect.d.ts.map +1 -1
  19. package/build/dist/kayenta/edit/metricList.d.ts.map +1 -1
  20. package/build/dist/kayenta/edit/metricStoreSelector.d.ts.map +1 -1
  21. package/build/dist/kayenta/edit/nameAndDescription.d.ts.map +1 -1
  22. package/build/dist/kayenta/edit/openDeleteModalButton.d.ts.map +1 -1
  23. package/build/dist/kayenta/edit/saveConfigButton.d.ts.map +1 -1
  24. package/build/dist/lazy-1f6a42b8.js +2 -0
  25. package/build/dist/lazy-1f6a42b8.js.map +1 -0
  26. package/build/dist/{semioticGraph-a3ef25d3.js → semioticGraph-d687462f.js} +2 -2
  27. package/build/dist/{semioticGraph-a3ef25d3.js.map → semioticGraph-d687462f.js.map} +1 -1
  28. package/build.gradle +67 -0
  29. package/gradle.properties +0 -0
  30. package/package.json +6 -3
  31. package/src/kayenta/edit/changeMetricGroupModal.tsx +2 -0
  32. package/src/kayenta/edit/configDetailHeader.tsx +19 -2
  33. package/src/kayenta/edit/configJsonModal.tsx +2 -2
  34. package/src/kayenta/edit/copyConfigButton.tsx +3 -1
  35. package/src/kayenta/edit/createConfigButton.tsx +2 -1
  36. package/src/kayenta/edit/editMetricEffectSizes.tsx +3 -1
  37. package/src/kayenta/edit/editMetricModal.tsx +13 -3
  38. package/src/kayenta/edit/filterTemplateSelector.tsx +4 -0
  39. package/src/kayenta/edit/groupName.tsx +2 -0
  40. package/src/kayenta/edit/groupTabs.tsx +12 -4
  41. package/src/kayenta/edit/groupWeight.tsx +2 -0
  42. package/src/kayenta/edit/inlineTemplateEditor.tsx +2 -0
  43. package/src/kayenta/edit/judgeSelect.tsx +2 -0
  44. package/src/kayenta/edit/metricList.tsx +22 -5
  45. package/src/kayenta/edit/metricStoreSelector.tsx +2 -0
  46. package/src/kayenta/edit/nameAndDescription.tsx +9 -1
  47. package/src/kayenta/edit/openDeleteModalButton.tsx +3 -2
  48. package/src/kayenta/edit/saveConfigButton.tsx +3 -2
  49. package/src/kayenta/reducers/app.ts +1 -1
  50. package/src/kayenta/stages/kayentaStage/kayentaStage.html +254 -212
  51. package/src/kayenta/stages/kayentaStage/kayentaStageExecutionDetails.html +25 -12
  52. package/.github/workflows/ci.yml +0 -75
  53. package/.github/workflows/publish_lib.yml +0 -26
  54. package/.husky/pre-commit +0 -6
  55. package/build/dist/index-3a07fee8.js +0 -2
  56. package/build/dist/lazy-330960fa.js +0 -2
  57. package/build/dist/lazy-330960fa.js.map +0 -1
  58. package/build_scripts/assert_package_bump.sh +0 -93
  59. package/build_scripts/publish_github_actions.sh +0 -40
@@ -1,7 +1,4 @@
1
- <loading-spinner
2
- size="'medium'"
3
- ng-if="kayentaCanaryStageCtrl.state.backingDataLoading">
4
- </loading-spinner>
1
+ <loading-spinner size="'medium'" ng-if="kayentaCanaryStageCtrl.state.backingDataLoading"> </loading-spinner>
5
2
 
6
3
  <div ng-if="!kayentaCanaryStageCtrl.state.backingDataLoading" class="form-horizontal canary-config-view">
7
4
  <div class="alert alert-warning" ng-if="kayentaCanaryStageCtrl.state.lifetimeHoursUpdatedToDuration">
@@ -9,15 +6,13 @@
9
6
  <strong>Kayenta now supports analysis lifetimes shorter than 1 hour.</strong>
10
7
  </p>
11
8
  <p>
12
- This canary stage has been updated to reflect the new lifetime support.
13
- Click "Save Changes" to save the updated lifetime on the server.
9
+ This canary stage has been updated to reflect the new lifetime support. Click "Save Changes" to save the updated
10
+ lifetime on the server.
14
11
  </p>
15
12
  </div>
16
13
 
17
14
  <kayenta-stage-config-section title="Analysis Config">
18
-
19
- <stage-config-field label="Analysis Type"
20
- help-key="pipeline.config.canary.analysisType">
15
+ <stage-config-field label="Analysis Type" help-key="pipeline.config.canary.analysisType">
21
16
  <kayenta-analysis-type
22
17
  analysis-types="kayentaCanaryStageCtrl.state.analysisTypes"
23
18
  selected-type="kayentaCanaryStageCtrl.stage.analysisType"
@@ -26,188 +21,209 @@
26
21
  </stage-config-field>
27
22
 
28
23
  <stage-config-field label="Config Name">
29
- <ui-select required
30
- ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.canaryConfigId"
31
- on-select="kayentaCanaryStageCtrl.onCanaryConfigSelect()"
32
- class="visible-sm-inline-block visible-md-inline-block visible-lg-inline-block"
33
- style="width:300px">
24
+ <ui-select
25
+ required
26
+ ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.canaryConfigId"
27
+ on-select="kayentaCanaryStageCtrl.onCanaryConfigSelect()"
28
+ class="visible-sm-inline-block visible-md-inline-block visible-lg-inline-block"
29
+ style="width: 300px"
30
+ >
34
31
  <ui-select-match>{{$select.selected.name}}</ui-select-match>
35
- <ui-select-choices repeat="summary.id as summary in kayentaCanaryStageCtrl.canaryConfigSummaries | filter: $select.search">
32
+ <ui-select-choices
33
+ repeat="summary.id as summary in kayentaCanaryStageCtrl.canaryConfigSummaries | filter: $select.search"
34
+ >
36
35
  {{summary.name}}
37
36
  </ui-select-choices>
38
37
  </ui-select>
39
38
  </stage-config-field>
40
39
 
41
40
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="realTime, realTimeAutomatic">
42
- <stage-config-field label="Lifetime"
43
- field-columns="8"
44
- help-key="pipeline.config.canary.lifetime"
45
- ng-class="kayentaCanaryStageCtrl.getLifetimeClassnames()"
46
- style="padding-left: 0; padding-right: 0;">
47
- <input type="number"
48
- min="0"
49
- ng-class="kayentaCanaryStageCtrl.getLifetimeInputClassnames()"
50
- ng-model="kayentaCanaryStageCtrl.state.lifetime.hours"
51
- class="form-control input-sm"
52
- style="display: inline-block; width: 11%"
53
- ng-change="kayentaCanaryStageCtrl.onLifetimeChange()" />
54
- <span class="form-control-static">
55
- hours
56
- </span>
57
- <input type="number"
58
- min="0"
59
- max="59"
60
- ng-class="kayentaCanaryStageCtrl.getLifetimeInputClassnames()"
61
- ng-model="kayentaCanaryStageCtrl.state.lifetime.minutes"
62
- class="form-control input-sm"
63
- style="display: inline-block; width: 11%; margin-left: 12px;"
64
- ng-change="kayentaCanaryStageCtrl.onLifetimeChange()" />
65
- <span class="form-control-static">
66
- minutes
67
- </span>
41
+ <stage-config-field
42
+ label="Lifetime"
43
+ field-columns="8"
44
+ help-key="pipeline.config.canary.lifetime"
45
+ ng-class="kayentaCanaryStageCtrl.getLifetimeClassnames()"
46
+ style="padding-left: 0; padding-right: 0"
47
+ >
48
+ <input
49
+ type="number"
50
+ min="0"
51
+ ng-class="kayentaCanaryStageCtrl.getLifetimeInputClassnames()"
52
+ ng-model="kayentaCanaryStageCtrl.state.lifetime.hours"
53
+ class="form-control input-sm"
54
+ style="display: inline-block; width: 11%"
55
+ ng-change="kayentaCanaryStageCtrl.onLifetimeChange()"
56
+ />
57
+ <span class="form-control-static"> hours </span>
58
+ <input
59
+ type="number"
60
+ min="0"
61
+ max="59"
62
+ ng-class="kayentaCanaryStageCtrl.getLifetimeInputClassnames()"
63
+ ng-model="kayentaCanaryStageCtrl.state.lifetime.minutes"
64
+ class="form-control input-sm"
65
+ style="display: inline-block; width: 11%; margin-left: 12px"
66
+ ng-change="kayentaCanaryStageCtrl.onLifetimeChange()"
67
+ />
68
+ <span class="form-control-static"> minutes </span>
68
69
  </stage-config-field>
69
70
  </for-analysis-type>
70
71
 
71
72
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="retrospective">
72
- <stage-config-field label="Start Time"
73
- help-key="pipeline.config.canary.startTimeIso">
73
+ <stage-config-field label="Start Time" help-key="pipeline.config.canary.startTimeIso">
74
74
  <input
75
75
  required
76
76
  class="form-control input-sm"
77
77
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].startTimeIso"
78
- type="text"/>
78
+ type="text"
79
+ />
79
80
  </stage-config-field>
80
81
 
81
- <stage-config-field label="End Time"
82
- help-key="pipeline.config.canary.endTimeIso">
82
+ <stage-config-field label="End Time" help-key="pipeline.config.canary.endTimeIso">
83
83
  <input
84
84
  required
85
85
  class="form-control input-sm"
86
86
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].endTimeIso"
87
- type="text"/>
87
+ type="text"
88
+ />
88
89
  </stage-config-field>
89
90
  </for-analysis-type>
90
91
 
91
92
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="realTime, realTimeAutomatic">
92
- <stage-config-field label="Delay"
93
- help-key="pipeline.config.canary.delayBeforeAnalysis"
94
- field-columns="5">
95
- <input type="text"
96
- ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.beginCanaryAnalysisAfterMins"
97
- class="form-control input-sm"
98
- style="display: inline-block; width: 19%"/>
99
- <span class="form-control-static">
100
- minutes before starting analysis
101
- </span>
93
+ <stage-config-field label="Delay" help-key="pipeline.config.canary.delayBeforeAnalysis" field-columns="5">
94
+ <input
95
+ type="text"
96
+ ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.beginCanaryAnalysisAfterMins"
97
+ class="form-control input-sm"
98
+ style="display: inline-block; width: 19%"
99
+ />
100
+ <span class="form-control-static"> minutes before starting analysis </span>
102
101
  </stage-config-field>
103
102
  </for-analysis-type>
104
103
 
105
- <stage-config-field label="Interval"
106
- help-key="pipeline.config.canary.canaryInterval"
107
- field-columns="3">
108
- <input type="text"
109
- ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.canaryAnalysisIntervalMins"
110
- class="form-control input-sm"
111
- style="width: 33%; display: inline-block"/>
104
+ <stage-config-field label="Interval" help-key="pipeline.config.canary.canaryInterval" field-columns="3">
105
+ <input
106
+ type="text"
107
+ ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.canaryAnalysisIntervalMins"
108
+ class="form-control input-sm"
109
+ style="width: 33%; display: inline-block"
110
+ />
112
111
  <span class="form-control-static"> minutes</span>
113
112
  </stage-config-field>
114
113
 
115
114
  <!--TODO(dpeach): add help text here-->
116
- <stage-config-field label="Step"
117
- field-columns="3">
115
+ <stage-config-field label="Step" field-columns="3">
118
116
  <input
119
117
  class="form-control input-sm"
120
118
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].step"
121
119
  type="number"
122
120
  min="0"
123
- style="width: 33%; display: inline-block"/>
121
+ style="width: 33%; display: inline-block"
122
+ />
124
123
  <span class="form-control-static"> seconds</span>
125
124
  </stage-config-field>
126
125
 
127
- <stage-config-field label="Baseline Offset"
128
- help-key="pipeline.config.canary.baselineAnalysisOffset"
129
- field-columns="3">
126
+ <stage-config-field
127
+ label="Baseline Offset"
128
+ help-key="pipeline.config.canary.baselineAnalysisOffset"
129
+ field-columns="3"
130
+ >
130
131
  <input
131
132
  class="form-control input-sm"
132
133
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.baselineAnalysisOffsetInMins"
133
134
  type="text"
134
135
  min="0"
135
- style="width: 33%; display: inline-block"/>
136
+ style="width: 33%; display: inline-block"
137
+ />
136
138
  <span class="form-control-static"> minutes</span>
137
139
  </stage-config-field>
138
140
 
139
- <stage-config-field label="Lookback Type"
140
- help-key="pipeline.config.canary.lookback"
141
- field-columns="3">
142
- <select class="form-control input-sm"
143
- ng-model="kayentaCanaryStageCtrl.state.useLookback"
144
- ng-options="(useLookback ? 'Sliding' : 'Growing') for useLookback in [false, true]"
145
- ng-change="kayentaCanaryStageCtrl.onUseLookbackChange()">
146
- </select>
141
+ <stage-config-field label="Lookback Type" help-key="pipeline.config.canary.lookback" field-columns="3">
142
+ <select
143
+ class="form-control input-sm"
144
+ ng-model="kayentaCanaryStageCtrl.state.useLookback"
145
+ ng-options="(useLookback ? 'Sliding' : 'Growing') for useLookback in [false, true]"
146
+ ng-change="kayentaCanaryStageCtrl.onUseLookbackChange()"
147
+ ></select>
147
148
  </stage-config-field>
148
149
 
149
150
  <stage-config-field ng-if="kayentaCanaryStageCtrl.state.useLookback">
150
151
  <div class="form-group">
151
152
  <div class="col-md-9">
152
- <p class="form-control-static" ng-if="kayentaCanaryStageCtrl.isExpression(kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins)">
153
+ <p
154
+ class="form-control-static"
155
+ ng-if="kayentaCanaryStageCtrl.isExpression(kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins)"
156
+ >
153
157
  Using a sliding lookback duration defined by an expression viewable in the pipeline JSON editor.
154
158
  </p>
155
159
  <span ng-if="!kayentaCanaryStageCtrl.isExpression(kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins)">
156
160
  with a look-back duration of
157
- <input type="number"
158
- min="1"
159
- max="{{kayentaCanaryStageCtrl.state.lifetime.hours * 60}}"
160
- required
161
- ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins"
162
- class="form-control input-sm" style="display: inline-block; margin: 0 5px; width: 15%"/>
161
+ <input
162
+ type="number"
163
+ min="1"
164
+ max="{{kayentaCanaryStageCtrl.state.lifetime.hours * 60}}"
165
+ required
166
+ ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins"
167
+ class="form-control input-sm"
168
+ style="display: inline-block; margin: 0 5px; width: 15%"
169
+ />
163
170
  minutes
164
171
  </span>
165
172
  </div>
166
173
  </div>
167
- <div class="error-message col-md-12"
168
- ng-if="kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins > 0 && kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins < 30">
169
- <b>NOTE:</b> To provide enough data points for the canary analysis it is recommended to set the look-back
170
- time to at least 30 minutes.
174
+ <div
175
+ class="error-message col-md-12"
176
+ ng-if="kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins > 0 && kayentaCanaryStageCtrl.stage.canaryConfig.lookbackMins < 30"
177
+ >
178
+ <b>NOTE:</b> To provide enough data points for the canary analysis it is recommended to set the look-back time
179
+ to at least 30 minutes.
171
180
  </div>
172
181
  </stage-config-field>
173
182
  </kayenta-stage-config-section>
174
183
 
175
184
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="realTimeAutomatic">
176
- <stage-config-field label="Delay Before Cleanup"
177
- field-columns="8"
178
- help-key="pipeline.config.canary.delayBeforeCleanup"
179
- style="padding-left: 0; padding-right: 0;">
180
- <input type="number"
181
- min="0"
182
- ng-model="kayentaCanaryStageCtrl.state.delayBeforeCleanup.hours"
183
- class="form-control input-sm"
184
- style="display: inline-block; width: 11%;"
185
- ng-change="kayentaCanaryStageCtrl.onDelayBeforeCleanupChange()" />
186
- <span class="form-control-static">
187
- hours
188
- </span>
189
- <input type="number"
190
- min="0"
191
- max="59"
192
- ng-model="kayentaCanaryStageCtrl.state.delayBeforeCleanup.minutes"
193
- class="form-control input-sm"
194
- style="display: inline-block; width: 11%; margin-left: 12px"
195
- ng-change="kayentaCanaryStageCtrl.onDelayBeforeCleanupChange()" />
196
- <span class="form-control-static">
197
- minutes
198
- </span>
185
+ <stage-config-field
186
+ label="Delay Before Cleanup"
187
+ field-columns="8"
188
+ help-key="pipeline.config.canary.delayBeforeCleanup"
189
+ style="padding-left: 0; padding-right: 0"
190
+ >
191
+ <input
192
+ type="number"
193
+ min="0"
194
+ ng-model="kayentaCanaryStageCtrl.state.delayBeforeCleanup.hours"
195
+ class="form-control input-sm"
196
+ style="display: inline-block; width: 11%"
197
+ ng-change="kayentaCanaryStageCtrl.onDelayBeforeCleanupChange()"
198
+ />
199
+ <span class="form-control-static"> hours </span>
200
+ <input
201
+ type="number"
202
+ min="0"
203
+ max="59"
204
+ ng-model="kayentaCanaryStageCtrl.state.delayBeforeCleanup.minutes"
205
+ class="form-control input-sm"
206
+ style="display: inline-block; width: 11%; margin-left: 12px"
207
+ ng-change="kayentaCanaryStageCtrl.onDelayBeforeCleanupChange()"
208
+ />
209
+ <span class="form-control-static"> minutes </span>
199
210
  </stage-config-field>
200
211
  </for-analysis-type>
201
212
 
202
213
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="realTimeAutomatic">
203
214
  <kayenta-stage-config-section title="Baseline Version">
204
- <stage-config-field label="Provider" ng-if="kayentaCanaryStageCtrl.providers.length > 1
205
- && kayentaCanaryStageCtrl.stage.isNew">
206
- <provider-selector providers="kayentaCanaryStageCtrl.providers"
207
- component="kayentaCanaryStageCtrl.stage.deployments.baseline"
208
- on-change="kayentaCanaryStageCtrl.handleProviderChange()"
209
- field="cloudProvider"
210
- read-only="!kayentaCanaryStageCtrl.stage.isNew"></provider-selector>
215
+ <stage-config-field
216
+ label="Provider"
217
+ ng-if="kayentaCanaryStageCtrl.providers.length > 1
218
+ && kayentaCanaryStageCtrl.stage.isNew"
219
+ >
220
+ <provider-selector
221
+ providers="kayentaCanaryStageCtrl.providers"
222
+ component="kayentaCanaryStageCtrl.stage.deployments.baseline"
223
+ on-change="kayentaCanaryStageCtrl.handleProviderChange()"
224
+ field="cloudProvider"
225
+ read-only="!kayentaCanaryStageCtrl.stage.isNew"
226
+ ></provider-selector>
211
227
  </stage-config-field>
212
228
 
213
229
  <stage-config-field label="Account">
@@ -217,7 +233,8 @@
217
233
  accounts="kayentaCanaryStageCtrl.accounts"
218
234
  on-change="kayentaCanaryStageCtrl.setClusterList()"
219
235
  provider="kayentaCanaryStageCtrl.stage.deployments.baseline.cloudProvider"
220
- required>
236
+ required
237
+ >
221
238
  </account-select-field>
222
239
  </stage-config-field>
223
240
 
@@ -226,7 +243,8 @@
226
243
  ng-if="application.serverGroups.loaded"
227
244
  clusters="kayentaCanaryStageCtrl.clusterList"
228
245
  required="true"
229
- model="kayentaCanaryStageCtrl.stage.deployments.baseline.cluster">
246
+ model="kayentaCanaryStageCtrl.stage.deployments.baseline.cluster"
247
+ >
230
248
  </cluster-selector>
231
249
  </stage-config-field>
232
250
  </kayenta-stage-config-section>
@@ -238,101 +256,108 @@
238
256
  uib-tooltip="Click to populate with expressions for resolving control
239
257
  and experiment scopes from an upstream clone stage."
240
258
  ng-click="kayentaCanaryStageCtrl.populateScopeWithExpressions()"
241
- class="fa fa-magic clickable"></span>
259
+ class="fa fa-magic clickable"
260
+ ></span>
242
261
  </section-header>
243
262
 
244
263
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="realTime, retrospective">
245
- <stage-config-field label="Baseline"
246
- help-key="pipeline.config.canary.baselineGroup">
264
+ <stage-config-field label="Baseline" help-key="pipeline.config.canary.baselineGroup">
247
265
  <input
248
266
  ng-if="kayentaCanaryStageCtrl.state.atlasScopeType !== 'query'"
249
267
  class="form-control input-sm"
250
268
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].controlScope"
251
269
  required
252
- type="text"/>
270
+ type="text"
271
+ />
253
272
 
254
273
  <textarea
255
274
  ng-if="kayentaCanaryStageCtrl.state.atlasScopeType === 'query'"
256
275
  class="form-control input-sm"
257
276
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].controlScope"
258
- required>
277
+ required
278
+ >
259
279
  </textarea>
260
280
  </stage-config-field>
261
281
 
262
- <stage-config-field label="Baseline Location"
263
- help-key="pipeline.config.canary.baselineLocation">
282
+ <stage-config-field label="Baseline Location" help-key="pipeline.config.canary.baselineLocation">
264
283
  <select
265
284
  required
266
285
  class="form-control input-sm"
267
286
  ng-if="kayentaCanaryStageCtrl.getLocationChoices().hasChoices"
268
287
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].controlLocation"
269
- ng-options="location for location in kayentaCanaryStageCtrl.getLocationChoices().combinedLocations.control">
270
- </select>
288
+ ng-options="location for location in kayentaCanaryStageCtrl.getLocationChoices().combinedLocations.control"
289
+ ></select>
271
290
  <input
272
291
  class="form-control input-sm"
273
292
  ng-if="!kayentaCanaryStageCtrl.getLocationChoices().hasChoices"
274
293
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].controlLocation"
275
294
  required
276
- type="text"/>
295
+ type="text"
296
+ />
277
297
  <div class="pull-right" ng-if="kayentaCanaryStageCtrl.getLocationChoices().hasChoices">
278
298
  <button
279
299
  ng-click="kayentaCanaryStageCtrl.toggleAllLocations('control')"
280
300
  ng-if="!kayentaCanaryStageCtrl.state.showAllLocations.control && kayentaCanaryStageCtrl.getLocationChoices().locations.length > 0"
281
- class="link">
301
+ class="link"
302
+ >
282
303
  Show all locations
283
304
  </button>
284
305
  <button
285
306
  ng-click="kayentaCanaryStageCtrl.toggleAllLocations('control')"
286
307
  ng-if="kayentaCanaryStageCtrl.state.showAllLocations.control && kayentaCanaryStageCtrl.getLocationChoices().recommendedLocations.length > 0"
287
- class="link">
308
+ class="link"
309
+ >
288
310
  Only show recommended locations
289
311
  </button>
290
312
  </div>
291
313
  </stage-config-field>
292
314
 
293
- <stage-config-field label="Canary"
294
- help-key="pipeline.config.canary.canaryGroup">
315
+ <stage-config-field label="Canary" help-key="pipeline.config.canary.canaryGroup">
295
316
  <input
296
317
  ng-if="kayentaCanaryStageCtrl.state.atlasScopeType !== 'query'"
297
318
  class="form-control input-sm"
298
319
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].experimentScope"
299
320
  required
300
- type="text"/>
321
+ type="text"
322
+ />
301
323
 
302
324
  <textarea
303
325
  ng-if="kayentaCanaryStageCtrl.state.atlasScopeType === 'query'"
304
326
  class="form-control input-sm"
305
327
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].experimentScope"
306
- required>
328
+ required
329
+ >
307
330
  </textarea>
308
331
  </stage-config-field>
309
332
 
310
- <stage-config-field label="Canary Location"
311
- help-key="pipeline.config.canary.canaryLocation">
333
+ <stage-config-field label="Canary Location" help-key="pipeline.config.canary.canaryLocation">
312
334
  <select
313
335
  required
314
336
  class="form-control input-sm"
315
337
  ng-if="kayentaCanaryStageCtrl.getLocationChoices().hasChoices"
316
338
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].experimentLocation"
317
- ng-options="location for location in kayentaCanaryStageCtrl.getLocationChoices().combinedLocations.experiment">
318
- </select>
339
+ ng-options="location for location in kayentaCanaryStageCtrl.getLocationChoices().combinedLocations.experiment"
340
+ ></select>
319
341
  <input
320
342
  class="form-control input-sm"
321
343
  ng-if="!kayentaCanaryStageCtrl.getLocationChoices().hasChoices"
322
344
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].experimentLocation"
323
345
  required
324
- type="text"/>
346
+ type="text"
347
+ />
325
348
  <div class="pull-right" ng-if="kayentaCanaryStageCtrl.getLocationChoices().hasChoices">
326
349
  <button
327
350
  ng-click="kayentaCanaryStageCtrl.toggleAllLocations('experiment')"
328
351
  ng-if="!kayentaCanaryStageCtrl.state.showAllLocations.experiment && kayentaCanaryStageCtrl.getLocationChoices().locations.length > 0"
329
- class="link">
352
+ class="link"
353
+ >
330
354
  Show all locations
331
355
  </button>
332
356
  <button
333
357
  ng-click="kayentaCanaryStageCtrl.toggleAllLocations('experiment')"
334
358
  ng-if="kayentaCanaryStageCtrl.state.showAllLocations.experiment && kayentaCanaryStageCtrl.getLocationChoices().recommendedLocations.length > 0"
335
- class="link">
359
+ class="link"
360
+ >
336
361
  Only show recommended locations
337
362
  </button>
338
363
  </div>
@@ -341,48 +366,54 @@
341
366
 
342
367
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="realTimeAutomatic">
343
368
  <div class="row">
344
- <div style="margin: 10px 10px 0 50px;">
369
+ <div style="margin: 10px 10px 0 50px">
345
370
  <div class="well well-sm">
346
371
  <table class="table">
347
372
  <thead>
348
- <tr>
349
- <th>Location</th>
350
- <th>Baseline</th>
351
- <th>Canary</th>
352
- <th>Actions</th>
353
- </tr>
373
+ <tr>
374
+ <th>Location</th>
375
+ <th>Baseline</th>
376
+ <th>Canary</th>
377
+ <th>Actions</th>
378
+ </tr>
354
379
  </thead>
355
380
  <tbody>
356
- <tr ng-repeat="clusterPair in kayentaCanaryStageCtrl.stage.deployments.serverGroupPairs">
357
- <td>
358
- <account-tag account="clusterPair.control.account"></account-tag>
359
- {{kayentaCanaryStageCtrl.getRegion(clusterPair.control)}}
360
- </td>
361
- <td>
362
- {{kayentaCanaryStageCtrl.getServerGroupName(clusterPair.control)}}
363
- <br/>
364
- <a href ng-click="kayentaCanaryStageCtrl.editServerGroup(clusterPair.control, $index, 'control')">Edit</a>
365
- </td>
366
- <td>
367
- {{kayentaCanaryStageCtrl.getServerGroupName(clusterPair.experiment)}}
368
- <br/>
369
- <a href ng-click="kayentaCanaryStageCtrl.editServerGroup(clusterPair.experiment, $index, 'experiment')">Edit</a>
370
- </td>
371
- <td>
372
- <a href ng-click="kayentaCanaryStageCtrl.deletePair($index);">
373
- <span class="glyphicon glyphicon-trash" uib-tooltip="Delete Pair"></span>
374
- </a>
375
- </td>
376
- </tr>
381
+ <tr ng-repeat="clusterPair in kayentaCanaryStageCtrl.stage.deployments.serverGroupPairs">
382
+ <td>
383
+ <account-tag account="clusterPair.control.account"></account-tag>
384
+ {{kayentaCanaryStageCtrl.getRegion(clusterPair.control)}}
385
+ </td>
386
+ <td>
387
+ {{kayentaCanaryStageCtrl.getServerGroupName(clusterPair.control)}}
388
+ <br />
389
+ <a href ng-click="kayentaCanaryStageCtrl.editServerGroup(clusterPair.control, $index, 'control')"
390
+ >Edit</a
391
+ >
392
+ </td>
393
+ <td>
394
+ {{kayentaCanaryStageCtrl.getServerGroupName(clusterPair.experiment)}}
395
+ <br />
396
+ <a
397
+ href
398
+ ng-click="kayentaCanaryStageCtrl.editServerGroup(clusterPair.experiment, $index, 'experiment')"
399
+ >Edit</a
400
+ >
401
+ </td>
402
+ <td>
403
+ <a href ng-click="kayentaCanaryStageCtrl.deletePair($index);">
404
+ <span class="glyphicon glyphicon-trash" uib-tooltip="Delete Pair"></span>
405
+ </a>
406
+ </td>
407
+ </tr>
377
408
  </tbody>
378
409
  <tfoot>
379
- <tr ng-if="!kayentaCanaryStageCtrl.stage.deployments.serverGroupPairs.length">
380
- <td colspan="4">
381
- <button class="btn btn-block btn-sm add-new" ng-click="kayentaCanaryStageCtrl.addPair()">
382
- <span class="glyphicon glyphicon-plus-sign"></span> Add Baseline + Canary Pair
383
- </button>
384
- </td>
385
- </tr>
410
+ <tr ng-if="!kayentaCanaryStageCtrl.stage.deployments.serverGroupPairs.length">
411
+ <td colspan="4">
412
+ <button class="btn btn-block btn-sm add-new" ng-click="kayentaCanaryStageCtrl.addPair()">
413
+ <span class="glyphicon glyphicon-plus-sign"></span> Add Baseline + Canary Pair
414
+ </button>
415
+ </td>
416
+ </tr>
386
417
  </tfoot>
387
418
  </table>
388
419
  </div>
@@ -392,13 +423,13 @@
392
423
  </kayenta-stage-config-section>
393
424
 
394
425
  <kayenta-stage-config-section title="Metric Scope">
395
-
396
426
  <for-analysis-type stage="kayentaCanaryStageCtrl.stage" types="realTimeAutomatic">
397
427
  <stage-config-field label="Dataset" ng-if="kayentaCanaryStageCtrl.metricStore === 'atlas'">
398
428
  <input
399
429
  type="checkbox"
400
430
  ng-model="kayentaCanaryStageCtrl.state.useAtlasGlobalDataset"
401
- ng-click="kayentaCanaryStageCtrl.handleAtlasDatasetChange($event)" />
431
+ ng-click="kayentaCanaryStageCtrl.handleAtlasDatasetChange($event)"
432
+ />
402
433
  Use Global Atlas Dataset
403
434
  </stage-config-field>
404
435
  </for-analysis-type>
@@ -407,36 +438,42 @@
407
438
  <stage-config-field label="Scope Type" ng-if="kayentaCanaryStageCtrl.metricStore === 'atlas'">
408
439
  <select
409
440
  required
410
- class="form-control input-sm" ng-model="kayentaCanaryStageCtrl.state.atlasScopeType"
441
+ class="form-control input-sm"
442
+ ng-model="kayentaCanaryStageCtrl.state.atlasScopeType"
411
443
  ng-options="(type === 'cluster' ? 'Cluster' : 'Query') for type in ['cluster', 'query']"
412
- ng-change="kayentaCanaryStageCtrl.onAtlasScopeTypeChange()">
413
- </select>
444
+ ng-change="kayentaCanaryStageCtrl.onAtlasScopeTypeChange()"
445
+ ></select>
414
446
  </stage-config-field>
415
447
  </for-analysis-type>
416
448
 
417
- <stage-config-field label="Extended Params"
418
- help-key="pipeline.config.canary.extendedScopeParams">
449
+ <stage-config-field label="Extended Params" help-key="pipeline.config.canary.extendedScopeParams">
419
450
  <map-editor
420
451
  hidden-keys="['resourceType', 'dataset', 'type', 'environment']"
421
452
  on-change="kayentaCanaryStageCtrl.handleExtendedScopeParamsChange()"
422
- model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].extendedScopeParams">
453
+ model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].extendedScopeParams"
454
+ >
423
455
  </map-editor>
424
456
  </stage-config-field>
425
457
  </kayenta-stage-config-section>
426
458
 
427
459
  <kayenta-stage-config-section title="Scoring Thresholds">
428
- <kayenta-canary-scores on-change="kayentaCanaryStageCtrl.handleScoreThresholdChange"
429
- successful-help-field-id="'pipeline.config.canary.passingScore'"
430
- successful-label="'Pass'"
431
- successful-score="kayentaCanaryStageCtrl.stage.canaryConfig.scoreThresholds.pass"
432
- unhealthy-help-field-id="'pipeline.config.canary.marginalScore'"
433
- unhealthy-label="'Marginal'"
434
- unhealthy-score="kayentaCanaryStageCtrl.stage.canaryConfig.scoreThresholds.marginal"></kayenta-canary-scores>
460
+ <kayenta-canary-scores
461
+ on-change="kayentaCanaryStageCtrl.handleScoreThresholdChange"
462
+ successful-help-field-id="'pipeline.config.canary.passingScore'"
463
+ successful-label="'Pass'"
464
+ successful-score="kayentaCanaryStageCtrl.stage.canaryConfig.scoreThresholds.pass"
465
+ unhealthy-help-field-id="'pipeline.config.canary.marginalScore'"
466
+ unhealthy-label="'Marginal'"
467
+ unhealthy-score="kayentaCanaryStageCtrl.stage.canaryConfig.scoreThresholds.marginal"
468
+ ></kayenta-canary-scores>
435
469
  </kayenta-stage-config-section>
436
470
 
437
471
  <kayenta-stage-config-section title="Advanced Settings" ng-if="kayentaCanaryStageCtrl.state.showAdvancedSettings">
438
-
439
- <stage-config-field label="Notification Emails" help-key="pipeline.config.canary.legacySiteLocalRecipients" ng-if="kayentaCanaryStageCtrl.state.showLegacySiteLocalRecipients">
472
+ <stage-config-field
473
+ label="Notification Emails"
474
+ help-key="pipeline.config.canary.legacySiteLocalRecipients"
475
+ ng-if="kayentaCanaryStageCtrl.state.showLegacySiteLocalRecipients"
476
+ >
440
477
  <textarea
441
478
  class="form-control input-sm"
442
479
  ng-model="kayentaCanaryStageCtrl.state.legacySiteLocalRecipients"
@@ -446,32 +483,36 @@
446
483
  </textarea>
447
484
  </stage-config-field>
448
485
 
449
- <stage-config-field label="Metrics Account"
450
- help-key="pipeline.config.metricsAccount"
451
- ng-if="kayentaCanaryStageCtrl.kayentaAccounts.get('METRICS_STORE').length > 1">
486
+ <stage-config-field
487
+ label="Metrics Account"
488
+ help-key="pipeline.config.metricsAccount"
489
+ ng-if="kayentaCanaryStageCtrl.kayentaAccounts.get('METRICS_STORE').length > 1"
490
+ >
452
491
  <select
453
492
  class="form-control input-sm"
454
493
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.metricsAccountName"
455
494
  ng-options="account.name as account.name for account in kayentaCanaryStageCtrl.kayentaAccounts.get('METRICS_STORE')"
456
- >
457
- </select>
495
+ ></select>
458
496
  </stage-config-field>
459
- <stage-config-field label="Storage Account"
460
- help-key="pipeline.config.storageAccount"
461
- ng-if="kayentaCanaryStageCtrl.kayentaAccounts.get('OBJECT_STORE').length > 1">
497
+ <stage-config-field
498
+ label="Storage Account"
499
+ help-key="pipeline.config.storageAccount"
500
+ ng-if="kayentaCanaryStageCtrl.kayentaAccounts.get('OBJECT_STORE').length > 1"
501
+ >
462
502
  <select
463
503
  class="form-control input-sm"
464
504
  ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.storageAccountName"
465
505
  ng-options="account.name as account.name for account in kayentaCanaryStageCtrl.kayentaAccounts.get('OBJECT_STORE')"
466
- >
467
- </select>
506
+ ></select>
468
507
  </stage-config-field>
469
508
 
470
509
  <stage-config-field label="Scope Name" ng-if="kayentaCanaryStageCtrl.scopeNames.length > 1">
471
- <ui-select required
472
- ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].scopeName"
473
- class="visible-sm-inline-block visible-md-inline-block visible-lg-inline-block"
474
- style="width:300px">
510
+ <ui-select
511
+ required
512
+ ng-model="kayentaCanaryStageCtrl.stage.canaryConfig.scopes[0].scopeName"
513
+ class="visible-sm-inline-block visible-md-inline-block visible-lg-inline-block"
514
+ style="width: 300px"
515
+ >
475
516
  <ui-select-match>{{$select.selected}}</ui-select-match>
476
517
  <ui-select-choices repeat="scopeName in kayentaCanaryStageCtrl.scopeNames | filter: $select.search">
477
518
  {{scopeName}}
@@ -480,7 +521,8 @@
480
521
  </stage-config-field>
481
522
 
482
523
  <div class="alert alert-warning" ng-if="kayentaCanaryStageCtrl.stage.canaryConfig.scopes.length > 1">
483
- <strong>Warning!</strong> This stage specifies more than one scope. Please edit the stage JSON to configure scopes beyond the first one.
524
+ <strong>Warning!</strong> This stage specifies more than one scope. Please edit the stage JSON to configure scopes
525
+ beyond the first one.
484
526
  </div>
485
527
  </kayenta-stage-config-section>
486
528
  </div>