public class BeaconCacheImpl extends java.util.Observable implements BeaconCache
Beacon data.
This cache needs to deal with high concurrency, since it's possible that a lot of threads insert new data concurrently. Furthermore two OpenKit internal threads are also accessing the cache.
| Constructor and Description |
|---|
BeaconCacheImpl(Logger logger)
Create BeaconCache.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addActionData(BeaconKey key,
long timestamp,
java.lang.String data)
Add action data for a given
beaconID to this cache. |
void |
addEventData(BeaconKey key,
long timestamp,
java.lang.String data)
Add event data for a given
key to this cache. |
void |
deleteCacheEntry(BeaconKey key)
Delete a cache entry for a given
key. |
int |
evictRecordsByAge(BeaconKey key,
long minTimestamp)
Evict
beacon cache records by age for a given beacon. |
int |
evictRecordsByNumber(BeaconKey key,
int numRecords)
Evict
beacon cache records by number for given beacon. |
java.lang.String[] |
getActions(BeaconKey key)
Get a shallow copy of actions collected so far.
|
java.util.Set<BeaconKey> |
getBeaconKeys()
Get a Set of currently inserted
BeaconKeys. |
java.lang.String[] |
getEvents(BeaconKey key)
Get a shallow copy of events collected so far.
|
java.lang.String |
getNextBeaconChunk(BeaconKey key,
java.lang.String chunkPrefix,
int maxSize,
char delimiter)
Get the next chunk for sending to the backend.
|
long |
getNumBytesInCache()
Get number of bytes currently stored in cache.
|
boolean |
isEmpty(BeaconKey key)
Tests if an cached entry for
key is empty. |
void |
removeChunkedData(BeaconKey key)
Remove all data that was previously included in chunks.
|
void |
resetChunkedData(BeaconKey key)
Reset all data that was previously included in chunks.
|
addObserver, clearChanged, countObservers, deleteObserver, deleteObservers, hasChanged, notifyObservers, notifyObservers, setChangedclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitaddObserverpublic BeaconCacheImpl(Logger logger)
logger - public void addEventData(BeaconKey key, long timestamp, java.lang.String data)
BeaconCachekey to this cache.
All registered observers are notified, after the event data has been added.
addEventData in interface BeaconCachekey - The key of the beacon (aka Session ID and Session seq. no.) for which to add event data.timestamp - The data's timestamp.data - serialized event data to add.public void addActionData(BeaconKey key, long timestamp, java.lang.String data)
BeaconCachebeaconID to this cache.addActionData in interface BeaconCachekey - The key of the beacon (aka Session ID and Session seq. no.) for which to add action data.timestamp - The data's timestamp.data - serialized action data to add.public void deleteCacheEntry(BeaconKey key)
BeaconCachekey.deleteCacheEntry in interface BeaconCachekey - The beacon's ID (aka Session ID and Session seq. no.) which to delete.public java.lang.String getNextBeaconChunk(BeaconKey key, java.lang.String chunkPrefix, int maxSize, char delimiter)
BeaconCacheNote: This method must only be invoked from the beacon sending thread.
getNextBeaconChunk in interface BeaconCachekey - The key of the beacon for which to get the next chunk.chunkPrefix - Prefix to append to the beginning of the chunk.maxSize - Maximum chunk size. As soon as chunk's size is greater than or equal to maxSize result is returned.delimiter - Delimiter between consecutive chunks.null if given key does not exist, an empty string, if there is no more data to send
or the next chunk to send.public void removeChunkedData(BeaconKey key)
BeaconCache
This method must be called, when data retrieved via BeaconCache.getNextBeaconChunk(BeaconKey, String, int, char)
was successfully sent to the backend, otherwise subsequent calls to BeaconCache.getNextBeaconChunk(BeaconKey, String, int, char)
will retrieve the same data again and again.
Note: This method must only be invoked from the beacon sending thread.
removeChunkedData in interface BeaconCachekey - The key of the beacon for which to remove already chunked data.public void resetChunkedData(BeaconKey key)
BeaconCacheNote: This method must only be invoked from the beacon sending thread.
resetChunkedData in interface BeaconCachekey - The key of the beacon for which to remove already chunked data.public java.lang.String[] getEvents(BeaconKey key)
Although this method is intended for debugging purposes only, it still does appropriate locking.
key - The key of the beacon for which to retrieve the events.public java.lang.String[] getActions(BeaconKey key)
Although this method is intended for debugging purposes only, it still does appropriate locking.
key - The key of the beacon for which to retrieve the events.public java.util.Set<BeaconKey> getBeaconKeys()
BeaconCacheBeaconKeys.
The return value is a snapshot of currently inserted beacon keys. All changes made after this call are not reflected in the returned Set.
getBeaconKeys in interface BeaconCachepublic int evictRecordsByAge(BeaconKey key, long minTimestamp)
BeaconCachebeacon cache records by age for a given beacon.evictRecordsByAge in interface BeaconCachekey - The key identifying a beacon.minTimestamp - The minimum timestamp allowed.public int evictRecordsByNumber(BeaconKey key, int numRecords)
BeaconCachebeacon cache records by number for given beacon.evictRecordsByNumber in interface BeaconCachekey - The key identifying a beacon beacon.numRecords - The maximum number of records to evict.public long getNumBytesInCache()
BeaconCachegetNumBytesInCache in interface BeaconCachepublic boolean isEmpty(BeaconKey key)
BeaconCachekey is empty.isEmpty in interface BeaconCachekey - The key identifying a beacon.true if the cached entry is empty, false otherwise.