/// <summary> /// Streams data just in a particular time range. /// Will set newStart and return success if it needs to stream again. /// Start will equal End and return success if it is finished. /// Will return an error container if something failed. /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <param name="newStart">The new starting time that should be used for the next stream</param> /// <returns> A string Container with a success or failure message</returns> private Container StreamTimeRange(Data.DataStream stream, DateTime start, DateTime end, out DateTime newStart) { // Get data download var dataContainer = DataCenter.GetMeasurements(Session.NetworkAlias, stream, start, end); // DataDownload failed, return error if (!dataContainer.Success) { newStart = end; return(new Container(dataContainer.Message)); } // Push data var dataDownload = dataContainer.Data; var pushDataContainer = ChordsBot.PushMeasurementList(Session, dataDownload); if (dataDownload.Count < Config.MaxMeasurements) { // Less than MaxMeasurements downloaded, stream is done after push newStart = end; return(new Container()); } else { // MaxMeasurements downloaded, need more streaming string lastTimestamp = dataDownload[dataDownload.Count - 1].TimeStamp; newStart = DateTime.Parse(lastTimestamp); return(new Container()); } }
/// <summary> /// Calls Data streaming function with assigned parameters /// </summary> /// <param name=""></param> /// <returns>A string Container with a success or failure message</returns> public Container Refresh() { // Get stream object var streamContainer = DataCenter.GetDataStream(Session.NetworkAlias, StreamID); if (!streamContainer.Success) { return(new Container(streamContainer.Message)); } Data.DataStream stream = streamContainer.Data[0]; // Stream from the last measured time up until the session's target end time DateTime start = Session.LastMeasTime; // Since NRDC DataDownload only returns 1000 measurements, several will have to be done // Keep looping until all data is streamed // start is equal to EndTime when stream is complete while (start != EndTime) { var container = StreamTimeRange(stream, start, EndTime, out start); if (container.Success == false) { // Something failed return(container); } } return(new Container()); }
/// <summary> /// Retrieves a list of measurements from the data stream. From startTime to endTime. /// </summary> /// <param name="stream">Data stream to retrieve measurements from. Get this from the GetDataStream function.</param> /// <param name="startTime"></param> /// <param name="endTime"></param> /// <returns>A Measurement Container with the list of measurements or a failure message</returns> public static Container <Structures.Data.Measurement> GetMeasurements(string networkAlias, Structures.Data.DataStream stream, DateTime startTime, DateTime endTime) { // Create stream request HTTP message string startTimeString = startTime.ToUniversalTime().ToString("s"); string endTimeString = endTime.ToUniversalTime().ToString("s"); var dataSpecification = new Structures.Data.DataSpecification(stream, startTimeString, endTimeString); var jsonContent = JsonConvert.SerializeObject(dataSpecification, Config.DefaultSerializationSettings); var stringContent = new StringContent(jsonContent, Encoding.UTF8, "application/json"); // Create HTTP POST var urlContainer = GetDataUrl(networkAlias); if (!urlContainer.Success) { return(new Container <Structures.Data.Measurement>(urlContainer.Message)); } string uri = urlContainer.Data[0] + "data/download"; var response = http.PostAsync(uri, stringContent).Result; // Check HTTP response if (response.IsSuccessStatusCode) { string content = response.Content.ReadAsStringAsync().Result; var dataDownloadResponse = JsonConvert.DeserializeObject <Structures.Data.DataDownloadResponse>(content, Config.DefaultDeserializationSettings); // Check data download response if (dataDownloadResponse.Success) { // Check data download if (dataDownloadResponse.Data.TotalNumberOfMeasurements > 0) { var measurementList = dataDownloadResponse.Data.Measurements; return(new Container <Structures.Data.Measurement>(measurementList)); } else { // No measurements returned return(new Container <Structures.Data.Measurement>("No measurements found")); } } else { // Data download failed return(new Container <Structures.Data.Measurement>("Data Download failed. Response from data center: " + dataDownloadResponse.Message)); } } else { // HTTP didn't return OK return(new Container <Structures.Data.Measurement>("Error From: " + response.RequestMessage + "\n" + response.ReasonPhrase)); } }