/** * If "query" has a single universal timestamp, return it. Otherwise return null. This is useful * for keeping timestamps in sync across partial queries that may have different intervals. * * @param query the query * * @return universal timestamp, or null */ public static DateTime getUniversalTimestamp(final GroupByQuery query) { final Granularity gran = query.getGranularity(); final String timestampStringFromContext = query.getContextValue(CTX_KEY_FUDGE_TIMESTAMP, ""); if (!timestampStringFromContext.isEmpty()) { return DateTimes.utc(Long.parseLong(timestampStringFromContext)); } else if (Granularities.ALL.equals(gran)) { final DateTime timeStart = query.getIntervals().get(0).getStart(); return gran.getIterable(new Interval(timeStart, timeStart.plus(1))).iterator().next().getStart(); } else { return null; } }
@Test public void testIterableNone() { final Iterator<Interval> iterator = Granularities.NONE.getIterable(Intervals.utc(0, 1000)).iterator(); int count = 0; while (iterator.hasNext()) { Assert.assertEquals(count, iterator.next().getStartMillis()); count++; } }
@Test public void testIterableAllComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:02.992Z"); assertSameInterval( Collections.singletonList(baseTime), Granularities.ALL.getIterable(new Interval(baseTime, baseTime.plus(Days.days(3)))) ); }
@Test public void testIterableAllSimple() { final DateTime baseTime = DateTimes.of("2011-01-01T00:00:00.000Z"); assertSameInterval( Collections.singletonList(baseTime), Granularities.ALL.getIterable(new Interval(baseTime, baseTime.plus(Days.days(3)))) ); }
@Test public void testIterableMonthSimple() { final DateTime baseTime = DateTimes.of("2011-01-01T00:00:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2011-02-01T00:00:00.000Z"), DateTimes.of("2011-03-01T00:00:00.000Z") ), Granularities.MONTH.getIterable(new Interval(baseTime, baseTime.plus(Months.THREE))) ); }
@Test public void testIterableQuarterSimple() { final DateTime baseTime = DateTimes.of("2011-01-01T00:00:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2011-04-01T00:00:00.000Z"), DateTimes.of("2011-07-01T00:00:00.000Z") ), Granularities.QUARTER.getIterable(new Interval(baseTime, baseTime.plus(Months.NINE))) ); }
@Test public void testIterableYearSimple() { final DateTime baseTime = DateTimes.of("2011-01-01T00:00:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2012-01-01T00:00:00.000Z"), DateTimes.of("2013-01-01T00:00:00.000Z") ), Granularities.YEAR.getIterable(new Interval(baseTime, baseTime.plus(Years.THREE))) ); }
@Test public void testIterableMinuteSimple() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T09:38:00.000Z"), DateTimes.of("2011-01-01T09:39:00.000Z"), DateTimes.of("2011-01-01T09:40:00.000Z") ), Granularities.MINUTE.getIterable(new Interval(baseTime, baseTime.plus(Minutes.THREE))) ); }
@Test public void testIterableWeekSimple() { final DateTime baseTime = DateTimes.of("2011-01-03T00:00:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-03T00:00:00.000Z"), DateTimes.of("2011-01-10T00:00:00.000Z"), DateTimes.of("2011-01-17T00:00:00.000Z") ), Granularities.WEEK.getIterable(new Interval(baseTime, baseTime.plus(Weeks.THREE))) ); }
@Test public void testIterableDaySimple() { final DateTime baseTime = DateTimes.of("2011-01-01T00:00:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2011-01-02T00:00:00.000Z"), DateTimes.of("2011-01-03T00:00:00.000Z") ), Granularities.DAY.getIterable(new Interval(baseTime, baseTime.plus(Days.days(3)))) ); }
@Test public void testIterableHourSimple() { final DateTime baseTime = DateTimes.of("2011-01-01T09:00:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T09:00:00.000Z"), DateTimes.of("2011-01-01T10:00:00.000Z"), DateTimes.of("2011-01-01T11:00:00.000Z") ), Granularities.HOUR.getIterable(new Interval(baseTime, baseTime.plus(Hours.hours(3)))) ); }
@Test public void testIterable15MinuteSimple() { final DateTime baseTime = DateTimes.of("2011-01-01T09:30:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T09:30:00.000Z"), DateTimes.of("2011-01-01T09:45:00.000Z"), DateTimes.of("2011-01-01T10:00:00.000Z") ), Granularities.FIFTEEN_MINUTE.getIterable(new Interval(baseTime, baseTime.plus(Minutes.minutes(45)))) ); }
@Test public void testIterableQuarterComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2011-04-01T00:00:00.000Z"), DateTimes.of("2011-07-01T00:00:00.000Z"), DateTimes.of("2011-10-01T00:00:00.000Z") ), Granularities.QUARTER.getIterable(new Interval(baseTime, baseTime.plus(Months.NINE))) ); }
@Test public void testIterableYearComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2012-01-01T00:00:00.000Z"), DateTimes.of("2013-01-01T00:00:00.000Z"), DateTimes.of("2014-01-01T00:00:00.000Z") ), Granularities.YEAR.getIterable(new Interval(baseTime, baseTime.plus(Years.THREE))) ); }
@Test public void testIterableMinuteComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:02.992Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T09:38:00.000Z"), DateTimes.of("2011-01-01T09:39:00.000Z"), DateTimes.of("2011-01-01T09:40:00.000Z"), DateTimes.of("2011-01-01T09:41:00.000Z") ), Granularities.MINUTE.getIterable(new Interval(baseTime, baseTime.plus(Minutes.THREE))) ); }
@Test public void testIterableWeekComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:02.992Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2010-12-27T00:00:00.000Z"), DateTimes.of("2011-01-03T00:00:00.000Z"), DateTimes.of("2011-01-10T00:00:00.000Z"), DateTimes.of("2011-01-17T00:00:00.000Z") ), Granularities.WEEK.getIterable(new Interval(baseTime, baseTime.plus(Weeks.THREE))) ); }
@Test public void testIterableMonthComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:00.000Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2011-02-01T00:00:00.000Z"), DateTimes.of("2011-03-01T00:00:00.000Z"), DateTimes.of("2011-04-01T00:00:00.000Z") ), Granularities.MONTH.getIterable(new Interval(baseTime, baseTime.plus(Months.THREE))) ); }
@Test public void testIterableHourComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:02.992Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T09:00:00.000Z"), DateTimes.of("2011-01-01T10:00:00.000Z"), DateTimes.of("2011-01-01T11:00:00.000Z"), DateTimes.of("2011-01-01T12:00:00.000Z") ), Granularities.HOUR.getIterable(new Interval(baseTime, baseTime.plus(Hours.hours(3)))) ); }
@Test public void testIterableDayComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:02.992Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T00:00:00.000Z"), DateTimes.of("2011-01-02T00:00:00.000Z"), DateTimes.of("2011-01-03T00:00:00.000Z"), DateTimes.of("2011-01-04T00:00:00.000Z") ), Granularities.DAY.getIterable(new Interval(baseTime, baseTime.plus(Days.days(3)))) ); }
@Test public void testIterable15MinuteComplex() { final DateTime baseTime = DateTimes.of("2011-01-01T09:38:02.992Z"); assertSameInterval( Lists.newArrayList( DateTimes.of("2011-01-01T09:30:00.000Z"), DateTimes.of("2011-01-01T09:45:00.000Z"), DateTimes.of("2011-01-01T10:00:00.000Z"), DateTimes.of("2011-01-01T10:15:00.000Z") ), Granularities.FIFTEEN_MINUTE.getIterable(new Interval(baseTime, baseTime.plus(Minutes.minutes(45)))) ); }