/// <summary>
        /// Creates the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="program">The program.</param>
        /// <returns>TelemetryQueryResponse.</returns>
        public static TelemetryQueryResponse Create(TelemetryQueryRequest request, TelemetryRootObject program)
        {
            TelemetryQueryResponse queryResult = new TelemetryQueryResponse();

            IEnumerable <IEnumerable <ITelemetryAware> > collections = GetCollections(request.TelemetryItemTypes, program);

            foreach (IEnumerable <ITelemetryAware> collection in collections)
            {
                foreach (ITelemetryAware telemetryAwareComponent in collection.Where(cmp => request.ComponentKeys.Contains("*") || request.ComponentKeys.Contains(cmp.Name)))
                {
                    ProcessComponents(request, queryResult, telemetryAwareComponent);
                }
            }

            return(queryResult);
        }
        public async Task ReportView()
        {
            string viewName = nameof(this.ReportView);
            //seed the data
            DateTimeOffset timestamp = DateTimeOffset.UtcNow;
            FileInfo app = this.LaunchTestsAppNewInstance(out _, Actions.ReportViewUsage, Apps.Keys.AutomaticTestsClient, Apps.PackageNames.AutomaticTestsClientAppV1, "", viewName: viewName);


            TelemetryQueryRequest request = TelemetryQueryRequest.CreateFull(Apps.Keys.AutomaticTestsClient);
            TelemetryQueryResponse queryResponse = await this.CheckTelemetry(request);
            TelemetrySummaryDto summary = null;
            TelemetryAwareComponentDto viewComponent = null;



                viewComponent = queryResponse.TelemetryAware.First(x => x.ComponentKey == viewName);
                Assert.IsNotNull(viewComponent);
                summary = viewComponent.Summaries.OrderByDescending(x=>x.LastReported).FirstOrDefault();
                Assert.IsNotNull(summary);

            var userName = summary.UserName;

            timestamp = DateTimeOffset.UtcNow;

            app= this.LaunchTestsAppNewInstance(out _, Actions.ReportViewUsage, Apps.Keys.AutomaticTestsClient, Apps.PackageNames.AutomaticTestsClientAppV1, "", viewName: viewName);
            
            //Assert.IsNull(response.Exception);
            //Assert.AreEqual(HttpStatusCode.Accepted, response.StatusCode);

            queryResponse = await this.CheckTelemetry(request);

            viewComponent = queryResponse.TelemetryAware.First(x => x.ComponentKey == viewName);

            if (summary == null) //first time ever the test is run, the summary is empty - let it do work and fail 
            {
                summary = viewComponent.Summaries.FirstOrDefault(x => x.UserName == userName);
            }

            var summaryAfterUpdate = viewComponent.Summaries.FirstOrDefault(x => x.UserName== userName);
            Assert.IsNotNull(summaryAfterUpdate);

            Assert.Greater(summaryAfterUpdate.SummaryCount, summary.SummaryCount);
            Assert.Greater(summaryAfterUpdate.LastReported, summary.LastReported);
            Assert.Greater(summaryAfterUpdate.Details.Count, summary.Details.Count);
            Assert.That(summaryAfterUpdate.Details.OrderByDescending(x => x.Timestamp).First().Timestamp, Is.EqualTo(timestamp).Within(TimeSpan.FromSeconds(5.0)));

        }
        private static void ProcessComponents(TelemetryQueryRequest request, TelemetryQueryResponse queryResult, ITelemetryAware telemetryAwareComponent)
        {
            if (queryResult.TelemetryAware == null)
            {
                queryResult.TelemetryAware = new List <TelemetryAwareComponentDto>();
            }
            TelemetryAwareComponentDto componentDto = new TelemetryAwareComponentDto(telemetryAwareComponent, request.PropertiesToInclude);

            queryResult.TelemetryAware.Add(componentDto);

            if (request.Granularity >= TelemetryRequestGranularity.Summaries)
            {
                foreach (TelemetrySummary telemetrySummary in telemetryAwareComponent.GetTelemetrySummaries())
                {
                    ProcessSummaries(request, telemetrySummary, componentDto);
                }
            }
        }
        public async Task <IHttpActionResult> ExecuteQuery(TelemetryQueryRequest request)
        {
            if (request.TelemetryKey == Guid.Empty)
            {
                return(this.BadRequest("Empty telemetry key"));
            }

            TelemetryRootObject prg = await this.work.GetMonitoredProgram(request.TelemetryKey).ConfigureAwait(false);

            if (prg == null)
            {
                return(this.BadRequest($"Program with key [{request.TelemetryKey}] not found"));
            }


            TelemetryQueryResponse queryResult = TelemetryQueryResponseCreator.Create(request, prg);

            return(this.Ok(queryResult));
        }
Exemple #5
0
        private async Task SendBasicTelemetry(Guid guid)
        {
            await this.SendBasicTelemetry(guid, new BasicTelemetryItem()
            {
                Metrics = new Dictionary <string, double>()
                {
                    { "Something", 123.3 }
                },
                ProgramVersion = "1.2.3.4",
            }).ConfigureAwait(false);

            await this.SendBasicTelemetry(guid, new BasicTelemetryItem()
            {
                EventName         = "SomeViewEvent",
                TelemetryItemType = TelemetryItemTypes.View,
                Metrics           = new Dictionary <string, double>()
                {
                    { "SomethingForView", 123.3 }
                },
                ProgramVersion = "1.2.3.4",
            }).ConfigureAwait(false);

            await this.SendBasicTelemetry(guid, new BasicTelemetryItem()
            {
                TelemetryItemType = TelemetryItemTypes.LogMessage,
                LogMessage        = "Hello, world",
            }).ConfigureAwait(false);

            TelemetryQueryRequest  request       = TelemetryQueryRequest.CreateFull(guid);
            TelemetryQueryResponse queryResponse = await this.CheckTelemetry(request).ConfigureAwait(false);

            var viewTelemetry  = queryResponse.TelemetryAware.Single(x => x.ComponentKey == "SomeViewEvent");
            var eventTelemetry = queryResponse.TelemetryAware.Single(x => x.ComponentKey == "DefaultEvent");

            Assert.AreEqual("1.2.3.4", viewTelemetry.Summaries.Single().Details.Single().FileVersion);
            Assert.AreEqual("1.2.3.4", eventTelemetry.Summaries.Single().Details.Single().FileVersion);
        }