| /** |
| * 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 |
| * <p/> |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * <p/> |
| * 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.eagle.alert.engine.evaluator.absence; |
| |
| /** |
| * Since 7/7/16. |
| */ |
| public class AbsenceWindowGenerator { |
| private AbsenceRule rule; |
| |
| public AbsenceWindowGenerator(AbsenceRule rule) { |
| this.rule = rule; |
| } |
| |
| /** |
| * nextWindow. |
| * |
| * @param currTime current timestamp |
| */ |
| public AbsenceWindow nextWindow(long currTime) { |
| AbsenceWindow window = new AbsenceWindow(); |
| if (rule instanceof AbsenceDailyRule) { |
| AbsenceDailyRule r = (AbsenceDailyRule) rule; |
| long adjustment = 0; // if today's window already expires, then adjust to tomorrow's window |
| if (currTime % AbsenceDailyRule.DAY_MILLI_SECONDS > r.startOffset) { |
| adjustment = AbsenceDailyRule.DAY_MILLI_SECONDS; |
| } |
| // use current timestamp to round down to day |
| long day = currTime - currTime % AbsenceDailyRule.DAY_MILLI_SECONDS; |
| day += adjustment; |
| window.startTime = day + r.startOffset; |
| window.endTime = day + r.endOffset; |
| return window; |
| } else { |
| throw new UnsupportedOperationException("not supported rule " + rule); |
| } |
| } |
| } |