protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request["eventId"] != null) { postedEventId = Request["eventId"]; using (AdoDataConnection connection = new AdoDataConnection("systemSettings")) { try { MeterDataQualitySummary theevent = (new TableOperations <MeterDataQualitySummary>(connection)).QueryRecordWhere("ID = {0}", Convert.ToInt32(postedEventId)); postedDate = theevent.Date.ToShortDateString(); postedMeterId = theevent.MeterID.ToString(); postedMeterName = connection.ExecuteScalar <string>("SELECT Name From Meter WHERE ID = {0}", theevent.MeterID); } catch (Exception ex) { postedDate = ""; postedEventId = ""; postedMeterId = ""; postedMeterName = ""; } finally { } } } } }
public override void Execute(MeterDataSet meterDataSet) { Dictionary <Channel, List <DataGroup> > trendingGroups = meterDataSet.GetResource <TrendingGroupsResource>().TrendingGroups; if (trendingGroups.Count == 0) { Log.Debug($"No trending data found; skipping {nameof(DataQualityOperation)}."); return; } // Process the data quality range limits to identify unreasonable values ProcessDataQualityRangeLimits(meterDataSet); // Get the total cumulative samples per hour // of each of the enabled channels in the meter double meterSamplesPerHour = meterDataSet.Meter.Channels .Where(channel => channel.Enabled) .Where(channel => channel.SamplesPerHour <= 60.0D) .Select(channel => channel.SamplesPerHour) .DefaultIfEmpty(0.0D) .Sum(); // Convert trending data summaries to channel summaries // so that we can order by date to make processing easier List <ChannelSummary> channelSummaries = meterDataSet.GetResource <TrendingDataSummaryResource>().TrendingDataSummaries .SelectMany(kvp => kvp.Value.Select(summary => new ChannelSummary(kvp.Key, summary))) .Where(channelSummary => channelSummary.Channel.Enabled) .OrderBy(channelSummary => channelSummary.Date) .ThenBy(channelSummary => channelSummary.Channel.ID) .ToList(); if (channelSummaries.Count == 0) { return; } using (AdoDataConnection connection = meterDataSet.CreateDbConnection()) { TableOperations <ChannelDataQualitySummary> channelDataQualitySummaryTable = new TableOperations <ChannelDataQualitySummary>(connection); TableOperations <MeterDataQualitySummary> meterDataQualitySummaryTable = new TableOperations <MeterDataQualitySummary>(connection); ChannelDataQualitySummary channelDataQualitySummary = null; MeterDataQualitySummary meterDataQualitySummary = null; foreach (ChannelSummary channelSummary in channelSummaries) { // If the current channel summary's data does not belong in the same aggregate as the previous channel summary, // update the meter summary record, submit the current channel summary record, and create a new channel summary record if ((object)channelDataQualitySummary != null && (channelSummary.Channel.ID != channelDataQualitySummary.ChannelID || channelSummary.Date != channelDataQualitySummary.Date)) { meterDataQualitySummary.GoodPoints += channelDataQualitySummary.GoodPoints; meterDataQualitySummary.LatchedPoints += channelDataQualitySummary.LatchedPoints; meterDataQualitySummary.UnreasonablePoints += channelDataQualitySummary.UnreasonablePoints; meterDataQualitySummary.NoncongruentPoints += channelDataQualitySummary.NoncongruentPoints; meterDataQualitySummary.DuplicatePoints += channelDataQualitySummary.DuplicatePoints; channelDataQualitySummaryTable.Upsert(channelDataQualitySummary); channelDataQualitySummary = null; } // If the current channel summary's data does not fall on the same date as the previous // channel summary's data, submit the current meter summary record and create a new one if ((object)meterDataQualitySummary != null && channelSummary.Date != meterDataQualitySummary.Date) { meterDataQualitySummaryTable.Upsert(meterDataQualitySummary); meterDataQualitySummary = null; } // If there is no existing record to aggregate // channel summary data, create a new one if ((object)channelDataQualitySummary == null) { channelDataQualitySummary = new ChannelDataQualitySummary(); channelDataQualitySummary.ChannelID = channelSummary.Channel.ID; channelDataQualitySummary.Date = channelSummary.Date; channelDataQualitySummary.ExpectedPoints = (int)Math.Round(24.0D * channelSummary.Channel.SamplesPerHour); channelDataQualitySummary.GoodPoints = 0; channelDataQualitySummary.LatchedPoints = 0; channelDataQualitySummary.UnreasonablePoints = 0; channelDataQualitySummary.NoncongruentPoints = 0; channelDataQualitySummary.DuplicatePoints = 0; } // If there is no existing record to aggregate // meter summary data, create a new one if ((object)meterDataQualitySummary == null) { meterDataQualitySummary = new MeterDataQualitySummary(); meterDataQualitySummary.MeterID = meterDataSet.Meter.ID; meterDataQualitySummary.Date = channelSummary.Date; meterDataQualitySummary.ExpectedPoints = (int)Math.Round(24.0D * meterSamplesPerHour); meterDataQualitySummary.GoodPoints = 0; meterDataQualitySummary.LatchedPoints = 0; meterDataQualitySummary.UnreasonablePoints = 0; meterDataQualitySummary.NoncongruentPoints = 0; meterDataQualitySummary.DuplicatePoints = 0; } // Update the channel summary aggregates // based on the current channel summary if (channelSummary.TrendingSummary.IsDuplicate) { channelDataQualitySummary.DuplicatePoints++; } else if (channelSummary.TrendingSummary.Latched) { channelDataQualitySummary.LatchedPoints++; } else if (channelSummary.TrendingSummary.Unreasonable) { channelDataQualitySummary.UnreasonablePoints++; } else if (channelSummary.TrendingSummary.NonCongruent) { channelDataQualitySummary.NoncongruentPoints++; } else { channelDataQualitySummary.GoodPoints++; } } // Make sure the last channel and meter summary // records get submitted to the database if ((object)channelDataQualitySummary != null) { meterDataQualitySummary.GoodPoints += channelDataQualitySummary.GoodPoints; meterDataQualitySummary.LatchedPoints += channelDataQualitySummary.LatchedPoints; meterDataQualitySummary.UnreasonablePoints += channelDataQualitySummary.UnreasonablePoints; meterDataQualitySummary.NoncongruentPoints += channelDataQualitySummary.NoncongruentPoints; meterDataQualitySummary.DuplicatePoints += channelDataQualitySummary.DuplicatePoints; channelDataQualitySummaryTable.Upsert(channelDataQualitySummary); meterDataQualitySummaryTable.Upsert(meterDataQualitySummary); } } }