001/* 002 * (C) Copyright 2017 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * bdelbosc 018 */ 019package org.nuxeo.lib.stream.log.chronicle; 020 021import net.openhft.chronicle.queue.RollCycle; 022import net.openhft.chronicle.queue.RollCycles; 023 024/** 025 * @since 9.3 026 */ 027public class ChronicleRetentionDuration { 028 029 protected static final String SECOND_ROLLING_PERIOD = "s"; 030 031 protected static final String MINUTE_ROLLING_PERIOD = "m"; 032 033 protected static final String HOUR_ROLLING_PERIOD = "h"; 034 035 protected static final String DAY_ROLLING_PERIOD = "d"; 036 037 protected final RollCycle rollCycle; 038 039 protected final int retentionCycles; 040 041 protected final String retention; 042 043 public static final ChronicleRetentionDuration DISABLE = new ChronicleRetentionDuration("0d"); 044 045 public ChronicleRetentionDuration(String retention) { 046 this.retention = retention; 047 this.rollCycle = decodeRollCycle(retention); 048 this.retentionCycles = decodeRetentionCycles(retention); 049 } 050 051 @Override 052 public String toString() { 053 return disable() ? "disabled" : retention; 054 } 055 056 public boolean disable() { 057 return retentionCycles <= 0; 058 } 059 060 public RollCycle getRollCycle() { 061 return rollCycle; 062 } 063 064 @SuppressWarnings("unused") 065 public String getRetention() { 066 return retention; 067 } 068 069 public int getRetentionCycles() { 070 return retentionCycles; 071 } 072 073 protected RollCycle decodeRollCycle(String retentionDuration) { 074 if (retentionDuration == null || retentionDuration.isEmpty()) { 075 return RollCycles.DAILY; 076 } 077 String rollingPeriod = retentionDuration.substring(retentionDuration.length() - 1); 078 switch (rollingPeriod) { 079 case SECOND_ROLLING_PERIOD: 080 return RollCycles.TEST_SECONDLY; 081 case MINUTE_ROLLING_PERIOD: 082 return RollCycles.MINUTELY; 083 case HOUR_ROLLING_PERIOD: 084 return RollCycles.HOURLY; 085 case DAY_ROLLING_PERIOD: 086 return RollCycles.DAILY; 087 default: 088 String msg = "Unknown rolling period: " + rollingPeriod; 089 throw new IllegalArgumentException(msg); 090 } 091 } 092 093 protected int decodeRetentionCycles(String retentionDuration) { 094 if (retentionDuration != null) { 095 return Integer.parseInt(retentionDuration.substring(0, retentionDuration.length() - 1)); 096 } 097 return 0; 098 } 099 100}