コード例 #1
0
        public async Task <IEnumerable <ProgramUsageSummary> > GetProgramUsagesSummary(List <Program> programs)
        {
            List <ProgramUsageSummary> returnData = new List <ProgramUsageSummary>();

            DataSet set = await this.ExecuteStoredProcedure(StoredProcedureNames.p_GetProgramUsagesSummary
                                                            , new SqlParameter("programIds", SqlDbType.NVarChar, 500)
            {
                Value = string.Join(",", programs.Select(x => x.Id))
            }

                                                            ).ConfigureAwait(false);

            List <DataRow> eventsRows = set.Tables[0].AsEnumerable().ToList();
            List <DataRow> viewsRows  = set.Tables[1].AsEnumerable().ToList();

            foreach (Program program in programs)
            {
                ProgramUsageSummary usageSummary;
                try
                {
                    DataRow programEventSummary = eventsRows.FirstOrDefault(x => (int)x["ProgramId"] == program.Id);
                    DataRow programViewSummary  = viewsRows.FirstOrDefault(x => (int)x["ProgramId"] == program.Id);

                    usageSummary = new ProgramUsageSummary
                    {
                        ProgramName   = program.Name
                        , EventsCount = (int)(programEventSummary?["Types"] ?? 0)
                        , ViewsCount  = (int)(programViewSummary?["Types"] ?? 0)

                        , TotalViewsUsageCount      = (int)(programViewSummary?["Total"] ?? 0)
                        , TotalTodayViewsUsageCount = (int)(programViewSummary?["Todays"] ?? 0)

                        , TotalEventsUsageCount      = (int)(programEventSummary?["Total"] ?? 0)
                        , TotalTodayEventsUsageCount = (int)(programEventSummary?["Todays"] ?? 0)
                    };

                    DateTimeOffset lastView  = (DateTimeOffset)(programViewSummary?["Last"] ?? default(DateTimeOffset));
                    DateTimeOffset lastEvent = (DateTimeOffset)(programEventSummary?["Last"] ?? default(DateTimeOffset));
                    usageSummary.LastUsage = lastEvent;
                    if (lastView > lastEvent)
                    {
                        usageSummary.LastUsage = lastView;
                    }
                }
                catch (Exception)
                {
                    usageSummary             = new ProgramUsageSummary();
                    usageSummary.ProgramName = program?.Name ?? "Error while loading summary";
                }

                returnData.Add(usageSummary);
            }

            return(returnData);
        }
コード例 #2
0
        public async Task <IEnumerable <ProgramUsageSummary> > GetProgramUsagesSummary(List <Program> programs)
        {
            List <ProgramUsageSummary> returnData = new List <ProgramUsageSummary>();

            foreach (Program program in programs)
            {
                ProgramUsageSummary usageSummary;
                try
                {
                    List <View> views = await this.Views.FindAsync(x => x.ProgramId == program.Id).ConfigureAwait(false);

                    List <ViewTelemetrySummary> viewSummaries = views.SelectMany(x => x.TelemetrySummaries).ToList();
                    List <Event> events = await this.Events.FindAsync(x => x.ProgramId == program.Id).ConfigureAwait(false);

                    List <EventTelemetrySummary> eventSummaries = events.SelectMany(x => x.TelemetrySummaries).ToList();

                    List <TelemetrySummary> allSummaries = viewSummaries.Cast <TelemetrySummary>().Concat(eventSummaries).ToList();

                    usageSummary = new ProgramUsageSummary
                    {
                        ProgramName       = program.Name
                        , LastUsage       = allSummaries.MaxOrNull(x => x.LastTelemetryUpdateTimestamp)
                        , TodayUsageCount = allSummaries.Where(x => (DateTime.UtcNow - x.LastTelemetryUpdateTimestamp).TotalHours <= 24).Sum(smr =>
                                                                                                                                             smr.GetTelemetryDetails().Count(detail => (DateTime.UtcNow - detail.Timestamp).TotalHours <= 24))
                        , TotalUsageCount           = allSummaries.Sum(x => x.SummaryCount)
                        , ViewsCount                = views.Count
                        , TotalViewsUsageCount      = viewSummaries.Sum(s => s.SummaryCount)
                        , TotalTodayViewsUsageCount = viewSummaries.Where(x => (DateTime.UtcNow - x.LastTelemetryUpdateTimestamp).TotalHours <= 24).Sum(smr =>
                                                                                                                                                        smr.TelemetryDetails.Count(detail => (DateTime.UtcNow - detail.Timestamp).TotalHours <= 24))
                        , EventsCount                = events.Count
                        , TotalEventsUsageCount      = eventSummaries.Sum(x => x.SummaryCount)
                        , TotalTodayEventsUsageCount = eventSummaries.Where(x => (DateTime.UtcNow - x.LastTelemetryUpdateTimestamp).TotalHours <= 24).Sum(smr =>
                                                                                                                                                          smr.TelemetryDetails.Count(detail => (DateTime.UtcNow - detail.Timestamp).TotalHours <= 24))
                    };
                }
                catch (Exception)
                {
                    usageSummary             = new ProgramUsageSummary();
                    usageSummary.ProgramName = program?.Name ?? "Error while loading summary";
                }

                returnData.Add(usageSummary);
            }

            return(returnData);
        }