/** * Configure the history length for a specific entry. If the length is 0 disable history for this * key * * @param pKey history key * @param pMaxEntries number of maximal entries. If larger than globalMaxEntries, then * globalMaxEntries is used instead. */ public synchronized void configure(HistoryKey pKey, int pMaxEntries) { int maxEntries = pMaxEntries > globalMaxEntries ? globalMaxEntries : pMaxEntries; // Remove entries if set to 0 if (pMaxEntries == 0) { removeEntries(pKey); return; } if (pKey.isMBeanPattern()) { patterns.put(pKey, maxEntries); // Trim all already stored keys for (HistoryKey key : historyStore.keySet()) { if (pKey.matches(key)) { HistoryEntry entry = historyStore.get(key); entry.setMaxEntries(maxEntries); entry.trim(); } } } else { HistoryEntry entry = historyStore.get(pKey); if (entry != null) { entry.setMaxEntries(maxEntries); entry.trim(); } else { entry = new HistoryEntry(maxEntries); historyStore.put(pKey, entry); } } }
private HistoryEntry getEntry(HistoryKey pKey, Object pValue, long pTimestamp) { HistoryEntry entry = historyStore.get(pKey); if (entry != null) { return entry; } // Now try all known patterns and add lazily the key for (HistoryKey key : patterns.keySet()) { if (key.matches(pKey)) { entry = new HistoryEntry(patterns.get(key)); entry.add(pValue, pTimestamp); historyStore.put(pKey, entry); return entry; } } return null; }
// Remove entries private void removeEntries(HistoryKey pKey) { if (pKey.isMBeanPattern()) { patterns.remove(pKey); List<HistoryKey> toRemove = new ArrayList<HistoryKey>(); for (HistoryKey key : historyStore.keySet()) { if (pKey.matches(key)) { toRemove.add(key); } } // Avoid concurrent modification exceptions for (HistoryKey key : toRemove) { historyStore.remove(key); } } else { HistoryEntry entry = historyStore.get(pKey); if (entry != null) { historyStore.remove(pKey); } } }