public void Create() { _currentContext = new SQLAzureDataContext(); foreach (var thisRecord in _currentRequestManager.Records) { var elementId = thisRecord.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var from = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "from").Value); var to = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "to").Value); float?volume = null; if (thisRecord.Count(kvp => kvp.Key == "volume_value") != 0) { volume = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "volume_value").Value); } float?level = null; if (thisRecord.Count(kvp => kvp.Key == "level_value") != 0) { level = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "level_value").Value); } var reservoirData = new ReservoirData { Reservoir = _currentContext.Reservoirs.FirstOrDefault(x => x.Identifier == elementId), From = from, To = to, Volume = volume, Level = level }; _currentContext.ReservoirDatas.InsertOnSubmit(reservoirData); } _currentContext.SubmitChanges(); }
public string Read() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var dmas = _currentContext.DMAs.Where(x => x.Identifier == elementId); var resultTxt = string.Empty; foreach (var thisReading in dmas) { resultTxt += "<dma>" + $"<weatherStationId>{thisReading.WeatherStation.Name}</weatherStationId>" + $"<burstThreshold>{thisReading.BurstThreshold}</burstThreshold>" + $"</dma>{Environment.NewLine}"; } var dmaName = string.Empty; if (resultTxt != string.Empty) { var firstOrDefault = _currentContext.DMAs.FirstOrDefault(x => x.Identifier == elementId); if (firstOrDefault != null) { dmaName = firstOrDefault.Name; } } var response = "<response>" + "<dmaSet>" + $"<elementId>{elementId}</elementId>" + $"<name>{dmaName}</name>{resultTxt}</dmaSet>" + "</response>"; return(response); }
public string Readdicmsite() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value); var end = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value); var allResults = _currentContext.GetDICMSite(start, end, elementId).ToList(); var resultTxt = Empty; foreach (var thisReading in allResults) { var volumeValue = thisReading.Volume != null ? "<variable name=\"volume\">" + $"<value>{thisReading.Volume}</value>" + "</variable>" : null; var durationValue = thisReading.Duration != null ? "<variable name=\"duration\">" + $"<value>{thisReading.Duration}</value>" + "</variable>" : null; if (!(IsNullOrEmpty(volumeValue) && IsNullOrEmpty(durationValue))) { resultTxt += $"<record>{volumeValue}{durationValue}</record>{Environment.NewLine}"; } } var response = "<response><recordSet>" + $"<elementId>{elementId}</elementId>" + $"<from>{start}</from>" + $"<to>{end}</to>{resultTxt}</recordSet>" + "</response>"; return(response); }
public void Create() { _currentContext = new SQLAzureDataContext(); foreach (var thisRecord in _currentRequestManager.Records) { var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var from = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "from").Value); var to = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "to").Value); float?volume = null; if (thisRecord.Count(kvp => kvp.Key == "volume_value") != 0) { volume = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "volume_value").Value); } float?level = null; if (thisRecord.Count(kvp => kvp.Key == "outflow_value") != 0) { level = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "outflow_value").Value); } float?inflow = null; if (thisRecord.Count(kvp => kvp.Key == "inflow_value") != 0) { inflow = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "inflow_value").Value); } _currentContext.InsertTankData(elementId, from, to, volume, level, inflow); } _currentContext.SubmitChanges(); }
public void Create() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var baseTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "baseTime").Value); var creationTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "creationTime").Value); var generatedBy = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "generatedBy").Value; var comment = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "comment").Value; foreach (var thisRecord in _currentRequestManager.Records) { var from = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "from").Value); var to = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "to").Value); float?precipitation = null; if (thisRecord.Count(kvp => kvp.Key == "precipitation_value") != 0) { precipitation = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "precipitation_value").Value); } float?temperature = null; if (thisRecord.Count(kvp => kvp.Key == "temperature_value") != 0) { temperature = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "temperature_value").Value); } int?humidity = null; if (thisRecord.Count(kvp => kvp.Key == "humidity_value") != 0) { humidity = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "humidity_value").Value); } int?pressure = null; if (thisRecord.Count(kvp => kvp.Key == "pressure_value") != 0) { pressure = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "pressure_value").Value); } float?windVelocity = null; if (thisRecord.Count(kvp => kvp.Key == "wind_velocity_value") != 0) { windVelocity = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "wind_velocity_value").Value); } var windDirection = thisRecord.Count(kvp => kvp.Key == "wind_direction_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "wind_direction_value").Value : null; float?solarRadiation = null; if (thisRecord.Count(kvp => kvp.Key == "solar_radiation_value") != 0) { solarRadiation = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "solar_radiation_value").Value); } _currentContext.InsertWeatherForecastData(elementId, from, to, precipitation, temperature, humidity, pressure, windVelocity, windDirection, solarRadiation, baseTime, creationTime, comment, generatedBy); } _currentContext.SubmitChanges(); }
public void ProcessQueue(CloudBlockBlob blob, CloudQueueMessage receivedMessage, CloudQueue urbanWaterQueue) { EventSourceWriter.Log.MessageMethod("Worker Role Prcessing weather file " + receivedMessage.Id + " " + blob.Name); var currentContext = new SQLAzureDataContext(); using (var sr = new StringReader(blob.DownloadText())) { using (var csv = new CsvReader(sr)) { while (csv.Read()) { try { var newWeatherReading = new WeatherData { From = DateTime.Parse(csv.CurrentRecord[0]), To = DateTime.Parse(csv.CurrentRecord[1]), Humidity = Parse(csv.CurrentRecord[2]), Precipitation = Parse(csv.CurrentRecord[3]), Temperature = double.Parse(csv.CurrentRecord[4]), Pressure = Parse(csv.CurrentRecord[5]), Solar_radiation = Parse(csv.CurrentRecord[6]), Wind_direction = csv.CurrentRecord[7], Wind_velocity = double.Parse(csv.CurrentRecord[8]), WeatherStation = currentContext.WeatherStations.FirstOrDefault(x => x.Name == csv.CurrentRecord[5]) }; currentContext.WeatherDatas.InsertOnSubmit(newWeatherReading); } catch (Exception e) { EventSourceWriter.Log.MessageMethod("Exception processing weather reading: " + e.Message); } } currentContext.SubmitChanges(); } } EventSourceWriter.Log.MessageMethod("Processing Complete Entry added to storage " + receivedMessage.Id); urbanWaterQueue.DeleteMessage(receivedMessage); var newEvent = new Event { BusDispatched = false, EventDateTime = DateTime.Now, EventType = (int)EventTypes.NewMeteringData }; currentContext.Events.InsertOnSubmit(newEvent); currentContext.SubmitChanges(); }
public void Create() { _currentContext = new SQLAzureDataContext(); foreach (var thisRecord in _currentRequestManager.Records) { var elementId = thisRecord.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var from = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "from").Value); var to = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "to").Value); double?precipitation = null; if (thisRecord.Count(kvp => kvp.Key == "precipitation_value") != 0) { precipitation = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "precipitation_value").Value); } double?temperature = null; if (thisRecord.Count(kvp => kvp.Key == "temperature_value") != 0) { temperature = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "temperature_value").Value); } int?humidity = null; if (thisRecord.Count(kvp => kvp.Key == "humidity_value") != 0) { humidity = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "humidity_value").Value); } int?pressure = null; if (thisRecord.Count(kvp => kvp.Key == "pressure_value") != 0) { pressure = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "pressure_value").Value); } double?windVelocity = null; if (thisRecord.Count(kvp => kvp.Key == "wind_velocity_value") != 0) { windVelocity = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "wind_velocity_value").Value); } var windDirection = thisRecord.Count(kvp => kvp.Key == "wind_direction_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "wind_direction_value").Value : null; double?solarRadiation = null; if (thisRecord.Count(kvp => kvp.Key == "solar_radiation_value") != 0) { solarRadiation = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "solar_radiation_value").Value); } _currentContext.InsertWeatherData(elementId, from, to, precipitation, temperature, humidity, pressure, windVelocity, windDirection, solarRadiation); } _currentContext.SubmitChanges(); }
public string ReadList() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.First(kvp => kvp.Key == "elementId").Value; var meters = _currentContext.GetmeterList(elementId); var resultTxt = meters.Aggregate(string.Empty, (current, thisReading) => current + ("<record>" + "<variable name=\"meterId\">" + $"<value>{thisReading.MeterIdentity}</value>" + "</variable>" + $"</record>{Environment.NewLine}")); var response = "<response>" + "<recordSet>" + $"<elementId>{elementId}</elementId>{resultTxt}</recordSet>" + "</response>"; return(response); }
public string Read() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value); var end = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value); var allResults = _currentContext.GetAvailabilityPredictionData(start, end, elementId).ToList(); var resultTxt = new StringBuilder(); var baseTime = string.Empty; var creationTime = string.Empty; var generatedBy = string.Empty; var comment = string.Empty; foreach (var thisReading in allResults) { if (baseTime == string.Empty) { baseTime = thisReading.BaseTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK"); creationTime = thisReading.CreationTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK"); } generatedBy = thisReading.Identifier; var contributingVolumeValue = thisReading.Contributing_volume != null ? $"<variable name=\"contributing_volume\">{$"<value>{thisReading.Contributing_volume}</value>"}</variable>" : null; resultTxt.Append("<record>" + $"<from>{thisReading.From.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</from>" + $"<to>{thisReading.To.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</to>{contributingVolumeValue}</record>{Environment.NewLine}"); } string reservoirName = string.Empty; if (resultTxt.Length > 0) { reservoirName = _currentContext.Reservoirs.FirstOrDefault(x => x.Identifier == elementId)?.Name; } return("<response>" + "<recordSet>" + $"<elementId>{elementId}</elementId>" + $"<name>{reservoirName}</name>" + $"<metadata baseTime=\"{baseTime}\" creationTime=\"{creationTime}\" generatedBy=\"{generatedBy}\" comment=\"{comment}\" />{resultTxt}</recordSet>" + "</response>"); }
public void Create() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var baseTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "baseTime").Value); var creationTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "creationTime").Value); var generatedBy = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "generatedBy").Value; var comment = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "comment").Value; foreach (var thisRecord in _currentRequestManager.Records) { var from = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "from").Value); var to = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "to").Value); float?realLossesValue = null; if (thisRecord.Count(kvp => kvp.Key == "real_losses_value") != 0) { realLossesValue = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "real_losses_value").Value); } var realLossesType = thisRecord.Count(kvp => kvp.Key == "real_losses_type") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "real_losses_type").Value : Empty; var application = _currentContext.Applications.FirstOrDefault(x => x.Identifier == generatedBy); var dmaLeakageData = new DMALeakageData { DMA = _currentContext.DMAs.FirstOrDefault(x => x.Identifier == elementId), From = @from, To = to, CreationTime = creationTime, Application = application, Comment = comment, BaseTime = baseTime, Real_losses_value = realLossesValue, Real_losses_Type = realLossesType }; _currentContext.DMALeakageDatas.InsertOnSubmit(dmaLeakageData); } _currentContext.SubmitChanges(); }
public void Create() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var baseTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "baseTime").Value); var creationTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "creationTime").Value); var generatedBy = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "generatedBy").Value; var comment = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "comment").Value; foreach (var thisRecord in _currentRequestManager.Records) { var from = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "start").Value); var to = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "end").Value); var demand = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "demand_value").Value); float?uncertainty = null; if (thisRecord != null && thisRecord.Any(kvp => kvp.Key == "uncertainty_value")) { uncertainty = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "uncertainty_value").Value); } var application = _currentContext.Applications.FirstOrDefault(x => x.Identifier == generatedBy); DemandPredictionData demandPredictionData = new DemandPredictionData { DMA = _currentContext.DMAs.FirstOrDefault(x => x.Identifier == elementId), From = from, To = to, Demand = demand, Uncertainty = uncertainty, BaseTime = baseTime, CreationTime = creationTime, Application = application, Comment = comment }; _currentContext.DemandPredictionDatas.InsertOnSubmit(demandPredictionData); } _currentContext.SubmitChanges(); }
public void Create() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var baseTime = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "baseTime").Value); var creationTime = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "creationTime").Value); var generatedBy = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "generatedBy").Value; var comment = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "comment").Value; foreach (var thisRecord in _currentRequestManager.Records) { var from = Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "from").Value); var to = Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "to").Value); float?contributingVolume = null; if (thisRecord.Count(kvp => kvp.Key == "contributing_volume_value") > 0) { contributingVolume = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "contributing_volume_value").Value); } var application = _currentContext.Applications.FirstOrDefault(x => x.Identifier == generatedBy); var availabilityPredictionData = new AvailabilityPredictionData { Reservoir = _currentContext.Reservoirs.FirstOrDefault(x => x.Identifier == elementId), From = @from, To = to, CreationTime = creationTime, Application = application, Comment = comment, BaseTime = baseTime, Contributing_volume = contributingVolume }; _currentContext.AvailabilityPredictionDatas.InsertOnSubmit(availabilityPredictionData); } _currentContext.SubmitChanges(); }
public void Create() { _currentContext = new SQLAzureDataContext(); var dma = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; foreach (var thisRecord in _currentRequestManager.Records) { var time = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "time").Value); float?pressure = null; if (thisRecord.Count(kvp => kvp.Key == "pressure_value") != 0) { pressure = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "pressure_value").Value); } float?volume = null; if (thisRecord.Count(kvp => kvp.Key == "volume_value") != 0) { volume = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "volume_value").Value); } float?flow = null; if (thisRecord.Count(kvp => kvp.Key == "flow_value") != 0) { flow = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "flow_value").Value); } else { if (volume != null) { flow = (volume * 1000) / (15 * 60); } } _currentContext.InsertDMAData(dma, time, flow, volume, pressure); } }
public string ReadList() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.First(kvp => kvp.Key == "elementId"); var dmAs = _currentContext.DMAs.Where(x => x.Site.Name == elementId.Value); var resultTxt = string.Empty; foreach (var thisReading in dmAs) { resultTxt += "<dma>" + $"<elementId>{thisReading.Identifier}</elementId>" + $"<name>{thisReading.Name}</name>" + $"<weatherStationId>{thisReading.WeatherStation.Name}</weatherStationId>" + $"<burstThreshold>{thisReading.BurstThreshold}</burstThreshold>" + $"</dma>{Environment.NewLine}"; } var response = "<response>" + "<recordSet>" + $"<elementId>{elementId.Value}</elementId>{resultTxt}</recordSet>" + "</response>"; return(response); }
public string Create() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var baseTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "baseTime").Value); var creationTime = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "creationTime").Value); var generatedBy = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "generatedBy").Value; var comment = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "comment").Value; foreach (var thisRecord in _currentRequestManager.Records) { var fromDateTime = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "start").Value); var toDateTime = DateTimeOffset.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "end").Value); var price = decimal.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "price_value").Value); var application = _currentContext.Applications.FirstOrDefault(x => x.Identifier == generatedBy); var pricingData = new PricingData { DMA = _currentContext.DMAs.FirstOrDefault(x => x.Identifier == elementId), From = fromDateTime, To = toDateTime, CreationTime = creationTime, Application = application, Comment = comment, BaseTime = baseTime, Price = price }; _currentContext.PricingDatas.InsertOnSubmit(pricingData); } _currentContext.SubmitChanges(); return(elementId); }
public string Read(bool bWrap) { _currentContext = new SQLAzureDataContext(); var meterId = _currentRequestManager.RootElements.Count(kvp => kvp.Key == "elementId") != 0 ? _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value : string.Empty; var start = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "start") ? DateTime.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value) : DateTime.MinValue; var end = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "end") ? DateTime.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value) : DateTime.MaxValue; long timestep = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "timeStep") ? Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "timeStep").Value) : -1; var resultTxt = new StringBuilder(); var elementText = "<elementId>" + meterId + "</elementId>"; var site = _currentContext.Meters.FirstOrDefault(x => x.MeterIdentity == meterId)?.DMA.Site; if (!string.IsNullOrEmpty(meterId) && site != null) { var thisContext = new MeterReadingTableStorageContext(site.TableName); if (timestep == -1) { var finalFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, meterId); if (start != DateTime.MinValue) { var date1 = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThanOrEqual, start.Ticks.ToString()); finalFilter = TableQuery.CombineFilters(finalFilter, TableOperators.And, date1); } if (end != DateTime.MaxValue) { var date2 = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThanOrEqual, end.Ticks.ToString()); finalFilter = TableQuery.CombineFilters(finalFilter, TableOperators.And, date2); } var allRecords = thisContext.MeterReadingsFiltered(finalFilter); foreach (var record in allRecords) { resultTxt.Append("<record>" + $"<time>{record.CreatedOn.ToString("yyyy-MM-ddTHH:mm:sszzz")}</time><variable name=\"flow\">" + $"<value>{record.Reading}</value></variable>" + $"</record>{Environment.NewLine}"); } } else { const long multiplier = 10000000; long timestepTicks = timestep * multiplier; long numberOfTicksBetweenStartAndEnd = (long)(end.Ticks - start.Ticks); int numberOfBlock = (int)(numberOfTicksBetweenStartAndEnd / timestepTicks); // Create a collection of fixed blocks in time from supplied Start to End var dateTimeBlockSet = new List <DateTimeBlock>(); for (var blockIndex = 0; blockIndex < numberOfBlock; blockIndex++) { var newDateTimeBlock = new DateTimeBlock { From = start.AddTicks(blockIndex * timestepTicks), To = start.AddTicks((blockIndex + 1) * timestepTicks) }; dateTimeBlockSet.Add(newDateTimeBlock); } // loop through each block and and find any records that span that block, trimming those on the edges foreach (var thisBlock in dateTimeBlockSet) { var recordsSpanningBlock = new List <MeterReadingEntity>(); var finalFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, meterId); if (start != DateTime.MinValue) { var date1 = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThanOrEqual, thisBlock.From.Ticks.ToString()); finalFilter = TableQuery.CombineFilters(finalFilter, TableOperators.And, date1); } if (end != DateTime.MaxValue) { var date2 = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThanOrEqual, thisBlock.To.Ticks.ToString()); finalFilter = TableQuery.CombineFilters(finalFilter, TableOperators.And, date2); } recordsSpanningBlock.AddRange(thisContext.MeterReadingsFiltered(finalFilter)); if (recordsSpanningBlock.Any()) { // var minResult = recordsSpanningBlock.Min(x => x.Reading); // var maxResult = recordsSpanningBlock.Max(x => x.Reading); var minResult = float.Parse(recordsSpanningBlock.Min(x => x.Reading)); var maxResult = float.Parse(recordsSpanningBlock.Max(x => x.Reading)); var averageValue = (minResult + maxResult) / 2; // if (!string.IsNullOrEmpty(minResult) && !string.IsNullOrEmpty(maxResult)) { // var flow = Int32.Parse(maxResult) - Int32.Parse(minResult); resultTxt.Append("<record>" + $"<time>{thisBlock.From.ToString("yyyy-MM-ddTHH:mm:sszzz")}</time><variable name=\"flow\">" + $"<value>{averageValue}</value></variable>" + $"</record>{Environment.NewLine}"); } } } } } if (bWrap) { return("<response>" + $"<recordSet>{elementText}{resultTxt}</recordSet>" + "</response>"); } else { return(resultTxt.ToString()); } }
public string Read() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value); var end = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value); var simulation = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "simulation") ? DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "simulation").Value) : DateTimeOffset.Now; long timestep = _currentRequestManager.RootElements.Count(kvp => kvp.Key == "timeStep") > 0 ? int.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "timeStep").Value) : -1; var allResults = _currentContext.GetPricingData(start, end, elementId, simulation).ToList(); if (timestep != -1 && allResults.Any()) { const long multiplier = 10000000; long timestepTicks = timestep * multiplier; long numberOfTicksBetweenStartAndEnd = (long)(end.Ticks - start.Ticks); int numberOfBlock = (int)(numberOfTicksBetweenStartAndEnd / timestepTicks); // Create a collection of fixed blocks in time from supplied Start to End var dateTimeBlockSet = new List <DateTimeBlock>(); for (var blockIndex = 0; blockIndex < numberOfBlock; blockIndex++) { var newDateTimeBlock = new DateTimeBlock { From = start.AddTicks(blockIndex * timestepTicks), To = start.AddTicks((blockIndex + 1) * timestepTicks) }; dateTimeBlockSet.Add(newDateTimeBlock); } var subResults = new List <GetPricingDataResult>(); // loop through each block and and find any records that span that block, trimming those on the edges foreach (DateTimeBlock thisBlock in dateTimeBlockSet) { var firstRecordkInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From).OrderBy(x => x.From).FirstOrDefault(); var lastRecordInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From).OrderBy(x => x.From).LastOrDefault(); if (firstRecordkInSet != null && lastRecordInSet != null) { var recordsSpanningBlock = allResults.Where(x => x.From >= firstRecordkInSet.From && x.To <= lastRecordInSet.To); var getPricingDataResults = recordsSpanningBlock as GetPricingDataResult[] ?? recordsSpanningBlock.ToArray(); if (getPricingDataResults.Any()) { decimal Price = getPricingDataResults.Sum(reading => reading.Price); var modifiedReading = getPricingDataResults.FirstOrDefault(); if (modifiedReading != null) { modifiedReading.Price = Price / getPricingDataResults.Count(); modifiedReading.From = thisBlock.From; modifiedReading.To = thisBlock.To; subResults.Add(modifiedReading); } } } } allResults = subResults; } var resultTxt = new StringBuilder(); var baseTime = string.Empty; var creationTime = string.Empty; var generatedBy = string.Empty; foreach (var thisReading in allResults) { if (baseTime == string.Empty) { baseTime = thisReading.BaseTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK"); creationTime = thisReading.CreationTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK"); } generatedBy = thisReading.Identifier; resultTxt.Append("<record>" + $"<from>{thisReading.From.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</from>" + $"<to>{thisReading.To.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</to>" + "<variable name=\"price\">" + $"<value>{thisReading.Price}</value>" + "</variable>" + $"</record>{Environment.NewLine}"); } var dmaName = string.Empty; if (resultTxt.Length > 0) { resultTxt.Insert(0, $"<elementId>{elementId}</elementId>{Environment.NewLine}<name>{dmaName}</name>{Environment.NewLine}" + $"<metadata baseTime=\"{baseTime}\" creationTime=\"{creationTime}\" generatedBy=\"{generatedBy}\" />{Environment.NewLine}"); } return("<response>" + $"<recordSet>{resultTxt}</recordSet>" + "</response>"); }
public void ProcessQueue(CloudBlockBlob blob, CloudQueueMessage receivedMessage, CloudQueue urbanWaterQueue) { EventSourceWriter.Log.MessageMethod( $"WaterMeterCSVProcessor_Ovod Message Processing Started. MessageId: {receivedMessage.Id}, BLOB name: {blob.Name}"); var currentContext = new SQLAzureDataContext(); var missingMeterIds = new List <string>(); var processedMeterIds = new List <string>(); using (var sr = new StringReader(blob.DownloadText())) { using (var csv = new CsvReader(sr)) { csv.Configuration.Delimiter = ","; while (csv.Read()) { try { if (csv.CurrentRecord[1] != null && csv.CurrentRecord[2] != null && csv.CurrentRecord[3] != null && csv.CurrentRecord[0] != null) { var creationDateTime = DateTime.ParseExact(csv.CurrentRecord[2], "MM/dd/yyyy hh:mm tt", null).ToUniversalTime(); var meterIdentity = csv.CurrentRecord[1]; try { var meterSet = currentContext.Meters.Where(x => x.MeterIdentity == meterIdentity); if (!meterSet.Any()) { if (!missingMeterIds.Contains(meterIdentity)) { missingMeterIds.Add(meterIdentity); } } else { if (!processedMeterIds.Contains(meterIdentity)) { processedMeterIds.Add(meterIdentity); } } } catch (Exception e) { EventSourceWriter.Log.MessageMethod( $"EXCEPTION: WaterMeterCSVProcessor_Ovod. {e.Message}"); } try { var firstOrDefault = currentContext.Meters.FirstOrDefault(x => x.MeterIdentity == meterIdentity); if (firstOrDefault != null) { var thisDma = firstOrDefault.DMA; var sm = new MeterReadingEntity { PartitionKey = meterIdentity, CreatedOn = creationDateTime, RowKey = creationDateTime.Ticks.ToString(), Reading = csv.CurrentRecord[3], Encrypted = false, DMA = thisDma.Identifier }; const string strWriteConnectionString = "MKWDNConnectionString"; var blAttempt = WriteMessageMeterDataToDataTable(sm, strWriteConnectionString, thisDma.Site.TableName); if (!blAttempt) { EventSourceWriter.Log.MessageMethod( $"ERROR writing to BLOB storage by WaterMeterCSVProcessor_Ovod. Received message Id: {receivedMessage.Id}BLOB name: {blob.Name}, PartitionKey: {sm.PartitionKey}"); } } } catch (Exception e) { EventSourceWriter.Log.MessageMethod( $"ERROR writing to BLOB storage in WaterMeterCSVProcessor_Ovod. Received message Id: {receivedMessage.Id}BLOB name: {blob.Name}, Exception: {e.Message}"); } } else { EventSourceWriter.Log.MessageMethod( $"ERROR: Null values parsed in CSV file by WaterMeterCSVProcessor_Ovod. Blob name: {blob.Name}"); } } catch (Exception e) { EventSourceWriter.Log.MessageMethod( $"Exception processing CSV meter reading in WaterMeterCSVProcessor_Ovod. Exception: {e.Message}"); } } } } EventSourceWriter.Log.MessageMethod( $"WaterMeterCSVProcessor_Ovod Message Processing Complete. MessageId: {receivedMessage.Id}"); urbanWaterQueue.DeleteMessage(receivedMessage); var newEvent = new Event { BusDispatched = false, EventDateTime = DateTime.Now, EventType = (int)EventTypes.NewMeteringData }; var processedMetercsv = processedMeterIds.Aggregate(string.Empty, (current, meterId) => current + (meterId + ", ")); newEvent.Description = processedMetercsv; currentContext.Events.InsertOnSubmit(newEvent); if (missingMeterIds.Count > 0) { var newMeterMissingEvent = new Event { BusDispatched = false, EventDateTime = DateTime.Now, EventType = (int)EventTypes.MissingMeter }; var metercsv = missingMeterIds.Aggregate(string.Empty, (current, meterId) => current + (meterId + ", ")); newMeterMissingEvent.Description = metercsv; currentContext.Events.InsertOnSubmit(newMeterMissingEvent); } currentContext.SubmitChanges(); }
public void ProcessQueue(CloudBlockBlob blob, CloudQueueMessage receivedMessage, CloudQueue urbanWaterQueue) { EventSourceWriter.Log.MessageMethod( $"WaterMeterExcelProcessor_Ovod Message Processing Started. MessageId: {receivedMessage.Id}, BLOB name: {blob.Name}"); var currentContext = new SQLAzureDataContext(); var missingMeterIds = new List <string>(); var processedMeterIds = new List <string>(); var stream = new MemoryStream(); blob.DownloadToStream(stream); using (var spreadsheetDocument = SpreadsheetDocument.Open(stream, false)) { var workbookPart = spreadsheetDocument.WorkbookPart; var worksheetPart = workbookPart.WorksheetParts.First(); var sheetData = worksheetPart.Worksheet.Elements <SheetData>().First(); foreach (var r in sheetData.Elements <Row>()) { if (r.RowIndex != 1) { var creationDateTime = DateTime.Now; string meterIdentity = null; string reading = null; string customer = null; var column = 1; foreach (var c in r.Elements <Cell>()) { switch (column) { case 1: customer = c.InnerText; break; case 2: meterIdentity = c.InnerText; break; case 3: creationDateTime = DateTime.ParseExact(c.InnerText, "MM/dd/yyyy hh:mm tt", null).ToUniversalTime(); break; case 4: reading = c.InnerText; break; default: break; } column = column + 1; } try { if (string.IsNullOrEmpty(meterIdentity)) { meterIdentity = currentContext.Customers.FirstOrDefault(x => x.CustomerNumber == customer).Meter.MeterIdentity; } var meterSet = currentContext.Meters.Where(x => x.MeterIdentity == meterIdentity); if (!meterSet.Any()) { if (!missingMeterIds.Contains(meterIdentity)) { missingMeterIds.Add(meterIdentity); } } else { if (!processedMeterIds.Contains(meterIdentity)) { processedMeterIds.Add(meterIdentity); } } } catch (Exception e) { EventSourceWriter.Log.MessageMethod($"EXCEPTION: WaterMeterExcelProcessor_Ovod. {e.Message}"); } try { var firstOrDefault = currentContext.Meters.FirstOrDefault(x => x.MeterIdentity == meterIdentity); if (firstOrDefault != null) { var thisDma = firstOrDefault.DMA; var sm = new MeterReadingEntity { PartitionKey = meterIdentity, CreatedOn = creationDateTime, RowKey = creationDateTime.Ticks.ToString(), Reading = reading, Encrypted = false, DMA = thisDma.Identifier }; const string strWriteConnectionString = "MKWDNConnectionString"; var blAttempt = WriteMessageMeterDataToDataTable(sm, strWriteConnectionString, thisDma.Site.TableName); if (!blAttempt) { EventSourceWriter.Log.MessageMethod( $"ERROR writing to BLOB storage by WaterMeterExcelProcessor_Ovod. Received message Id: {receivedMessage.Id}BLOB name: {blob.Name}, PartitionKey: {sm.PartitionKey}"); } } } catch (Exception e) { EventSourceWriter.Log.MessageMethod( $"ERROR writing to BLOB storage in WaterMeterExcelProcessor_Ovod. Received message Id: {receivedMessage.Id}BLOB name: {blob.Name}, Exception: {e.Message}"); } } } } EventSourceWriter.Log.MessageMethod("WaterMeterExcelProcessor_Ovod Message Processing Complete. MessageId: " + receivedMessage.Id); urbanWaterQueue.DeleteMessage(receivedMessage); var newEvent = new Event { BusDispatched = false, EventDateTime = DateTime.Now, EventType = (int)EventTypes.NewMeteringData }; var processedMetercsv = processedMeterIds.Aggregate(string.Empty, (current, meterId) => current + (meterId + ", ")); newEvent.Description = processedMetercsv; currentContext.Events.InsertOnSubmit(newEvent); if (missingMeterIds.Count > 0) { var newMeterMissingEvent = new Event { BusDispatched = false, EventDateTime = DateTime.Now, EventType = (int)EventTypes.MissingMeter }; var metercsv = missingMeterIds.Aggregate(string.Empty, (current, meterId) => current + (meterId + ", ")); newMeterMissingEvent.Description = metercsv; currentContext.Events.InsertOnSubmit(newMeterMissingEvent); } currentContext.SubmitChanges(); }
public void Create() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; foreach (var thisRecord in _currentRequestManager.Records) { var from = Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "start").Value); var to = Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "end").Value); float?Volume = null; if (thisRecord.Count(kvp => kvp.Key == "volume_value") != 0) { Volume = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "volume_value").Value); } float?duration = null; if (thisRecord.Count(kvp => kvp.Key == "duration_value") != 0) { duration = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "duration_value").Value); } float?maxFlow = null; if (thisRecord.Count(kvp => kvp.Key == "max_flow_value") != 0) { maxFlow = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "max_flow_value").Value); } double?mostFreqFlowValue = null; if (thisRecord.Count(kvp => kvp.Key == "most_freq_flow_value") != 0) { mostFreqFlowValue = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "most_freq_flow_value").Value); } int?mostFreqFlowNumber = null; if (thisRecord.Count(kvp => kvp.Key == "most_freq_flow_number") != 0) { mostFreqFlowNumber = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "most_freq_flow_number").Value); } string characterizedDeviceValue = thisRecord.Count(kvp => kvp.Key == "characterized_device_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "characterized_device_value").Value : null; int?characterizedDeviceId = null; if (thisRecord.Count(kvp => kvp.Key == "characterized_device_id") != 0) { characterizedDeviceId = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "characterized_device_id").Value); } var confirmedDeviceValue = thisRecord.Count(kvp => kvp.Key == "confirmed_device_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "confirmed_device_value").Value : null; int?confirmedDeviceId = null; if (thisRecord.Count(kvp => kvp.Key == "confirmed_device_id") != 0) { confirmedDeviceId = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "confirmed_device_id").Value); } var confirmationValue = thisRecord.Count(kvp => kvp.Key == "confirmation_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "confirmation_value").Value : null; double?timeSinValue = null; if (thisRecord.Count(kvp => kvp.Key == "time_sin_value") != 0) { timeSinValue = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "time_sin_value").Value); } double?timeCosValue = null; if (thisRecord.Count(kvp => kvp.Key == "time_cos_value") != 0) { timeCosValue = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "time_cos_value").Value); } var consumptionCharacterizationData = new ConsumptionCharacterizationData { MeterId = elementId, From = @from, To = to, Volume = Volume, Duration = duration, Max_flow = maxFlow, Most_freq_flow_value = mostFreqFlowValue, Most_freq_flow_Number = mostFreqFlowNumber, characterized_device_id = characterizedDeviceId, characterized_device_value = characterizedDeviceValue, confirmation = confirmationValue, time_cos = timeCosValue, time_sin = timeSinValue, confirmed_device_id = confirmedDeviceId, confirmed_device_value = confirmedDeviceValue }; _currentContext.ConsumptionCharacterizationDatas.InsertOnSubmit(consumptionCharacterizationData); } _currentContext.SubmitChanges(); }
public string Read() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value); var end = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value); long timestep = _currentRequestManager.RootElements.Count(kvp => kvp.Key == "timeStep") > 0 ? int.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "timeStep").Value) : -1; var allResults = _currentContext.GetWeatherPredictionData(start, end, elementId).ToList(); if (timestep != -1 && allResults.Any()) { const long multiplier = 10000000; long timestepTicks = timestep * multiplier; long numberOfTicksBetweenStartAndEnd = (long)(end.Ticks - start.Ticks); int numberOfBlock = (int)(numberOfTicksBetweenStartAndEnd / timestepTicks); // Create a collection of fixed blocks in time from supplied Start to End var dateTimeBlockSet = new List <DateTimeBlock>(); for (var blockIndex = 0; blockIndex < numberOfBlock; blockIndex++) { var newDateTimeBlock = new DateTimeBlock { From = start.AddTicks(blockIndex * timestepTicks), To = start.AddTicks((blockIndex + 1) * timestepTicks) }; dateTimeBlockSet.Add(newDateTimeBlock); } var subResults = new List <GetWeatherPredictionDataResult>(); // loop through each block and and find any records that span that block, trimming those on the edges foreach (var thisBlock in dateTimeBlockSet) { var firstRecordkInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From).OrderBy(x => x.From).FirstOrDefault(); var lastRecordInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From).OrderBy(x => x.From).LastOrDefault(); if (firstRecordkInSet != null && lastRecordInSet != null) { var recordsSpanningBlock = allResults.Where(x => x.From >= firstRecordkInSet.From && x.To <= lastRecordInSet.To); if (recordsSpanningBlock.Any()) { var trimmedrecordsSpanningBlock = new List <GetWeatherPredictionDataResult>(); foreach (var record in recordsSpanningBlock) { double percentageToTrim = 0; if (record.From < thisBlock.From) { long currentBlockTicks = record.To.Ticks - record.From.Ticks; long ticksToTrim = thisBlock.From.Ticks - record.From.Ticks; percentageToTrim += (double)(((long)100.0 / currentBlockTicks) * ticksToTrim); } if (record.To > thisBlock.To) { long currentBlockTicks = record.To.Ticks - record.From.Ticks; long ticksToTrim = record.To.Ticks - thisBlock.To.Ticks; percentageToTrim = (double)(((double)100.0 / (double)currentBlockTicks) * (double)ticksToTrim); } if (record.Precipitation != null) { record.Precipitation = record.Precipitation - ((record.Precipitation / 100) * percentageToTrim); } trimmedrecordsSpanningBlock.Add(record); } int? humidity = null; double?precipitation = null; int? pressure = null; double?solarRadiation = null; double?temperature = null; string windDirection = null; double?windVelocity = null; foreach (var reading in trimmedrecordsSpanningBlock) { if (reading.Humidity != null) { if (humidity == null) { humidity = reading.Humidity; } else if (reading.Humidity != -1) { humidity += reading.Humidity; } } if (reading.Precipitation != null) { if (precipitation == null) { precipitation = reading.Precipitation; } else if (reading.Precipitation != -1) { precipitation += reading.Precipitation; } } if (reading.Pressure != null) { if (pressure == null) { pressure = reading.Pressure; } else if (reading.Pressure != -1) { pressure += reading.Pressure; } } if (reading.Solar_radiation != null) { if (solarRadiation == null) { solarRadiation = reading.Solar_radiation; } else if (reading.Solar_radiation != -1) { solarRadiation += reading.Solar_radiation; } } if (reading.Temperature != null) { if (temperature == null) { temperature = reading.Temperature; } else if (reading.Temperature != -1) { temperature += reading.Temperature; } } windDirection = reading.Wind_direction; if (reading.Wind_velocity != null) { if (windVelocity == null) { windVelocity = reading.Wind_velocity; } else if (reading.Wind_velocity != -1) { windVelocity += reading.Wind_velocity; } } } var modifiedReading = trimmedrecordsSpanningBlock.FirstOrDefault(); if (humidity != null) { modifiedReading.Humidity = humidity / trimmedrecordsSpanningBlock.Count(); } if (precipitation != null) { modifiedReading.Precipitation = precipitation; } if (pressure != null) { modifiedReading.Pressure = pressure / trimmedrecordsSpanningBlock.Count(); } if (solarRadiation != null) { modifiedReading.Solar_radiation = solarRadiation / trimmedrecordsSpanningBlock.Count(); } if (temperature != null) { modifiedReading.Temperature = temperature / trimmedrecordsSpanningBlock.Count(); } modifiedReading.Wind_direction = windDirection; if (windVelocity != null) { modifiedReading.Wind_velocity = windVelocity / trimmedrecordsSpanningBlock.Count(); } modifiedReading.From = thisBlock.From; modifiedReading.To = thisBlock.To; subResults.Add(modifiedReading); } } } allResults = subResults; } var resultTxt = new StringBuilder(); foreach (var thisReading in allResults) { var precipitationValue = thisReading.Precipitation != null ? "<variable name=\"precipitation\">" + $"<value>{thisReading.Precipitation}</value>" + "</variable>" : null; var temperatureValue = thisReading.Temperature != null ? "<variable name=\"temperature\">" + $"<value>{thisReading.Temperature}</value>" + "</variable>" : null; var humidityValue = thisReading.Humidity != null ? "<variable name=\"humidity\">" + $"<value>{thisReading.Humidity}</value>" + "</variable>" : null; var pressureValue = thisReading.Pressure != null ? "<variable name=\"pressure\">" + $"<value>{thisReading.Pressure}</value>" + "</variable>" : null; var windDirectionValue = thisReading.Wind_direction != null ? "<variable name=\"wind_direction\">" + $"<value>{thisReading.Wind_direction}</value>" + "</variable>" : null; var windVelocityValue = thisReading.Wind_velocity != null ? "<variable name=\"wind_velocity\">" + $"<value>{thisReading.Wind_velocity}</value>" + "</variable>" : null; var solarRadiationValue = thisReading.Solar_radiation != null ? "<variable name=\"solar_radiation\">" + $"<value>{thisReading.Solar_radiation}</value>" + "</variable>" : null; var metadata = "<metadata baseTime=\"" + thisReading.BaseTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK") + "\" creationTime=\"" + thisReading.CreationTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK") + "\" generatedBy=\"" + thisReading.Identifier + "\" comment=\"" + thisReading.Comment + "\" />"; resultTxt.Append( $"<record>{metadata}<from>{thisReading?.From.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</from>" + $"<to>{thisReading?.To.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</to>{precipitationValue}{temperatureValue}{humidityValue}{pressureValue}{windDirectionValue}{windVelocityValue}{solarRadiationValue}</record>{Environment.NewLine}"); } return("<response><recordSet>" + $"<elementId>{elementId}</elementId>{resultTxt}</recordSet></response>"); }
public void ProcessQueue(CloudBlockBlob blob, string strContainer, CloudQueueMessage receivedMessage, CloudQueue urbanWaterQueue) { EventSourceWriter.Log.MessageMethod("Worker Role Prcessing HeadEndSystem file " + receivedMessage.Id.ToString() + " " + blob.Name); SQLAzureDataContext currentContext = new SQLAzureDataContext(); using (TextReader sr = new StringReader(blob.DownloadText())) { using (var csv = new CsvReader(sr)) { csv.Configuration.Delimiter = ";"; while (csv.Read()) { try { MeterReadingEntity sm = new MeterReadingEntity(); DMAMeterReadingEntity dmasm = new DMAMeterReadingEntity(); if (csv.CurrentRecord[0] != null && csv.CurrentRecord[3] != null && csv.CurrentRecord[4] != null && csv.CurrentRecord[5] != null && string.Compare(csv.CurrentRecord[5], "LITER") == 0) { DateTime creationDateTime = DateTime.ParseExact(csv.CurrentRecord[3], "dd/MM/yyyy HH:mm:ss", null).ToUniversalTime(); // DMAMeterTableStorageContext dmamcontext = new DMAMeterTableStorageContext(strContainer + "_dmameter"); // DMAMeterEntity dmaMeterEntity = dmamcontext.MeterReadings.FirstOrDefault(x => x.PartitionKey == csv.CurrentRecord[0]); string dmaId = currentContext.DMAs.Where(x => x.Name == "El Toyo – Retamar").FirstOrDefault().Identifier; sm.PartitionKey = csv.CurrentRecord[0]; sm.CreatedOn = creationDateTime; sm.RowKey = creationDateTime.Ticks.ToString(); sm.Reading = csv.CurrentRecord[4]; sm.Encrypted = false; sm.DMA = dmaId; dmasm.PartitionKey = dmaId; dmasm.CreatedOn = creationDateTime; dmasm.RowKey = creationDateTime.Ticks.ToString(); dmasm.Reading = csv.CurrentRecord[4]; dmasm.Encrypted = false; dmasm.MeterID = csv.CurrentRecord[0]; } else { EventSourceWriter.Log.MessageMethod("ERROR: Null values parsed in HeadEndSystem file " + blob.Name); } string strWriteConnectionString = "MKWDNConnectionString"; bool blAttempt = WriteMessageMeterDataToDataTable(sm, dmasm, strWriteConnectionString, strContainer); if (!blAttempt) { EventSourceWriter.Log.MessageMethod("ERROR:Processing Entry NOT added to storage " + receivedMessage.Id.ToString()); EventSourceWriter.Log.MessageMethod("ERROR:Processing Entry NOT added to storage " + blob.Name + " " + sm.PartitionKey); } } catch (Exception e) { EventSourceWriter.Log.MessageMethod("Exception processing meter reading: " + e.Message); } } } } EventSourceWriter.Log.MessageMethod("Processing Complete Entry added to storage " + receivedMessage.Id.ToString()); urbanWaterQueue.DeleteMessage(receivedMessage); Event newEvent = new Event(); newEvent.BusDispatched = false; newEvent.EventDateTime = DateTime.Now; newEvent.EventType = (int)EventTypes.NewMeteringData; currentContext.Events.InsertOnSubmit(newEvent); currentContext.SubmitChanges(); }
public string Read() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value); var end = Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value); var allResults = _currentContext.ConsumptionCharacterizationDatas.Where(x => x.MeterId == elementId && x.From >= start && x.To <= end); var resultTxt = new StringBuilder(); foreach (var thisReading in allResults) { var volumeValue = thisReading.Volume != null ? "<variable name=\"volume\">" + $"<value>{thisReading.Volume}</value>" + "</variable>" : null; var durationValue = thisReading.Duration != null ? "<variable name=\"duration\">" + $"<value>{thisReading.Duration}</value>" + "</variable>" : null; var maxFlowValue = thisReading.Max_flow != null ? "<variable name=\"Max_flow\">" + $"<value>{thisReading.Max_flow}</value>" + "</variable>" : null; var mostFreqFlowValue = thisReading.Most_freq_flow_value != null && thisReading.Most_freq_flow_Number != null ? "<variable name=\"most_freq_flow\">" + $"<value>{thisReading.Most_freq_flow_value}</value>" + $"<number>{thisReading.Most_freq_flow_Number}</number>" + "</variable>" : null; var characterizedDeviceValue = !IsNullOrEmpty(thisReading.characterized_device_value) && thisReading.characterized_device_id != null ? "<variable name=\"characterized_device\">" + $"<value>{thisReading.characterized_device_value}</value>" + $"<id>{thisReading.characterized_device_id}</id>" + "</variable>" : null; var timeSinValue = thisReading.time_sin != null ? "<variable name=\"time_sin\">" + $"<value>{thisReading.time_sin}</value>" + "</variable>" : null; var timeCosValue = thisReading.time_cos != null ? "<variable name=\"time_cos\">" + $"<value>{thisReading.time_cos}</value>" + "</variable>" : null; string confirmedDevice = null; if (CompareOrdinal(thisReading.confirmation.ToLower(), "yes") == 0) { confirmedDevice = !IsNullOrEmpty(thisReading.confirmed_device_value) && thisReading.confirmed_device_value != null ? "<variable name=\"confirmed_device\">" + $"<value>{thisReading.confirmed_device_value}</value>" + $"<id>{thisReading.confirmed_device_id}</id></variable>" : null; } else if (CompareOrdinal(thisReading.confirmation.ToLower(), "no") == 0) { confirmedDevice = !IsNullOrEmpty(thisReading.characterized_device_value) && thisReading.characterized_device_id != null ? "<variable name=\"confirmed_device\">" + $"<value>{thisReading.characterized_device_value}</value>" + $"<id>{thisReading.characterized_device_id}</id></variable>" : null; } else if (CompareOrdinal(thisReading.confirmation.ToLower(), "?") == 0) { confirmedDevice = "<variable name=\"confirmed_device\"><value>unknown</value><id>unknown</id></variable>"; } var confirmation = !IsNullOrEmpty(thisReading.confirmation) ? "<variable name=\"confirmation\">" + $"<value>{thisReading.confirmation}</value>" + "</variable>" : null; resultTxt.Append("<record>" + $"<from>{thisReading.From.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</from>" + $"<to>{thisReading.To.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</to>{volumeValue}{durationValue}{maxFlowValue}{mostFreqFlowValue}{timeSinValue}{timeCosValue}{characterizedDeviceValue}{confirmedDevice}{confirmation}</record>{Environment.NewLine}"); } return("<response>" + $"<recordSet>{$"<elementId>{elementId}</elementId>{resultTxt}</recordSet>"}</response>"); }
public void Update() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; foreach (var thisRecord in _currentRequestManager.Records) { var fromVar = Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "start").Value); float?Volume = null; if (thisRecord.Count(kvp => kvp.Key == "volume_value") != 0) { Volume = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "volume_value").Value); } float?duration = null; if (thisRecord.Count(kvp => kvp.Key == "duration_value") != 0) { duration = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "duration_value").Value); } float?maxFlow = null; if (thisRecord.Count(kvp => kvp.Key == "max_flow_value") != 0) { maxFlow = float.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "max_flow_value").Value); } double?mostFreqFlowValue = null; if (thisRecord.Count(kvp => kvp.Key == "most_freq_flow_value") != 0) { mostFreqFlowValue = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "most_freq_flow_value").Value); } int?mostFreqFlowNumber = null; if (thisRecord.Count(kvp => kvp.Key == "most_freq_flow_number") != 0) { mostFreqFlowNumber = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "most_freq_flow_number").Value); } string characterizedDeviceValue = thisRecord.Count(kvp => kvp.Key == "characterized_device_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "characterized_device_value").Value : null; int?characterizedDeviceId = null; if (thisRecord.Count(kvp => kvp.Key == "characterized_device_id") != 0) { characterizedDeviceId = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "characterized_device_id").Value); } var confirmedDeviceValue = thisRecord.Count(kvp => kvp.Key == "confirmed_device_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "confirmed_device_value").Value : null; int?confirmedDeviceId = null; if (thisRecord.Count(kvp => kvp.Key == "confirmed_device_id") != 0) { confirmedDeviceId = int.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "confirmed_device_id").Value); } var confirmationValue = thisRecord.Count(kvp => kvp.Key == "confirmation_value") != 0 ? thisRecord.FirstOrDefault(kvp => kvp.Key == "confirmation_value").Value : null; double?timeSinValue = null; if (thisRecord.Count(kvp => kvp.Key == "time_sin_value") != 0) { timeSinValue = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "time_sin_value").Value); } double?timeCosValue = null; if (thisRecord.Count(kvp => kvp.Key == "time_cos_value") != 0) { timeCosValue = double.Parse(thisRecord.FirstOrDefault(kvp => kvp.Key == "time_cos_value").Value); } var record = _currentContext.ConsumptionCharacterizationDatas.FirstOrDefault(x => x.From == fromVar && x.characterized_device_value == characterizedDeviceValue); if (record != null) { record.MeterId = elementId; if (Volume != null) { record.Volume = Volume; } if (duration != null) { record.Duration = duration; } if (maxFlow != null) { record.Max_flow = maxFlow; } if (mostFreqFlowValue != null) { record.Most_freq_flow_value = mostFreqFlowValue; } if (mostFreqFlowNumber != null) { record.Most_freq_flow_Number = mostFreqFlowNumber; } if (characterizedDeviceId != null) { record.characterized_device_id = characterizedDeviceId; } if (!IsNullOrEmpty(confirmationValue)) { record.confirmation = confirmationValue; } if (timeCosValue != null) { record.time_cos = timeCosValue; } if (timeSinValue != null) { record.time_sin = timeSinValue; } if (confirmedDeviceId != null) { record.confirmed_device_id = confirmedDeviceId; } if (!IsNullOrEmpty(confirmedDeviceValue)) { record.confirmed_device_value = confirmedDeviceValue; } if (!IsNullOrEmpty(characterizedDeviceValue)) { record.characterized_device_value = characterizedDeviceValue; } } _currentContext.SubmitChanges(); } }
public string Read() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value); var end = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value); long timestep = _currentRequestManager.RootElements.Count(kvp => kvp.Key == "timeStep") > 0 ? int.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "timeStep").Value) : -1; var allResults = _currentContext.ReservoirDatas.Where(x => x.Reservoir.Identifier == elementId && x.From >= start && x.To <= end).OrderBy(x => x.From).ToList(); if (timestep != -1 && allResults.Any()) { var subResults = new List <ReservoirData>(); const long multiplier = 10000000; long timestepTicks = timestep * multiplier; long startTick = allResults.FirstOrDefault().From.Ticks; long endTick = allResults.LastOrDefault().From.Ticks; long counter = startTick; while (counter <= endTick) { // var TimeStepResults = allResults.OrderBy(item => Math.Abs(counter - item.CreationTime.Ticks)).First(); var timeStepResults = allResults.Aggregate((x, y) => Math.Abs(x.From.Ticks - counter) < Math.Abs(y.From.Ticks - counter) ? x : y); if (timeStepResults != null) { counter += timestepTicks; subResults.Add(timeStepResults); } } allResults = subResults.GroupBy(x => x.ReservoirId).Select(y => y.First()).ToList(); } var resultTxt = new StringBuilder(); foreach (var thisReading in allResults) { var volumeValue = thisReading.Volume != null ? "<variable name=\"volume\">" + $"<value>{thisReading.Volume}</value>" + "</variable>" : null; var levelValue = thisReading.Level != null ? "<variable name=\"level\">" + $"<value>{thisReading.Level}</value>" + "</variable>" : null; resultTxt.Append("<record>" + $"<from>{thisReading?.From.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</from>" + $"<to>{thisReading?.To.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</to>{volumeValue}{levelValue}</record>{Environment.NewLine}"); } var reservoirName = string.Empty; if (resultTxt.Length > 0) { reservoirName = _currentContext.Reservoirs.FirstOrDefault(x => x.Identifier == elementId)?.Name; } return("<response><recordSet>" + $"<elementId>{elementId}</elementId>" + $"<name>{reservoirName}</name>{resultTxt}</recordSet>" + "</response>"); }
public string Read() { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value); var end = DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value); long timestep = _currentRequestManager.RootElements.Count(kvp => kvp.Key == "timeStep") > 0 ? int.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "timeStep").Value) : -1; var allResults = _currentContext.GetTankData(start, end, elementId).ToList(); if (timestep != -1 && allResults.Any()) { const long multiplier = 10000000; long timestepTicks = timestep * multiplier; long numberOfTicksBetweenStartAndEnd = (long)(end.Ticks - start.Ticks); int numberOfBlock = (int)(numberOfTicksBetweenStartAndEnd / timestepTicks); // Create a collection of fixed blocks in time from supplied Start to End List <DateTimeBlock> dateTimeBlockSet = new List <DateTimeBlock>(); for (var BlockIndex = 0; BlockIndex < numberOfBlock; BlockIndex++) { var newDateTimeBlock = new DateTimeBlock { From = start.AddTicks(BlockIndex * timestepTicks), To = start.AddTicks((BlockIndex + 1) * timestepTicks) }; dateTimeBlockSet.Add(newDateTimeBlock); } var subResults = new List <GetTankDataResult>(); // loop through each block and and find any records that span that block, trimming those on the edges foreach (var thisBlock in dateTimeBlockSet) { var firstRecordkInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From).OrderBy(x => x.From).FirstOrDefault(); var lastRecordInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From).OrderBy(x => x.From).Reverse().LastOrDefault(); if (firstRecordkInSet != null && lastRecordInSet != null) { var recordsSpanningBlock = allResults.Where(x => x.From >= firstRecordkInSet.From && x.To <= lastRecordInSet.To); var getTankDataResults = recordsSpanningBlock as GetTankDataResult[] ?? recordsSpanningBlock.ToArray(); if (getTankDataResults.Any()) { var trimmedrecordsSpanningBlock = new List <GetTankDataResult>(); foreach (var record in getTankDataResults) { double percentageToTrim = 0; if (record.From < thisBlock.From) { long currentBlockTicks = record.To.Ticks - record.From.Ticks; long ticksToTrim = thisBlock.From.Ticks - record.From.Ticks; percentageToTrim += (double)(((double)100.0 / (double)currentBlockTicks) * (double)ticksToTrim); } if (record.To > thisBlock.To) { long currentBlockTicks = record.To.Ticks - record.From.Ticks; long ticksToTrim = record.To.Ticks - thisBlock.To.Ticks; percentageToTrim = (double)(((double)100.0 / (double)currentBlockTicks) * (double)ticksToTrim); } if (record.Inflow != null) { record.Inflow = record.Inflow - ((record.Inflow / 100) * percentageToTrim); } trimmedrecordsSpanningBlock.Add(record); } double?inflow = null; foreach (var reading in trimmedrecordsSpanningBlock) { if (reading.Inflow != null) { if (inflow == null) { inflow = reading.Inflow; } else { inflow += reading.Inflow; } } } var modifiedReading = trimmedrecordsSpanningBlock.FirstOrDefault(); if (inflow != null) { if (modifiedReading != null) { modifiedReading.Inflow = inflow / trimmedrecordsSpanningBlock.Count(); } } if (modifiedReading != null) { modifiedReading.From = thisBlock.From; modifiedReading.To = thisBlock.To; subResults.Add(modifiedReading); } } } } allResults = subResults; } var resultTxt = new StringBuilder(); foreach (var thisReading in allResults) { var volumeValue = thisReading.Volume != null ? "<variable name=\"volume\">" + $"<value>{thisReading.Volume}</value>" + "</variable>" : null; var levelValue = thisReading.Outflow != null ? "<variable name=\"outflow\">" + $"<value>{thisReading.Outflow}</value>" + "</variable>" : null; var inflowValue = thisReading.Inflow != null ? "<variable name=\"inflow\">" + $"<value>{thisReading.Inflow}</value>" + "</variable>" : null; resultTxt.Append("<record>" + $"<from>{thisReading?.From.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</from>" + $"<to>{thisReading?.To.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</to>{volumeValue}{levelValue}{inflowValue}</record>{Environment.NewLine}"); } var tankName = string.Empty; if (resultTxt.Length > 0) { tankName = _currentContext.Tanks.FirstOrDefault(x => x.Identifier == elementId)?.Name; } return("<response>" + "<recordSet>" + $"<elementId>{elementId}</elementId>" + $"<name>{tankName}</name>{resultTxt}</recordSet>" + "</response>"); }
protected QueueProcessorBase() { CurrentContext = new SQLAzureDataContext(); }
public void ProcessQueue(CloudBlockBlob blob, CloudQueueMessage receivedMessage, CloudQueue urbanWaterQueue) { var currentContext = new SQLAzureDataContext(); var xml = blob.DownloadText(); var xDoc = XDocument.Parse(xml); var root = xDoc.Elements(); var gateways = root.Elements().FirstOrDefault(x => x.Name.LocalName == "gateways"); var missingMeterIds = new List <string>(); var processedMeterIds = new List <string>(); try { foreach (var gateway in gateways?.Elements().Where(x => x.Name.LocalName == "gateway")) { var collections = gateway.Elements().FirstOrDefault(x => x.Name.LocalName == "collections"); foreach (var collection in collections.Elements().Where(x => x.Name.LocalName == "collection")) { var producerId = collection.Elements().FirstOrDefault(x => x.Name.LocalName == "producer-id").Value; var data = collection.Elements().FirstOrDefault(x => x.Name.LocalName == "data"); foreach (var record in data.Elements()) { var recordDateTime = record.Attributes().FirstOrDefault(x => x.Name.LocalName == "ts").Value; var recordValue = record.Elements().FirstOrDefault(x => x.Name.LocalName == "CURRENT_INDEX").Value; if (!string.IsNullOrEmpty(producerId) && !string.IsNullOrEmpty(recordDateTime) && !string.IsNullOrEmpty(recordValue) ) { try { var meterSet = currentContext.Meters.Where(x => x.MeterIdentity == producerId); if (!meterSet.Any()) { if (!missingMeterIds.Contains(producerId)) { missingMeterIds.Add(producerId); } } else { if (!processedMeterIds.Contains(producerId)) { processedMeterIds.Add(producerId); } } } catch (Exception e) { EventSourceWriter.Log.MessageMethod("EXCEPTION: WaterMeterQueueXMLProcessor. " + e.Message); } try { var firstOrDefault = currentContext.Meters.FirstOrDefault(x => x.MeterIdentity == producerId); if (firstOrDefault != null) { var thisDma = firstOrDefault.DMA; var sm = new MeterReadingEntity { PartitionKey = producerId, CreatedOn = DateTime.Parse(recordDateTime), RowKey = DateTime.Parse(recordDateTime).Ticks.ToString(), Reading = recordValue, Encrypted = false, DMA = thisDma.Identifier }; const string strWriteConnectionString = "MKWDNConnectionString"; var blAttempt = WriteMessageMeterDataToDataTable(sm, strWriteConnectionString, thisDma.Site.TableName); if (!blAttempt) { EventSourceWriter.Log.MessageMethod( $"ERROR writing to BLOB storage by WaterMeterQueueXMLProcessor. Received message Id: {receivedMessage.Id}BLOB name: {blob.Name}, PartitionKey: {sm.PartitionKey}"); } } } catch (Exception e) { EventSourceWriter.Log.MessageMethod( $"ERROR writing to BLOB storage in WaterMeterQueueXMLProcessor. Received message Id: {receivedMessage.Id}BLOB name: {blob.Name}, Exception: {e.Message}"); } } else { EventSourceWriter.Log.MessageMethod( $"ERROR: Null values parsed in CSV file by WaterMeterQueueXMLProcessor. Blob name: {blob.Name}"); } } } } } catch (Exception e) { EventSourceWriter.Log.MessageMethod( $"Exception processing CSV meter reading in WaterMeterQueueXMLProcessor. Exception: {e.Message}"); } urbanWaterQueue.DeleteMessage(receivedMessage); var newEvent = new Event { BusDispatched = false, EventDateTime = DateTime.Now, EventType = (int)EventTypes.NewMeteringData }; var processedMetercsv = processedMeterIds.Aggregate(string.Empty, (current, meterId) => current + (meterId + ", ")); newEvent.Description = processedMetercsv; currentContext.Events.InsertOnSubmit(newEvent); if (missingMeterIds.Count > 0) { var newMeterMissingEvent = new Event { BusDispatched = false, EventDateTime = DateTime.Now, EventType = (int)EventTypes.MissingMeter }; var metercsv = missingMeterIds.Aggregate(string.Empty, (current, meterId) => current + (meterId + ", ")); newMeterMissingEvent.Description = metercsv; currentContext.Events.InsertOnSubmit(newMeterMissingEvent); } currentContext.SubmitChanges(); }
public string ReadSpecificProperty(List <int> indices) { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "start") ? DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value) : DateTimeOffset.MinValue; var end = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "end") ? DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value) : DateTimeOffset.MaxValue; long timestep = _currentRequestManager.RootElements.Count(kvp => kvp.Key == "timeStep") > 0 ? int.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "timeStep").Value) : -1; var resultTxt = new StringBuilder(); var allResults = _currentContext.GetDMAData(start, end, elementId).ToList(); if (allResults.Any()) { if (timestep != -1 && allResults.Any()) { const long multiplier = 10000000; long timestepTicks = timestep * multiplier; long numberOfTicksBetweenStartAndEnd = (long)(end.Ticks - start.Ticks); int numberOfBlock = (int)(numberOfTicksBetweenStartAndEnd / timestepTicks); // Create a collection of fixed blocks in time from supplied Start to End var dateTimeBlockSet = new List <DateTimeBlock>(); for (var blockIndex = 0; blockIndex < numberOfBlock; blockIndex++) { var newDateTimeBlock = new DateTimeBlock { From = start.AddTicks(blockIndex * timestepTicks), To = start.AddTicks((blockIndex + 1) * timestepTicks) }; dateTimeBlockSet.Add(newDateTimeBlock); } var subResults = new List <GetDMADataResult>(); // loop through each block and and find any records that span that block, trimming those on the edges foreach (var thisBlock in dateTimeBlockSet) { var recordsSpanningBlock = allResults.Where(x => x.Time > thisBlock.From && x.Time <= thisBlock.To); var getDmaDataResults = recordsSpanningBlock as GetDMADataResult[] ?? recordsSpanningBlock.ToArray(); if (getDmaDataResults.Any()) { double?flow = null; double?pressure = null; double?Volume = null; foreach (var reading in getDmaDataResults) { if (reading.Flow != null) { if (flow == null) { flow = reading.Flow; } else { flow += reading.Flow; } } if (reading.Pressure != null) { if (pressure == null) { pressure = reading.Pressure; } else { pressure += reading.Pressure; } } if (reading.Volume != null) { if (Volume == null) { Volume = reading.Volume; } else { Volume += reading.Volume; } } } var modifiedReading = getDmaDataResults.FirstOrDefault(); if (flow != null) { if (modifiedReading != null) { modifiedReading.Flow = flow; } } if (pressure != null) { if (modifiedReading != null) { modifiedReading.Pressure = pressure / getDmaDataResults.Count(x => x.Pressure != null); } } if (Volume != null) { if (modifiedReading != null) { modifiedReading.Volume = Volume; } } if (modifiedReading != null) { modifiedReading.Time = thisBlock.From; subResults.Add(modifiedReading); } } } allResults = subResults; } foreach (var thisReading in allResults) { var flowValue = string.Empty; var pressureValue = string.Empty; var volumeValue = string.Empty; if (indices.Contains(16) && thisReading.Flow != null) { flowValue = "<variable name=\"flow\">" + $"<value>{thisReading.Flow}</value>" + "</variable>"; } if (indices.Contains(17) && thisReading.Pressure != null) { pressureValue = "<variable name=\"pressure\">" + $"<value>{thisReading.Pressure}</value>" + "</variable>"; } if (indices.Contains(18) && thisReading.Volume != null) { volumeValue = "<variable name=\"volume\">" + $"<value>{thisReading.Volume}</value>" + "</variable>"; } if (!string.IsNullOrEmpty(flowValue) || !string.IsNullOrEmpty(pressureValue) || !string.IsNullOrEmpty(volumeValue)) { resultTxt.Append($"<record><time>{thisReading.Time.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")}</time>{flowValue}{pressureValue}{volumeValue}</record>{Environment.NewLine}"); } } } return(resultTxt.ToString()); }
public string ReadSpecificProperty(List <int> indices) { _currentContext = new SQLAzureDataContext(); var elementId = _currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "elementId").Value; var start = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "start") ? DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "start").Value) : DateTimeOffset.MinValue; var end = _currentRequestManager.RootElements.Any(kvp => kvp.Key == "end") ? DateTimeOffset.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "end").Value) : DateTimeOffset.MaxValue; long timestep = _currentRequestManager.RootElements.Count(kvp => kvp.Key == "timeStep") > 0 ? int.Parse(_currentRequestManager.RootElements.FirstOrDefault(kvp => kvp.Key == "timeStep").Value) : -1; var resultTxt = new StringBuilder(); var allResults = _currentContext.GetWeatherData(start, end, elementId).ToList(); if (allResults.Any()) { // start = allResults.Aggregate((acc, c) => acc.From < c.From ? acc : c).From; // end = allResults.Aggregate((acc, c) => acc.To > c.To ? acc : c).To; if (timestep != -1 && allResults.Any()) { const long multiplier = 10000000; long timestepTicks = timestep * multiplier; long numberOfTicksBetweenStartAndEnd = (long)(end.Ticks - start.Ticks); int numberOfBlock = (int)(numberOfTicksBetweenStartAndEnd / timestepTicks); // Create a collection of fixed blocks in time from supplied Start to End var dateTimeBlockSet = new List <DateTimeBlock>(); for (var blockIndex = 0; blockIndex < numberOfBlock; blockIndex++) { var newDateTimeBlock = new DateTimeBlock { From = start.AddTicks(blockIndex * timestepTicks), To = start.AddTicks((blockIndex + 1) * timestepTicks) }; dateTimeBlockSet.Add(newDateTimeBlock); } var subResults = new List <GetWeatherDataResult>(); // loop through each block and and find any records that span that block, trimming those on the edges foreach (var thisBlock in dateTimeBlockSet) { var firstRecordkInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From) .OrderBy(x => x.From) .FirstOrDefault(); var lastRecordInSet = allResults.Where(x => x.From <thisBlock.To && x.To> thisBlock.From) .OrderBy(x => x.From) .Reverse() .LastOrDefault(); if (firstRecordkInSet != null && lastRecordInSet != null) { var recordsSpanningBlock = allResults.Where(x => x.From >= firstRecordkInSet.From && x.To <= lastRecordInSet.To); var getWeatherDataResults = recordsSpanningBlock as GetWeatherDataResult[] ?? recordsSpanningBlock.ToArray(); if (getWeatherDataResults.Any()) { var trimmedrecordsSpanningBlock = new List <GetWeatherDataResult>(); foreach (var record in getWeatherDataResults) { double percentageToTrim = 0; if (record.From < thisBlock.From) { long currentBlockTicks = record.To.Ticks - record.From.Ticks; long ticksToTrim = thisBlock.From.Ticks - record.From.Ticks; percentageToTrim += (double)(((double)100.0 / (double)currentBlockTicks) * (double)ticksToTrim); } if (record.To > thisBlock.To) { long currentBlockTicks = record.To.Ticks - record.From.Ticks; long ticksToTrim = record.To.Ticks - thisBlock.To.Ticks; percentageToTrim = (double)(((double)100.0 / (double)currentBlockTicks) * (double)ticksToTrim); } if (record.Precipitation != null) { record.Precipitation = record.Precipitation - ((record.Precipitation / 100) * percentageToTrim); } trimmedrecordsSpanningBlock.Add(record); } int? humidity = null; double?precipitation = null; int? pressure = null; double?solarRadiation = null; double?temperature = null; string windDirection = null; double?windVelocity = null; foreach (var reading in trimmedrecordsSpanningBlock) { if (reading.Humidity != null) { if (humidity == null) { humidity = reading.Humidity; } else { humidity += reading.Humidity; } } if (reading.Precipitation != null) { if (precipitation == null) { precipitation = reading.Precipitation; } else { precipitation += reading.Precipitation; } } if (reading.Pressure != null) { if (pressure == null) { pressure = reading.Pressure; } else { pressure += reading.Pressure; } } if (reading.Solar_radiation != null) { if (solarRadiation == null) { solarRadiation = reading.Solar_radiation; } else { solarRadiation += reading.Solar_radiation; } } if (reading.Temperature != null) { if (temperature == null) { temperature = reading.Temperature; } else { temperature += reading.Temperature; } } windDirection = reading.Wind_direction; if (reading.Wind_velocity != null) { if (windVelocity == null) { windVelocity = reading.Wind_velocity; } else { windVelocity += reading.Wind_velocity; } } } var modifiedReading = trimmedrecordsSpanningBlock.FirstOrDefault(); if (humidity != null) { modifiedReading.Humidity = humidity / trimmedrecordsSpanningBlock.Count(); } if (precipitation != null) { modifiedReading.Precipitation = precipitation; } if (pressure != null) { modifiedReading.Pressure = pressure / trimmedrecordsSpanningBlock.Count(); } if (solarRadiation != null) { modifiedReading.Solar_radiation = solarRadiation / trimmedrecordsSpanningBlock.Count(); } if (temperature != null) { modifiedReading.Temperature = temperature / trimmedrecordsSpanningBlock.Count(); } modifiedReading.Wind_direction = windDirection; if (windVelocity != null) { modifiedReading.Wind_velocity = windVelocity / trimmedrecordsSpanningBlock.Count(); } modifiedReading.From = thisBlock.From; modifiedReading.To = thisBlock.To; subResults.Add(modifiedReading); } } } allResults = subResults; } foreach (var thisReading in allResults) { var precipitationValue = string.Empty; var temperatureValue = string.Empty; var humidityValue = string.Empty; var pressureValue = string.Empty; var windVelocityValue = string.Empty; var windDirectionValue = string.Empty; var solarRadiationValue = string.Empty; if (indices.Contains(2) && thisReading.Precipitation != null) { precipitationValue = "<variable name=\"precipitation\">" + $"<value>{thisReading.Precipitation}</value></variable>"; } if (indices.Contains(3) && thisReading.Temperature != null) { temperatureValue = "<variable name=\"temperature\">" + $"<value>{thisReading.Temperature}</value></variable>"; } if (indices.Contains(4) && thisReading.Humidity != null) { humidityValue = "<variable name=\"humidity\">" + $"<value>{thisReading.Humidity}</value></variable>"; } if (indices.Contains(5) && thisReading.Pressure != null) { pressureValue = "<variable name=\"pressure\">" + $"<value>{thisReading.Pressure}</value></variable>"; } if (indices.Contains(6) && thisReading.Wind_velocity != null) { windVelocityValue = "<variable name=\"wind_velocity\">" + $"<value>{thisReading.Wind_velocity}</value></variable>"; } if (indices.Contains(7) && thisReading.Wind_direction != null) { windDirectionValue = "<variable name=\"wind_direction\">" + $"<value>{thisReading.Wind_direction}</value></variable>"; } if (indices.Contains(8) && thisReading.Solar_radiation != null) { solarRadiationValue = "<variable name=\"solar_radiation\">" + $"<value>{thisReading.Solar_radiation}</value></variable>"; } if (!string.IsNullOrEmpty(precipitationValue) || !string.IsNullOrEmpty(temperatureValue) || !string.IsNullOrEmpty(humidityValue) || !string.IsNullOrEmpty(pressureValue) || !string.IsNullOrEmpty(windVelocityValue) || !string.IsNullOrEmpty(windDirectionValue) || !string.IsNullOrEmpty(solarRadiationValue)) { resultTxt.Append("<record>" + $"<from>{thisReading?.From}</from>" + $"<to>{thisReading?.To}</to>{precipitationValue}{temperatureValue}{humidityValue}{pressureValue}{windDirectionValue}{windVelocityValue}{solarRadiationValue}</record>{Environment.NewLine}"); } } } return(resultTxt.ToString()); }