[ https://issues.apache.org/jira/browse/METRON-690?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15861491#comment-15861491 ]
ASF GitHub Bot commented on METRON-690: --------------------------------------- Github user cestella commented on a diff in the pull request: https://github.com/apache/incubator-metron/pull/450#discussion_r100571012 --- Diff: metron-analytics/metron-profiler-client/src/main/java/org/apache/metron/profiler/client/window/WindowProcessor.java --- @@ -0,0 +1,321 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.metron.profiler.client.window; + +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.tree.ParseTree; +import org.apache.metron.common.dsl.ErrorListener; +import org.apache.metron.common.dsl.GrammarUtils; +import org.apache.metron.common.dsl.ParseException; +import org.apache.metron.common.dsl.Token; +import org.apache.metron.common.utils.ConversionUtils; +import org.apache.metron.profiler.client.window.generated.WindowBaseListener; +import org.apache.metron.profiler.client.window.generated.WindowLexer; +import org.apache.metron.profiler.client.window.generated.WindowParser; +import org.apache.metron.profiler.client.window.predicates.DayPredicates; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.function.Predicate; + +import static org.apache.commons.lang3.StringUtils.isEmpty; + +public class WindowProcessor extends WindowBaseListener { + private Throwable throwable; + private Deque<Token<?>> stack; + private static final Token<Object> LIST_MARKER = new Token<>(null, Object.class); + private static final Token<Object> DAY_SPECIFIER_MARKER = new Token<>(null, Object.class); + private Window window; + + public WindowProcessor() { + this.stack = new ArrayDeque<>(); + this.window = new Window(); + } + + public Window getWindow() { + return window; + } + + private void enterList() { + stack.push(LIST_MARKER); + } + + private List<Function<Long, Predicate<Long>>> getPredicates() { + LinkedList<Function<Long, Predicate<Long>>> predicates = new LinkedList<>(); + while (true) { + Token<?> token = stack.pop(); + if (token == LIST_MARKER) { --- End diff -- Nope, it's reference equals. `LIST_MARKER` is a specific instance of Token. > Create a DSL-based timestamp lookup for profiler to enable sparse windows > ------------------------------------------------------------------------- > > Key: METRON-690 > URL: https://issues.apache.org/jira/browse/METRON-690 > Project: Metron > Issue Type: New Feature > Reporter: Casey Stella > > I propose that we support the following features: > * A starting point that is not current time > * Sparse bins (i.e. the last hour for every tuesday for the last month) > * The ability to skip events (e.g. weekends, holidays) > This would result in a new function with the following arguments: > from - The lookback starting point (default to now) > fromUnits - The units for the lookback starting point > to - The ending point for the lookback window (default to from + binSize) > toUnits - The units for the lookback ending point > including - A list of conditions which we would skip. > weekend > holiday > sunday through saturday > excluding - A list of conditions which we would skip. > weekend > holiday > sunday through saturday > binSize - The size of the lookback bin > binUnits - The units of the lookback bin > Given the number of arguments and their complexity and the fact that many, > many are optional, > PROFILE_LOOKBACK accept a string backed by a DSL to express these criteria > Base Case: A lookback of 1 hour ago > PROFILE_LOOKBACK( '1 hour bins from now') > Example 1: The same time window every tuesday for the last month starting one > hour ago > Just to make this as clear as possible, if this is run at 3PM on Monday > January 23rd, 2017, it would include the following bins: > January 17th, 2PM - 3PM > January 10th, 2PM - 3PM > January 3rd, 2PM - 3PM > December 27th, 2PM - 3PM > PROFILE_LOOKBACK( '1 hour bins from 1 hour to 1 month including tuesdays') > Example 2: The same time window every sunday for the last month starting one > hour ago skipping holidays > Just to make this as clear as possible, if this is run at 3PM on Monday > January 22rd, 2017, it would include the following bins: > January 16th, 2PM - 3PM > January 9th, 2PM - 3PM > January 2rd, 2PM - 3PM > NOT December 25th > PROFILE_LOOKBACK( '1 hour bins from 1 hour to 1 month including tuesdays > excluding holidays') -- This message was sent by Atlassian JIRA (v6.3.15#6346)