Ejemplo n.º 1
0
        public async Task <TelemetryInfoTable> GetPivotTableData(TelemetryItemTypes type, Guid telemetryKey)
        {
            Program program = await this.portalContext.Programs.FirstOrDefaultAsync(x => x.TelemetryKey == telemetryKey).ConfigureAwait(false);

            if (program == null)
            {
                throw new ArgumentException($"Program with key {telemetryKey} does not exist");
            }

            List <TelemetryDetail>        details = program.GetTelemetryDetails(this.telemetryContext, type).ToList();
            List <TelemetryPivotTableRow> rows    = new List <TelemetryPivotTableRow>();

            foreach (TelemetryDetail detail in details)
            {
                List <TelemetryUnit> units = detail.GetTelemetryUnits().ToList();
                if (units.Any())
                {
                    foreach (TelemetryUnit detailTelemetryUnit in units.Where(x => x.UnitType == TelemetryUnit.UnitTypes.Property))
                    {
                        TelemetryPivotTableRow row = new TelemetryPivotTableRow(detail)
                        {
                            PropertyValue = detailTelemetryUnit.ValueString,
                            Key           = detailTelemetryUnit.Key,
                        };
                        rows.Add(row);
                    }
                    foreach (TelemetryUnit detailTelemetryUnit in units.Where(x => x.UnitType == TelemetryUnit.UnitTypes.Metric))
                    {
                        TelemetryPivotTableRow row = new TelemetryPivotTableRow(detail)
                        {
                            MetricValue = detailTelemetryUnit.ValueDouble,
                            Key         = detailTelemetryUnit.Key,
                        };
                        rows.Add(row);
                    }
                }
                else
                {
                    TelemetryPivotTableRow row = new TelemetryPivotTableRow(detail);
                    rows.Add(row);
                }
            }

            TelemetryInfoTableHeader header = new TelemetryInfoTableHeader();

            return(new TelemetryInfoTable {
                Header = header, Rows = rows
            });
        }
Ejemplo n.º 2
0
        public async Task <JsonResult> GetPivotTableData(TelemetryItemTypes type, Guid telemetryKey, DateTime startDate, DateTime endDate)
        {
            var sw = Stopwatch.StartNew();
            TelemetryInfoTable result = await this.Work.GetPivotTableData(type, telemetryKey, startDate, endDate).ConfigureAwait(false);

            sw.Stop();

            this.telemetryClient.TrackEvent("GetPivotTableData", new Dictionary <string, string>()
            {
                { "TelemetryKey", telemetryKey.ToString() },
                { "StartDate", startDate.ToString("o") },
                { "EndDate", endDate.ToString("o") },
                { "Elapsed", sw.ElapsedMilliseconds.ToString() },
                { "TimeSpan", (endDate - startDate).TotalDays.ToString(CultureInfo.InvariantCulture) },
            });
            return(this.Json(result, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 3
0
        public static IQueryable <TelemetryDetail> GetTelemetryDetails(this Program program, TelimenaTelemetryContext context,
                                                                       TelemetryItemTypes type, DateTime startDate, DateTime endDate)
        {
            switch (type)
            {
            case TelemetryItemTypes.View:
                return(context.ViewTelemetryDetails.Where(
                           x => x.TelemetrySummary.View.ProgramId == program.Id &&
                           x.Timestamp >= startDate && x.Timestamp <= endDate));

            case TelemetryItemTypes.Event:
                return(context.EventTelemetryDetails.Where(x => x.TelemetrySummary.Event.ProgramId == program.Id &&
                                                           x.Timestamp >= startDate && x.Timestamp <= endDate));

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
Ejemplo n.º 4
0
        public async Task <IEnumerable <RawTelemetryUnit> > GetRawData(Guid telemetryKey, TelemetryItemTypes type, DateTime startDate, DateTime endDate)
        {
            Program program = await this.portalContext.Programs.FirstOrDefaultAsync(x => x.TelemetryKey == telemetryKey).ConfigureAwait(false);

            if (program == null)
            {
                throw new ArgumentException($"Program with key {telemetryKey} does not exist");
            }

            DataSet set;

            if (type == TelemetryItemTypes.Event)
            {
                set = await this.ExecuteStoredProcedure(program,
                                                        StoredProcedureNames.p_GetEventTelemetryUnits
                                                        , startDate
                                                        , endDate
                                                        ).ConfigureAwait(false);
            }
            else if (type == TelemetryItemTypes.View)
            {
                set = await this.ExecuteStoredProcedure(program,
                                                        StoredProcedureNames.p_GetViewTelemetryUnits
                                                        , startDate
                                                        , endDate
                                                        ).ConfigureAwait(false);
            }
            else
            {
                throw new ArgumentException($"{type} is not allowed as raw data type export." +
                                            $"Supported types: {TelemetryItemTypes.Event}, {TelemetryItemTypes.View}");
            }


            List <RawTelemetryUnit> list = new List <RawTelemetryUnit>();
            DataRowCollection       rows = set.Tables[0].Rows;

            foreach (DataRow row in rows)
            {
                RawTelemetryUnit data = new RawTelemetryUnit()
                {
                    ComponentName = row["EntryKey"] as string,
                    Timestamp     = (DateTimeOffset)row["Timestamp"],
                    User          = row["UserIdentifier"] as string,
                    Sequence      = row["Sequence"] as string,
                    Key           = row["Key"] as string,
                    PropertyValue = row["ValueString"] as string,
                    MetricValue   = (double)row["ValueDouble"],
                };
                list.Add(data);
            }

            return(list);
        }
Ejemplo n.º 5
0
        public async Task <UsageDataTableResult> GetProgramUsageData(Guid telemetryKey, TelemetryItemTypes itemType
                                                                     , int skip, int take, IEnumerable <Tuple <string, bool> > sortBy, ISearch requestSearch
                                                                     , List <string> searchableColumns)
        {
            Program program = await this.portalContext.Programs.FirstOrDefaultAsync(x => x.TelemetryKey == telemetryKey).ConfigureAwait(false);

            if (program == null)
            {
                throw new ArgumentException($"Program with key {telemetryKey} does not exist");
            }

            IQueryable <TelemetryDetail> query;
            int totalCount;

            if (itemType == TelemetryItemTypes.View)
            {
                query      = this.telemetryContext.ViewTelemetryDetails.Where(x => x.TelemetrySummary.View.ProgramId == program.Id);
                totalCount = await this.telemetryContext.ViewTelemetryDetails.CountAsync(x => x.TelemetrySummary.View.ProgramId == program.Id).ConfigureAwait(false);
            }
            else
            {
                query      = this.telemetryContext.EventTelemetryDetails.Where(x => x.TelemetrySummary.Event.ProgramId == program.Id && !string.IsNullOrEmpty(x.TelemetrySummary.Event.Name)); //todo remove this empty string check after dealing with heartbeat data
                totalCount = await this.telemetryContext.EventTelemetryDetails.CountAsync(x => x.TelemetrySummary.Event.ProgramId == program.Id && !string.IsNullOrEmpty(x.TelemetrySummary.Event.Name)).ConfigureAwait(false);
            }



            IQueryable <TelemetryDetail> filteredQuery = EntityFilter.Match(query
                                                                            , property => property.Contains(requestSearch.Value)
                                                                            , new List <Expression <Func <TelemetryDetail, string> > >()
            {
                { x => x.Sequence },
                { x => x.IpAddress },
                { x => x.UserIdentifier },
                { x => x.EntryKey },
            });


            if (take == -1)
            {
                take = totalCount;
            }

            List <TelemetryDetail> usages = await ApplyOrderingQuery(sortBy, filteredQuery, skip, take).ConfigureAwait(false);

            List <DataTableTelemetryData> result = new List <DataTableTelemetryData>();

            foreach (TelemetryDetail detail in usages)
            {
                DataTableTelemetryData data = new DataTableTelemetryData()
                {
                    Timestamp        = detail.Timestamp
                    , UserName       = detail.UserIdentifier
                    , IpAddress      = detail.IpAddress
                    , EntryKey       = detail.EntryKey
                    , ProgramVersion = detail.FileVersion
                    , Sequence       = detail.Sequence
                    , Properties     = detail.GetTelemetryUnits().Where(x => x.UnitType == TelemetryUnit.UnitTypes.Property).ToDictionary(x => x.Key, x => x.ValueString)
                    , Metrics        = detail.GetTelemetryUnits().Where(x => x.UnitType == TelemetryUnit.UnitTypes.Metric).ToDictionary(x => x.Key, x => x.ValueDouble)
                };
                result.Add(data);
            }

            return(new UsageDataTableResult {
                TotalCount = totalCount, FilteredCount = totalCount, UsageData = result
            });
        }
Ejemplo n.º 6
0
        private static async Task <ITelemetryAware> GetTrackedComponent(ITelemetryUnitOfWork work, TelemetryItemTypes itemType, string key, TelemetryRootObject program)
        {
            switch (itemType)
            {
            case TelemetryItemTypes.Event:
                return(await GetEventOrAddIfMissing(work, key, program).ConfigureAwait(false));

            case TelemetryItemTypes.View:
                return(await GetViewOrAddIfMissing(work, key, program).ConfigureAwait(false));

            default:
                throw new ArgumentOutOfRangeException(nameof(itemType), itemType, null);
            }
        }
Ejemplo n.º 7
0
        public async Task <JsonResult> GetPivotTableData(TelemetryItemTypes type, Guid telemetryKey)
        {
            var result = await this.Work.GetPivotTableData(type, telemetryKey).ConfigureAwait(false);

            return(this.Json(result, JsonRequestBehavior.AllowGet));
        }