public TimeSeriesData(String feed_key, String feed_timezone) { _feedKey = feed_key; _feedTimeZone = TimeZoneInfo.FindSystemTimeZoneById(feed_timezone); _messages = new List<NgestMessage>(); _currentMessage = new NgestMessage(NgestMessage.TIMESERIES_TYPE, _feedKey); _messages.Add(_currentMessage); }
public void addValue(DateTime timestamp, String field, Object value) { DateTime delocalized; // Delocalize timestamp, if it's not already UTC if (_feedTimeZone != TimeZoneInfo.Utc) { delocalized = delocalizeTimestamp(timestamp); } else { delocalized = timestamp; } // Stringify timestamps.. basically String delocalizedStr = delocalized.ToString(TIMESTAMP_FORMAT); try { // Try adding the data point to the current message bool accepted = _currentMessage.addData( delocalizedStr, field, value); if (!accepted) { // Current message is full! // Create new message _currentMessage = new NgestMessage(NgestMessage.TIMESERIES_TYPE, _feedKey); // Add data.. no way for this to fail _currentMessage.addData(delocalizedStr, field, value); // Add to messages list _messages.Add(_currentMessage); } } catch (NonUniqueFieldIDException e) { Console.WriteLine("Field ID: " + field + " already exists at: " + timestamp.ToString(TIMESTAMP_FORMAT)); } }
public List<String> getJSONData() { List<NgestMessage> nGestMessages = new List<NgestMessage>(); List<TimeSeriesDataObject> dataBucket = new List<TimeSeriesDataObject>(); List<String> ret = new List<String>(); // Organize the data into buckets of MAX_BUCKET_SIZE or less foreach (KeyValuePair<DateTime, TimeSeriesDataObject> entry in _data) { Dictionary<String, String> bucket = new Dictionary<String, String>(); // Get the data at this timestamp Dictionary<String, String> fields = entry.Value.Data; // Now have appropriately sized bucket of MAX_BUCKET_SIZE or less NgestMessage message = new NgestMessage(TimeSeriesData.TYPE, _feedKey, dataBucket); foreach (KeyValuePair<String, String> field in fields) { bucket.Add(field.Key, field.Value); if (bucket.Keys.Count == MAX_BUCKET_SIZE) { } } // We want to portion the buckets into // Accumulate bucket size // This is basically the number of keys bucketSize += entry.Value.Length; // Determine if this data bucket is finished if ((bucketSize >= MAX_BUCKET_SIZE) && (dataBucket.Count > 0)) { // Data bucket full, add to list of buckets and clear out // for next time nGestMessages.Add(message); dataBucket = new List<TimestampedValues>(); bucketSize = 0; } // Something of a complicated data structure to serialize correctly TimestampedValues v = new TimestampedValues( entry.Key.ToString(TimeSeriesData.TIMESTAMP_FORMAT), entry.Value.Data); dataBucket.Add(v); } if (dataBucket.Count > 0) { // Append any remainder values NgestMessage message = new NgestMessage(TimeSeriesData.TYPE, _feedKey, dataBucket); nGestMessages.Add(message); } // Could do this in initial loop.. breaking it out to its own loop for simplicity foreach(var message in nGestMessages) { // Serialize and add to return list ret.Add(JsonConvert.SerializeObject(message, Formatting.Indented)); } return ret; }