package glug.model; import com.madgag.interval.Bound; import com.madgag.interval.Interval; import com.madgag.interval.collections.IntervalMap; import com.madgag.interval.collections.IntervalSet; import glug.model.time.LogInstant; import glug.model.time.LogInterval; import org.joda.time.Duration; import org.joda.time.Instant; import static com.madgag.interval.Bound.MIN; import static com.madgag.interval.collections.IntervalMap.newConcurrentIntervalMap; //Seriously?! public class Uptime { private IntervalSet<LogInstant> uptime = IntervalSet.newIntervalSet(); public void addUptime(Interval<LogInstant> logInterval) { uptime.overrideWith(logInterval); } public Duration at(Instant instant) { Interval<LogInstant> uptimeInterval = uptime.getLatestEventStartingAtOrBefore(new LogInstant(instant)); if (uptimeInterval==null) { return null; } return new Duration(uptimeInterval.get(MIN).getMillis(),instant.getMillis()); } public Instant startPreceding(Instant instant) { Duration uptimeDurationAtInstant = at(instant); return instant.minus(uptimeDurationAtInstant); } }