コード例 #1
0
        /// <summary>
        /// Loads the most recent DeviceTelemetrySummaryModel for a specified Device.
        /// </summary>
        /// <param name="deviceId">
        /// The ID of the Device for which a telemetry summary model should be
        /// returned.
        /// </param>
        /// <param name="minTime">
        /// If provided the the minimum time stamp of the summary data that should
        /// be loaded.
        /// </param>
        /// <returns>
        /// The most recent DeviceTelemetrySummaryModel for the Device,
        /// specified by deviceId.
        /// </returns>
        public async Task <DeviceTelemetrySummaryModel> LoadLatestDeviceTelemetrySummaryAsync(
            string deviceId,
            DateTime?minTime)
        {
            DeviceTelemetrySummaryModel summaryModel = null;
            IEnumerable <DeviceTelemetrySummaryModel> blobModels;
            var telemetryBlobReader = await _blobStorageManager.GetReader(_telemetrySummaryPrefix, minTime);

            foreach (var telemetryStream in telemetryBlobReader)
            {
                try
                {
                    blobModels = LoadBlobTelemetrySummaryModels(telemetryStream.Data, telemetryStream.LastModifiedTime);
                }
                catch
                {
                    continue;
                }

                if (blobModels == null)
                {
                    break;
                }

                blobModels = blobModels.Where(t => t != null);

                if (!string.IsNullOrEmpty(deviceId))
                {
                    blobModels = blobModels.Where(t => t.DeviceId == deviceId);
                }

                summaryModel = blobModels.LastOrDefault();
                if (summaryModel != null)
                {
                    break;
                }
            }

            return(summaryModel);
        }
コード例 #2
0
        private static List <DeviceTelemetrySummaryModel> LoadBlobTelemetrySummaryModels(Stream stream, DateTime?lastModifiedTime)
        {
            Debug.Assert(stream != null, "stream is a null reference.");

            var models = new List <DeviceTelemetrySummaryModel>();

            try
            {
                stream.Position = 0;
                using (var reader = new StreamReader(stream))
                {
                    IEnumerable <StrDict>       strdicts = ParsingHelper.ParseCsv(reader).ToDictionaries();
                    DeviceTelemetrySummaryModel model;
                    double number;
                    string str;
                    foreach (StrDict strdict in strdicts)
                    {
                        model = new DeviceTelemetrySummaryModel();

                        if (strdict.TryGetValue("deviceid", out str))
                        {
                            model.DeviceId = str;
                        }

                        if (strdict.TryGetValue("averagespeed", out str) &&
                            double.TryParse(
                                str,
                                NumberStyles.Float,
                                CultureInfo.InvariantCulture,
                                out number))
                        {
                            model.AverageSpeed = number;
                        }

                        if (strdict.TryGetValue("maximumspeed", out str) &&
                            double.TryParse(
                                str,
                                NumberStyles.Float,
                                CultureInfo.InvariantCulture,
                                out number))
                        {
                            model.MaximumSpeed = number;
                        }

                        if (strdict.TryGetValue("minimumspeed", out str) &&
                            double.TryParse(
                                str,
                                NumberStyles.Float,
                                CultureInfo.InvariantCulture,
                                out number))
                        {
                            model.MinimumSpeed = number;
                        }

                        if (strdict.TryGetValue("timeframeminutes", out str) &&
                            double.TryParse(
                                str,
                                NumberStyles.Float,
                                CultureInfo.InvariantCulture,
                                out number))
                        {
                            model.TimeFrameMinutes = number;
                        }

                        model.Timestamp = lastModifiedTime;

                        models.Add(model);
                    }
                }
            }
            finally
            {
            }

            return(models);
        }
コード例 #3
0
        private static List <DeviceTelemetrySummaryModel> LoadBlobTelemetrySummaryModels(Stream stream, DateTime?lastModifiedTime)
        {
            Debug.Assert(stream != null, "stream is a null reference.");

            var models = new List <DeviceTelemetrySummaryModel>();

            TextReader reader = null;

            try
            {
                stream.Position = 0;
                reader          = new StreamReader(stream);

                IEnumerable <StrDict>       strdicts = ParsingHelper.ParseCsv(reader).ToDictionaries();
                DeviceTelemetrySummaryModel model;
                double number;
                string str;
                foreach (StrDict strdict in strdicts)
                {
                    model = new DeviceTelemetrySummaryModel();

                    if (strdict.TryGetValue("deviceid", out str))
                    {
                        model.DeviceId = str;
                    }

                    if (strdict.TryGetValue("averagehumidity", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.AverageHumidity = number;
                    }

                    if (strdict.TryGetValue("maxhumidity", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.MaximumHumidity = number;
                    }

                    if (strdict.TryGetValue("minimumhumidity", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.MinimumHumidity = number;
                    }

                    //*********************************************************************************
                    // Demo code - Step #3 - Parse 3 new temperature fields from the CSV file stored in
                    // Blob storage from Streal Analytics
                    //
                    if (strdict.TryGetValue("averagetemperature", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.AverageTemperature = number;
                    }

                    if (strdict.TryGetValue("maxtemperature", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.MaximumTemperature = number;
                    }

                    if (strdict.TryGetValue("minimumtemperature", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.MinimumTemperature = number;
                    }
                    //*******************************************************************************

                    if (strdict.TryGetValue("timeframeminutes", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.TimeFrameMinutes = number;
                    }

                    model.Timestamp = lastModifiedTime;

                    models.Add(model);
                }
            }
            finally
            {
                IDisposable disp;
                if ((disp = stream) != null)
                {
                    disp.Dispose();
                }

                if ((disp = reader) != null)
                {
                    disp.Dispose();
                }
            }

            return(models);
        }
        private async static Task <List <DeviceTelemetrySummaryModel> > LoadBlobTelemetrySummaryModelsAsync(
            CloudBlockBlob blob)
        {
            Debug.Assert(blob != null, "blob is a null reference.");

            var models = new List <DeviceTelemetrySummaryModel>();

            TextReader   reader = null;
            MemoryStream stream = null;

            try
            {
                stream = new MemoryStream();
                await blob.DownloadToStreamAsync(stream);

                stream.Position = 0;
                reader          = new StreamReader(stream);

                IEnumerable <StrDict>       strdicts = ParsingHelper.ParseCsv(reader).ToDictionaries();
                DeviceTelemetrySummaryModel model;
                double number;
                string str;
                foreach (StrDict strdict in strdicts)
                {
                    model = new DeviceTelemetrySummaryModel();

                    if (strdict.TryGetValue("deviceid", out str))
                    {
                        model.DeviceId = str;
                    }

                    if (strdict.TryGetValue("averagehumidity", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.AverageHumidity = number;
                    }

                    if (strdict.TryGetValue("maxhumidity", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.MaximumHumidity = number;
                    }

                    if (strdict.TryGetValue("minimumhumidity", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.MinimumHumidity = number;
                    }

                    if (strdict.TryGetValue("timeframeminutes", out str) &&
                        double.TryParse(
                            str,
                            NumberStyles.Float,
                            CultureInfo.InvariantCulture,
                            out number))
                    {
                        model.TimeFrameMinutes = number;
                    }

                    // Translate LastModified to local time zone.  DateTimeOffsets
                    // don't do this automatically.  This is for equivalent behavior
                    // with parsed DateTimes.
                    if ((blob.Properties != null) &&
                        blob.Properties.LastModified.HasValue)
                    {
                        model.Timestamp = blob.Properties.LastModified.Value.LocalDateTime;
                    }

                    models.Add(model);
                }
            }
            finally
            {
                IDisposable disp;
                if ((disp = stream) != null)
                {
                    disp.Dispose();
                }

                if ((disp = reader) != null)
                {
                    disp.Dispose();
                }
            }

            return(models);
        }
        /// <summary>
        /// Loads the most recent DeviceTelemetrySummaryModel for a specified Device.
        /// </summary>
        /// <param name="deviceId">
        /// The ID of the Device for which a telemetry summary model should be
        /// returned.
        /// </param>
        /// <param name="minTime">
        /// If provided the the minimum time stamp of the summary data that should
        /// be loaded.
        /// </param>
        /// <returns>
        /// The most recent DeviceTelemetrySummaryModel for the Device,
        /// specified by deviceId.
        /// </returns>
        public async Task <DeviceTelemetrySummaryModel> LoadLatestDeviceTelemetrySummaryAsync(
            string deviceId,
            DateTime?minTime)
        {
            DeviceTelemetrySummaryModel summaryModel = null;

            CloudBlobContainer container =
                await BlobStorageHelper.BuildBlobContainerAsync(
                    this._telemetryStoreConnectionString,
                    _telemetryContainerName);

            IEnumerable <IListBlobItem> blobs =
                await BlobStorageHelper.LoadBlobItemsAsync(
                    async (token) =>
            {
                return(await container.ListBlobsSegmentedAsync(
                           _telemetrySummaryPrefix,
                           true,
                           BlobListingDetails.None,
                           null,
                           token,
                           null,
                           null));
            });

            blobs = blobs.OrderByDescending(t => BlobStorageHelper.ExtractBlobItemDate(t));

            IEnumerable <DeviceTelemetrySummaryModel> blobModels;
            CloudBlockBlob blockBlob;

            foreach (IListBlobItem blob in blobs)
            {
                if ((blockBlob = blob as CloudBlockBlob) == null)
                {
                    continue;
                }

                // Translate LastModified to local time zone.  DateTimeOffsets
                // don't do this automatically.  This is for equivalent behavior
                // with parsed DateTimes.
                if (minTime.HasValue &&
                    (blockBlob.Properties != null) &&
                    blockBlob.Properties.LastModified.HasValue &&
                    (blockBlob.Properties.LastModified.Value.LocalDateTime < minTime.Value))
                {
                    break;
                }

                try
                {
                    blobModels = await LoadBlobTelemetrySummaryModelsAsync(blockBlob);
                }
                catch
                {
                    continue;
                }

                if (blobModels == null)
                {
                    break;
                }

                blobModels = blobModels.Where(t => t != null);

                if (!string.IsNullOrEmpty(deviceId))
                {
                    blobModels = blobModels.Where(t => t.DeviceId == deviceId);
                }

                summaryModel = blobModels.LastOrDefault();
                if (summaryModel != null)
                {
                    break;
                }
            }

            return(summaryModel);
        }
        private async static Task <List <DeviceTelemetrySummaryModel> > LoadBlobTelemetrySummaryModelsAsync(
            CloudBlockBlob blob)
        {
            IDisposable                        disp;
            IEnumerable <StrDict>              strdicts;
            DeviceTelemetrySummaryModel        model;
            List <DeviceTelemetrySummaryModel> models;
            double       number;
            TextReader   reader;
            string       str;
            MemoryStream stream;

            Debug.Assert(blob != null, "blob is a null reference.");

            models = new List <DeviceTelemetrySummaryModel>();

            reader = null;
            stream = null;
            try
            {
                stream = new MemoryStream();
                await blob.DownloadToStreamAsync(stream);

                stream.Position = 0;
                reader          = new StreamReader(stream);

                strdicts = ParsingHelper.ParseCsv(reader).ToDictionaries();
                foreach (StrDict strdict in strdicts)
                {
                    model = new DeviceTelemetrySummaryModel();

                    if (strdict.TryGetValue("deviceid", out str))
                    {
                        model.DeviceId = str;
                    }

                    if (strdict.TryGetValue("averagehumidity", out str) &&
                        double.TryParse(str, out number))
                    {
                        model.AverageHumidity = number;
                    }

                    if (strdict.TryGetValue("maxhumidity", out str) &&
                        double.TryParse(str, out number))
                    {
                        model.MaximumHumidity = number;
                    }

                    if (strdict.TryGetValue("minimumhumidity", out str) &&
                        double.TryParse(str, out number))
                    {
                        model.MinimumHumidity = number;
                    }

                    if (strdict.TryGetValue("timeframeminutes", out str) &&
                        double.TryParse(str, out number))
                    {
                        model.TimeFrameMinutes = number;
                    }

                    if ((blob.Properties != null) &&
                        blob.Properties.LastModified.HasValue)
                    {
                        model.Timestamp =
                            blob.Properties.LastModified.Value.UtcDateTime;
                    }

                    models.Add(model);
                }
            }
            finally
            {
                if ((disp = stream) != null)
                {
                    disp.Dispose();
                }

                if ((disp = reader) != null)
                {
                    disp.Dispose();
                }
            }

            return(models);
        }