Skip to content

Commit bf6c47e

Browse files
fieldjuAbdulRahman AlHamali
and
AbdulRahman AlHamali
authored
feature(Kayenta Standalone): allow specifying a control offset in standalone kayenta (#825)
* feat(standalone-canary-analysis): allow specifying a control offset in standalone kayenta * feat(standalone-canary-analysis): add the baseline to end time * chore(standalone-canary-analysis): tweak control offset field name to make units clear, add unit test Co-authored-by: AbdulRahman AlHamali <aalhamali@coveo.com>
1 parent 6b387f3 commit bf6c47e

File tree

5 files changed

+129
-3
lines changed

5 files changed

+129
-3
lines changed

.idea/compiler.xml

Lines changed: 64 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 30 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kayenta-standalone-canary-analysis/src/main/java/com/netflix/kayenta/standalonecanaryanalysis/domain/CanaryAnalysisExecutionRequestScope.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ public class CanaryAnalysisExecutionRequestScope {
5656
example = "us-west-2")
5757
String controlLocation;
5858

59+
@ApiModelProperty(
60+
value =
61+
"The time offset in minutes to be subtracted from the control start and end time. If none is provided, the control is "
62+
+ "evaluated at the same time as the experiment.",
63+
example = "10")
64+
@Builder.Default
65+
Long controlOffsetInMinutes = 0L;
66+
5967
@ApiModelProperty(
6068
value =
6169
"This value is used to fetch the data for the experiment from the metrics service. "

kayenta-standalone-canary-analysis/src/main/java/com/netflix/kayenta/standalonecanaryanalysis/orca/stage/SetupAndExecuteCanariesStage.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,10 @@ protected Map<String, CanaryScopePair> buildRequestScopes(
226226
new CanaryScope(
227227
scope.getControlScope(),
228228
scope.getControlLocation(),
229-
scopeTimeConfig.start,
230-
scopeTimeConfig.end,
229+
scopeTimeConfig.start.minus(
230+
Duration.ofMinutes(scope.getControlOffsetInMinutes())),
231+
scopeTimeConfig.end.minus(
232+
Duration.ofMinutes(scope.getControlOffsetInMinutes())),
231233
config.getStep().getSeconds(),
232234
scope.getExtendedScopeParams());
233235

kayenta-standalone-canary-analysis/src/test/java/com/netflix/kayenta/standalonecanaryanalysis/orca/stage/SetupAndExecuteCanariesStageTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,27 @@ public void test_that_calculateLifetime_uses_supplied_start_and_end_time_if_prov
206206
assertEquals(Instant.parse(startIso), actual.getStart());
207207
assertEquals(Instant.parse(startIso).plus(3L, ChronoUnit.MINUTES), actual.getEnd());
208208
}
209+
210+
@Test
211+
public void
212+
test_that_buildRequestScopes_has_expected_start_and_end_when_control_offset_is_supplied() {
213+
int interval = 1;
214+
String startIso = "2018-12-17T20:56:39.689Z";
215+
Duration lifetimeDuration = Duration.ofMinutes(3L);
216+
CanaryAnalysisExecutionRequest request =
217+
CanaryAnalysisExecutionRequest.builder()
218+
.scopes(
219+
ImmutableList.of(
220+
CanaryAnalysisExecutionRequestScope.builder()
221+
.controlOffsetInMinutes(5L)
222+
.startTimeIso(startIso)
223+
.build()))
224+
.build();
225+
226+
var requestScopes = stage.buildRequestScopes(request, interval, lifetimeDuration);
227+
var defaultScope = requestScopes.get("default");
228+
var expectedControlStartIso = "2018-12-17T20:51:39.689Z";
229+
assertEquals(Instant.parse(startIso), defaultScope.getExperimentScope().getStart());
230+
assertEquals(Instant.parse(expectedControlStartIso), defaultScope.getControlScope().getStart());
231+
}
209232
}

0 commit comments

Comments
 (0)