/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.datasource.timecache; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.SortedMap; import java.util.TreeMap; import org.diirt.datasource.timecache.source.DataSource; import org.diirt.util.time.TimeInterval; /** * Statistics of {@link PVCache}. * @author Fred Arnaud (Sopra Group) - ITER */ public class PVCacheStatistics { private final String channelName; private SortedMap<Integer, DataRequestStatistics> requestStatsByID = Collections .synchronizedSortedMap(new TreeMap<Integer, DataRequestStatistics>()); public PVCacheStatistics(String channelName) { this.channelName = channelName; } public void intervalRequested(int requestID, DataSource source) { requestStatsByID.put(requestID, new DataRequestStatistics(source)); } /** * Setting interval when the request ends avoid managing changes due to * request optimization */ public void intervalsCompleted(int requestID, TimeInterval interval) { DataRequestStatistics rs = requestStatsByID.get(requestID); rs.intervalCompleted(); rs.setInterval(interval); } public List<DataRequestStatistics> getRequestStatsIn(TimeInterval interval) { List<DataRequestStatistics> stats_list = new LinkedList<DataRequestStatistics>(); Iterator<DataRequestStatistics> it_rs = requestStatsByID.values().iterator(); while (it_rs.hasNext()) { DataRequestStatistics rs = it_rs.next(); if (interval.contains(rs.getStart())) { stats_list.add(rs); } } return stats_list; } public String toConsoleString() { StringBuilder sb = new StringBuilder(); sb.append("Requested intervals for " + channelName + " (start => interval: duration):\n"); for (DataRequestStatistics stats : requestStatsByID.values()) { sb.append(stats.toConsoleString()); sb.append("\n"); } return sb.toString(); } }