|
6 | 6 | package org.elasticsearch.xpack.ml.integration;
|
7 | 7 |
|
8 | 8 | import org.elasticsearch.action.search.SearchResponse;
|
| 9 | +import org.elasticsearch.cluster.metadata.MetaData; |
9 | 10 | import org.elasticsearch.common.unit.TimeValue;
|
10 | 11 | import org.elasticsearch.index.query.QueryBuilders;
|
11 | 12 | import org.elasticsearch.search.SearchHit;
|
@@ -335,7 +336,54 @@ public void testAddOpenedJobToGroupWithCalendar() throws Exception {
|
335 | 336 | assertEquals(0, buckets.get(8).getScheduledEvents().size());
|
336 | 337 | }
|
337 | 338 |
|
338 |
| - private Job.Builder createJob(String jobId, TimeValue bucketSpan) { |
| 339 | + /** |
| 340 | + * An open job that later gets added to a calendar, should take the scheduled events into account |
| 341 | + */ |
| 342 | + public void testNewJobWithGlobalCalendar() throws Exception { |
| 343 | + String calendarId = "test-global-calendar"; |
| 344 | + |
| 345 | + // Create a new calendar referencing groupName |
| 346 | + putCalendar(calendarId, Collections.singletonList(MetaData.ALL), "testNewJobWithGlobalCalendar calendar"); |
| 347 | + |
| 348 | + long startTime = 1514764800000L; |
| 349 | + final int bucketCount = 3; |
| 350 | + TimeValue bucketSpan = TimeValue.timeValueMinutes(30); |
| 351 | + |
| 352 | + // Put events in the calendar |
| 353 | + List<ScheduledEvent> events = new ArrayList<>(); |
| 354 | + long eventStartTime = startTime; |
| 355 | + long eventEndTime = eventStartTime + (long) (1.5 * bucketSpan.millis()); |
| 356 | + events.add(new ScheduledEvent.Builder().description("Some Event") |
| 357 | + .startTime((Instant.ofEpochMilli(eventStartTime))) |
| 358 | + .endTime((Instant.ofEpochMilli(eventEndTime))) |
| 359 | + .calendarId(calendarId).build()); |
| 360 | + |
| 361 | + postScheduledEvents(calendarId, events); |
| 362 | + |
| 363 | + Job.Builder job = createJob("scheduled-events-add-to-new-job--with-global-calendar", bucketSpan); |
| 364 | + |
| 365 | + // Open the job |
| 366 | + openJob(job.getId()); |
| 367 | + |
| 368 | + // write some buckets of data |
| 369 | + postData(job.getId(), generateData(startTime, bucketSpan, bucketCount + 1, bucketIndex -> randomIntBetween(100, 200)) |
| 370 | + .stream().collect(Collectors.joining())); |
| 371 | + |
| 372 | + // and close |
| 373 | + closeJob(job.getId()); |
| 374 | + |
| 375 | + GetBucketsAction.Request getBucketsRequest = new GetBucketsAction.Request(job.getId()); |
| 376 | + List<Bucket> buckets = getBuckets(getBucketsRequest); |
| 377 | + |
| 378 | + // 1st and 2nd buckets have the event but the last one does not |
| 379 | + assertEquals(1, buckets.get(0).getScheduledEvents().size()); |
| 380 | + assertEquals("Some Event", buckets.get(0).getScheduledEvents().get(0)); |
| 381 | + assertEquals(1, buckets.get(1).getScheduledEvents().size()); |
| 382 | + assertEquals("Some Event", buckets.get(1).getScheduledEvents().get(0)); |
| 383 | + assertEquals(0, buckets.get(2).getScheduledEvents().size()); |
| 384 | + } |
| 385 | + |
| 386 | + private Job.Builder createJob(String jobId, TimeValue bucketSpan) { |
339 | 387 | Detector.Builder detector = new Detector.Builder("count", null);
|
340 | 388 | AnalysisConfig.Builder analysisConfig = new AnalysisConfig.Builder(Collections.singletonList(detector.build()));
|
341 | 389 | analysisConfig.setBucketSpan(bucketSpan);
|
|
0 commit comments