Exemple #1
0
        /// <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());
            }
        }
Exemple #2
0
        /// <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));
            }
        }