public async Task <IList <HistoryElement> > GetHistoryAsync(string assetId, Contract.TimeInterval timeInterval) { var key = GetHistoryCacheKey(assetId, timeInterval); if (!_assetIdIntervalsHistoriesCache.ContainsKey(key)) { return(null); } var result = _assetIdIntervalsHistoriesCache[key]; return(result); }
private HistoryElementUpdate Create(string assetId, Contract.TimeInterval timeInterval, DateTime timestamp, decimal value) { var result = new HistoryElementUpdate { AssetId = assetId, HistoryElement = new HistoryElement { Timestamp = timestamp, Value = value }, TimeInterval = timeInterval }; return(result); }
private void UpdateHistoryCacheAndPublish(string assetId, Contract.TimeInterval timeInterval, IDictionary <DateTime, decimal> updatedHistory) { var cacheKey = GetHistoryCacheKey(assetId, timeInterval); if (!_assetIdIntervalsHistoriesCache.ContainsKey(cacheKey)) { _assetIdIntervalsHistoriesCache[cacheKey] = Map(updatedHistory); } var previousHistory = _assetIdIntervalsHistoriesCache[cacheKey]; var lastTimestampInUpdatedHistory = updatedHistory.Keys.Last(); var updateExistsInPreviousHistory = previousHistory.Any(x => x.Timestamp == lastTimestampInUpdatedHistory); if (!updateExistsInPreviousHistory) { _assetIdIntervalsHistoriesCache[cacheKey] = Map(updatedHistory); // Publish new index history element var newHistoryElement = Create(assetId, timeInterval, updatedHistory.Keys.Last(), updatedHistory.Values.Last()); _indicesHistoryUpdatesPublisher.Publish(newHistoryElement, MapAssetIdToIndexName(assetId)); } }
private string GetHistoryCacheKey(string assetId, Contract.TimeInterval interval) { return($"{assetId}-{interval}"); }