public IHttpActionResult LoggedInClientsThisWeek()
        {
            var      now            = DateTime.Now.Date;
            var      firstDAyOfWeek = now;
            DateTime tommorw        = now.AddDays(1);

            while (firstDAyOfWeek.DayOfWeek != DayOfWeek.Monday)
            {
                firstDAyOfWeek = firstDAyOfWeek.AddDays(-1);
            }

            var query = new AnalyticQuery
            {
                TabelId   = "ga:77407066",
                StartDate = firstDAyOfWeek,
                EndDate   = now,
            };

            query.Metrics.AddMany("ga:visitors");
            query.MaxResults = 500;
            query.Filters.AddMany("ga:customVarValue3==client");

            var result = gaService.Get <NumLoginsThisWeek>(query);

            if (result.Count() > 0)
            {
                var numLoginsThisWeek = result.First().Visitors;
                return(Ok(new { numLogins = numLoginsThisWeek }));
            }
            else
            {
                return(Ok(new { numLogins = 0 }));
            }
        }
Пример #2
0
        public void WhenIRunQueryResultsAndEnterAFlightIdOfAndAQueryWithAnAnalyticIdOf(int p0, string p1)
        {
            var query = new AnalyticQuery();

            query.SelectAnalytic(p1);
            m_result.Object = m_api.Analytics.QueryResults(p0, query);
        }
Пример #3
0
        public void ImportEvents(int clientId, DateTime fromDate, DateTime toDate)
        {
            var exceptions = new List <Exception>();
            var clientInDb = clienRepository.Where(c => c.Id == clientId && c.IsActive);

            if (!clientInDb.Any())
            {
                return;
            }

            var client = clientInDb.Single();

            var analyticsId = client.AnalyticsTableId;

            if (string.IsNullOrEmpty(analyticsId))
            {
                throw new Exception("Client has no analytic table Id; client Id:" + clientId);
            }

            var query = new AnalyticQuery
            {
                TabelId   = analyticsId,
                StartDate = fromDate,
                EndDate   = toDate,
            };

            query.Metrics.AddMany("ga:uniqueEvents", "ga:eventValue");
            query.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:sourceMedium", "ga:dateHour", "ga:campaign", "ga:minute");
            query.MaxResults = 10000;
            query.Filters.AddMany("ga:eventCategory==Helloy Event");
            var dataFeed = gaService.Get <EventAnalyticData>(query);

            if (dataFeed != null && dataFeed.Any())
            {
                foreach (var Event in dataFeed)
                {
                    try
                    {
                        AddEvent(Event, clientId);
                    }
                    catch (Exception ex)
                    {
                        exceptions.Add(ex);
                    }
                }
                contactRepository.SaveChanges();
            }

            if (exceptions.Count > 0)
            {
                throw new AggregateException(exceptions);
            }
        }
        public void NoEntriesNoInsertionInDataBase()
        {
            var clientRepositoryMoq   = new LocalRepository <Client>();
            var contactRepositoryMoq  = new Mock <IRepository <Contact> >();
            var contactProductService = new Mock <IProductService>();
            var contactAutoRating     = new Mock <IContactAutoRating>();
            var gaService             = new Mock <IGoogleAnalyticsApi>();

            var client = new Client()
            {
                Id = 1, IsActive = true, AnalyticsTableId = "ga:123456"
            };

            clientRepositoryMoq.Add(client);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 01, 03);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:sourceMedium", "ga:dateHour", "ga:minute", "ga:campaign");
            analyticQuery.TabelId   = clientRepositoryMoq.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:uniqueEvents", "ga:eventValue");
            analyticQuery.Filters.Add("ga:eventCategory==Helloy Event");

            gaService.Setup(
                ga =>
                ga.Get <EventAnalyticData>(It.Is <AnalyticQuery>(
                                               aq =>
                                               !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                               !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                               !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                               aq.StartDate == analyticQuery.StartDate &&
                                               aq.EndDate == analyticQuery.EndDate &&
                                               aq.TabelId == analyticQuery.TabelId))).Returns((IEnumerable <EventAnalyticData>)null);

            var customEventsExtractor = new CustomEventsExtractor(
                clientRepositoryMoq,
                contactRepositoryMoq.Object,
                new ServerTime(),
                contactProductService.Object,
                contactAutoRating.Object,
                gaService.Object);


            customEventsExtractor.ImportEvents(client.Id, startDate, endDate);
            contactRepositoryMoq.Verify(l => l.SaveChanges(), Times.Never);
            contactRepositoryMoq.Verify(l => l.Add(It.IsAny <Contact>()), Times.Never);
        }
Пример #5
0
        public void UpdateContact(int clientId, DateTime fromDate, DateTime toDate)
        {
            var clientForAnalytics = clientRepository.Where(l => l.Id == clientId).Single();

            var exceptions = new List <Exception>();

            if (!clientForAnalytics.IsActive)
            {
                throw new InvalidOperationException("Client Not Active");
            }

            if (String.IsNullOrEmpty(clientForAnalytics.AnalyticsTableId))
            {
                throw new InvalidOperationException("No Analytic Table Id for Client:" + clientForAnalytics.Id);
            }

            var query = new AnalyticQuery
            {
                TabelId   = clientForAnalytics.AnalyticsTableId,
                StartDate = fromDate,
                EndDate   = toDate,
            };

            query.Metrics.AddMany("ga:uniqueEvents");
            query.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:source", "ga:medium", "ga:campaign", "ga:eventCategory");
            query.MaxResults = 10000;

            var dataFeed = gaService.Get <ProductAnalyticData>(query);

            if (dataFeed != null)
            {
                foreach (var analyticForContact in dataFeed)
                {
                    try
                    {
                        SetContactPropertiesForAnalyticData(analyticForContact);
                    }
                    catch (Exception ex)
                    {
                        exceptions.Add(ex);
                    }
                }
            }

            if (exceptions.Count > 0)
            {
                throw new AggregateException(exceptions);
            }
        }
Пример #6
0
        public IHttpActionResult GetSearchKeywords(int clientId, DateTime startDate, DateTime endDate)
        {
            if (userManager.IsInRole(User.Identity.GetUserId(), "demo"))
            {
                var demoKeywords = new List <SearchDetailsRow>();
                AddKeywordDemoData(demoKeywords);

                return(Ok(demoKeywords.OrderByDescending(k => k.ContactCollection.IndexValue)));
            }

            var client  = clienRepository.Where(c => c.Id == clientId).Single();
            var tableId = client.AnalyticsTableId;

            var query = new AnalyticQuery
            {
                TabelId   = tableId,
                StartDate = startDate,
                EndDate   = endDate,
            };

            query.Metrics.AddMany("ga:adClicks", "ga:adCost", "ga:impressions");
            query.Dimenssions.AddMany("ga:keyword");
            query.MaxResults = 50;
            query.Filters.AddMany("ga:campaign!~(display)|(retargeting)|(Display)|(Retargeting)|(remarketing)|(Remarketing)", "ga:medium==cpc");
            query.Sort = "-ga:adCost";

            var keywordFeed = gaService.Get <SearchDetailsRow>(query).ToList();

            foreach (var searchDetailsRow in keywordFeed)
            {
                var row = searchDetailsRow;
                var contactsForKeyword =
                    client.Leads.Where(
                        c => c.SearchPhrase != null && c.SearchPhrase.Equals(row.Keyword) &&
                        c.Date >= startDate && c.Date <= endDate);

                var cost   = searchDetailsRow.AdCost.HasValue ? (decimal)searchDetailsRow.AdCost : 0m;
                var clicks = searchDetailsRow.AdClicks.HasValue ? (int)searchDetailsRow.AdClicks : 0;
                searchDetailsRow.ContactCollection = new ContactCollection(searchDetailsRow.Name, cost, clicks, contactsForKeyword.ToList());
                searchDetailsRow.NumContacts       = contactsForKeyword.Count();
            }

            if (keywordFeed.Any())
            {
                contactIndexCalculator.SetIndexValues(keywordFeed.Select(k => k.ContactCollection));
            }

            return(Ok(keywordFeed.OrderByDescending(k => k.ContactCollection.IndexValue)));
        }
Пример #7
0
        public void CanGetCampaignDetailsWithServeralCampaignsIgnoreInvalidData()
        {
            var clientRepository = RepositoryHelper.RepositoryLocalWithOneClient;
            var gaService        = new Mock <IGoogleAnalyticsApi>();

            var userManager           = new Mock <IIdentityMembershipProvider>();
            var contactProductService = new Mock <IProductService>();

            var contactIndexCalculator = new Mock <IContactIndexCalculator>();
            var controller             = new SourceController(clientRepository,
                                                              contactProductService.Object,
                                                              userManager.Object,
                                                              gaService.Object,
                                                              contactIndexCalculator.Object);

            var startDate = new DateTime(2014, 1, 1);
            var endDate   = new DateTime(2014, 2, 1);

            var mapRowResponse = new List <CampaignDetails>();
            var row1           = new CampaignDetails
            {
                Campaign     = "Campaign1",
                SourceMedium = "google/cpc",
                AdCost       = 20,
                Sessions     = 10
            };

            var row2 = new CampaignDetails
            {
                Campaign       = "Campaign2",
                SourceMedium   = "Adroll/cpc",
                AdCost         = 30,
                AdClicksMetric = 20,
                Sessions       = 0
            };
            var invalidRow = new CampaignDetails
            {
                Campaign     = "Campaign1",
                SourceMedium = "google/direct",
                AdCost       = 20,
                Sessions     = 0
            };

            mapRowResponse.Add(row1);
            mapRowResponse.Add(row2);
            mapRowResponse.Add(invalidRow);

            var contact1 = new Contact()
            {
                Date     = startDate.AddDays(1),
                Campaign = "Campaign1"
            };
            var contact2 = new Contact()
            {
                Date     = startDate.AddDays(1),
                Campaign = "Campaign2"
            };
            var contactNotInRange = new Contact()
            {
                Date     = endDate.AddDays(1),
                Campaign = "Campaign1"
            };

            clientRepository.All().First().Leads.Add(contact1);
            clientRepository.All().First().Leads.Add(contact2);
            clientRepository.All().First().Leads.Add(contactNotInRange);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:sourceMedium", "ga:campaign");
            analyticQuery.TabelId   = clientRepository.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:adClicks", "ga:adCost", "ga:impressions", "ga:sessions");
            analyticQuery.Filters.Add("ga:campaign!=(not set)");

            gaService.Setup(
                ga =>
                ga.Get <CampaignDetails>(It.Is <AnalyticQuery>(
                                             aq =>
                                             !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                             !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                             !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                             aq.StartDate == analyticQuery.StartDate &&
                                             aq.EndDate == analyticQuery.EndDate &&
                                             aq.TabelId == analyticQuery.TabelId))).Returns(mapRowResponse);

            contactProductService.Setup(cp => cp.IsValidProduct(It.IsAny <string>(), "cpc")).Returns(true);
            contactProductService.Setup(cp => cp.GetProduct(It.IsAny <string>(), "cpc")).Returns("Display");

            var result =
                controller.GetCampaignsDetail(1, startDate, endDate)
                as OkNegotiatedContentResult <IEnumerable <CampaignDetails> >;

            Assert.AreEqual(2, result.Content.Count());

            Assert.AreEqual(10, result.Content.Single(c => c.Campaign == "Campaign1").AdClicks);
            Assert.AreEqual(10, result.Content.Single(c => c.Campaign == "Campaign1").Sessions);
            Assert.AreEqual(false, result.Content.Single(c => c.Campaign == "Campaign1").AdClicksMetric.HasValue);
            Assert.AreEqual(20, result.Content.Single(c => c.Campaign == "Campaign1").AdCost);
            Assert.AreEqual("Adwords", result.Content.Single(c => c.Campaign == "Campaign1").AdProvider);
            Assert.AreEqual("google", result.Content.Single(c => c.Campaign == "Campaign1").Source);
            Assert.AreEqual("cpc", result.Content.Single(c => c.Campaign == "Campaign1").Medium);
            Assert.AreEqual("Display", result.Content.Single(c => c.Campaign == "Campaign1").Product);
            Assert.AreEqual(1, result.Content.Single(c => c.Campaign == "Campaign1").NumContacts);

            Assert.AreEqual(20, result.Content.Single(c => c.Campaign == "Campaign2").AdClicks);
            Assert.AreEqual(0, result.Content.Single(c => c.Campaign == "Campaign2").Sessions);
            Assert.AreEqual(true, result.Content.Single(c => c.Campaign == "Campaign2").AdClicksMetric.HasValue);
            Assert.AreEqual(20, result.Content.Single(c => c.Campaign == "Campaign2").AdClicksMetric);
            Assert.AreEqual(30, result.Content.Single(c => c.Campaign == "Campaign2").AdCost);
            Assert.AreEqual("Adroll", result.Content.Single(c => c.Campaign == "Campaign2").AdProvider);
            Assert.AreEqual("Adroll", result.Content.Single(c => c.Campaign == "Campaign2").Source);
            Assert.AreEqual("cpc", result.Content.Single(c => c.Campaign == "Campaign2").Medium);
            Assert.AreEqual("Display", result.Content.Single(c => c.Campaign == "Campaign2").Product);
            Assert.AreEqual(1, result.Content.Single(c => c.Campaign == "Campaign2").NumContacts);
        }
Пример #8
0
        public void CanGetCampaignDetailsReturnsNoCampaignForNoProductAndNoAdClick()
        {
            var clientRepository = RepositoryHelper.RepositoryLocalWithOneClient;
            var gaService        = new Mock <IGoogleAnalyticsApi>();

            var userManager           = new Mock <IIdentityMembershipProvider>();
            var contactProductService = new Mock <IProductService>();

            var contactIndexCalculator = new Mock <IContactIndexCalculator>();
            var controller             = new SourceController(clientRepository,
                                                              contactProductService.Object,
                                                              userManager.Object,
                                                              gaService.Object,
                                                              contactIndexCalculator.Object);

            var startDate = new DateTime(2014, 1, 1);
            var endDate   = new DateTime(2014, 2, 1);

            var mapRowResponse = new List <CampaignDetails>();
            var row1           = new CampaignDetails
            {
                Campaign     = "Campaign1",
                SourceMedium = "google/cpc",
                AdCost       = 20,
                Sessions     = 0
            };

            var row2 = new CampaignDetails
            {
                Campaign       = "Campaign2",
                SourceMedium   = "Adroll/cpc",
                AdCost         = 30,
                AdClicksMetric = 10
            };

            mapRowResponse.Add(row1);
            mapRowResponse.Add(row2);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:sourceMedium", "ga:campaign");
            analyticQuery.TabelId   = clientRepository.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:adClicks", "ga:adCost", "ga:impressions", "ga:sessions");
            analyticQuery.Filters.Add("ga:campaign!=(not set)");

            gaService.Setup(
                ga =>
                ga.Get <CampaignDetails>(It.Is <AnalyticQuery>(
                                             aq =>
                                             !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                             !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                             !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                             aq.StartDate == analyticQuery.StartDate &&
                                             aq.EndDate == analyticQuery.EndDate &&
                                             aq.TabelId == analyticQuery.TabelId))).Returns(mapRowResponse);

            contactProductService.Setup(cp => cp.IsValidProduct(It.IsAny <string>(), "cpc")).Returns(false);

            var result =
                controller.GetCampaignsDetail(1, startDate, endDate)
                as OkNegotiatedContentResult <IEnumerable <CampaignDetails> >;

            Assert.AreEqual(0, result.Content.Count());
        }
        public void CreateLeadForMoreThanOneEventWithSameDateDifferentTime()
        {
            var clientRepositoryMoq   = new LocalRepository <Client>();
            var contactRepositoryMoq  = new Mock <IRepository <Contact> >();
            var contactProductService = new Mock <IProductService>();
            var contactAutoRating     = new Mock <IContactAutoRating>();

            var gaService = new Mock <IGoogleAnalyticsApi>();

            var dataEntries = new List <EventAnalyticData>();
            var dataEntry1  = new EventAnalyticData();

            dataEntry1.NumberOfUniqueEvents = 1;
            dataEntry1.RatingValue          = 1;
            dataEntry1.EventAction          = "Test Action";
            dataEntry1.EventLabel           = "Test Lable";
            dataEntry1.EventSearchPhrase    = "Some Search Phrase";
            dataEntry1.EventSourceMedium    = "Source/Medium";
            dataEntry1.EventCampaign        = "Campaign";
            dataEntry1.EventDateHour        = "2014010100";
            dataEntry1.EventMinute          = "00";
            dataEntries.Add(dataEntry1);

            var dataEntry2 = new EventAnalyticData();

            dataEntry2.NumberOfUniqueEvents = 1;
            dataEntry2.RatingValue          = 1;
            dataEntry2.EventAction          = "Test Action";
            dataEntry2.EventLabel           = "Test Lable";
            dataEntry2.EventSearchPhrase    = "Some Search Phrase";
            dataEntry2.EventSourceMedium    = "Source/Medium";
            dataEntry2.EventCampaign        = "Campaign";
            dataEntry2.EventDateHour        = "2014010100";
            dataEntry2.EventMinute          = "01"; //======> different Minute
            dataEntries.Add(dataEntry2);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 01, 03);
            var client    = new Client()
            {
                Id = 1, IsActive = true, AnalyticsTableId = "ga:123456"
            };

            clientRepositoryMoq.Add(client);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:sourceMedium", "ga:dateHour", "ga:minute", "ga:campaign");
            analyticQuery.TabelId   = clientRepositoryMoq.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:uniqueEvents", "ga:eventValue");
            analyticQuery.Filters.Add("ga:eventCategory==Helloy Event");

            gaService.Setup(
                ga =>
                ga.Get <EventAnalyticData>(It.Is <AnalyticQuery>(
                                               aq =>
                                               !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                               !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                               !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                               aq.StartDate == analyticQuery.StartDate &&
                                               aq.EndDate == analyticQuery.EndDate &&
                                               aq.TabelId == analyticQuery.TabelId))).Returns(dataEntries);

            var customEventsExtractor = new CustomEventsExtractor(
                clientRepositoryMoq,
                contactRepositoryMoq.Object,
                new ServerTime(),
                contactProductService.Object,
                contactAutoRating.Object,
                gaService.Object);

            customEventsExtractor.ImportEvents(client.Id, startDate, endDate);
            contactRepositoryMoq.Verify(l => l.SaveChanges(), Times.Exactly(1));
            contactRepositoryMoq.Verify(l => l.Add(It.IsAny <Contact>()), Times.Exactly(2));
        }
Пример #10
0
        /// <summary>
        /// Queries offsets and values in time-series data for a specified flight and analytic.
        /// </summary>
        /// <param name="emsSystem">
        /// The unique identifier of the EMS system.
        /// </param>
        /// <param name="flightId">
        /// The integer ID of the flight record for which to query data.
        /// </param>
        /// <param name="query">
        /// The information used to construct a query for which results are returned.
        /// </param>
        public virtual Task <QueryResult> QueryResultsAsync(int flightId, AnalyticQuery query, int emsSystem = NoEmsServerSpecified)
        {
            int ems = GetEmsSystemForMethodCall(emsSystem);

            return(CallApiTask(api => api.GetAnalyticResults(ems, flightId, query.Raw)));
        }
        public void CreateLeadForMoreThanOneUniqueEventIgnoreNullProperties()
        {
            var clientRepositoryMoq   = new LocalRepository <Client>();
            var contactRepository     = new LocalRepository <Contact>();
            var contactProductService = new Mock <IProductService>();
            var contactAutoRating     = new Mock <IContactAutoRating>();
            var gaService             = new Mock <IGoogleAnalyticsApi>();

            var dataEntries = new List <EventAnalyticData>();
            var dataEntry1  = new EventAnalyticData();

            dataEntry1.NumberOfUniqueEvents = 2;
            dataEntry1.RatingValue          = 1;
            dataEntry1.EventAction          = "Test Action";
            dataEntry1.EventLabel           = "Test Lable";
            dataEntry1.EventSearchPhrase    = "";
            dataEntry1.EventSourceMedium    = "Source/Medium";
            dataEntry1.EventCampaign        = "Campaign";
            dataEntry1.EventDateHour        = "2014010100";
            dataEntry1.EventMinute          = "00";
            dataEntries.Add(dataEntry1);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 01, 03);
            var client    = new Client()
            {
                Id = 1, IsActive = true, AnalyticsTableId = "ga:123456"
            };

            clientRepositoryMoq.Add(client);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:sourceMedium", "ga:dateHour", "ga:minute", "ga:campaign");
            analyticQuery.TabelId   = clientRepositoryMoq.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:uniqueEvents", "ga:eventValue");
            analyticQuery.Filters.Add("ga:eventCategory==Helloy Event");

            gaService.Setup(
                ga =>
                ga.Get <EventAnalyticData>(It.Is <AnalyticQuery>(
                                               aq =>
                                               !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                               !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                               !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                               aq.StartDate == analyticQuery.StartDate &&
                                               aq.EndDate == analyticQuery.EndDate &&
                                               aq.TabelId == analyticQuery.TabelId))).Returns(dataEntries);

            var customEventsExtractor = new CustomEventsExtractor(
                clientRepositoryMoq,
                contactRepository,
                new ServerTime(),
                contactProductService.Object,
                contactAutoRating.Object,
                gaService.Object);

            contactProductService.Setup(cp => cp.IsValidProduct("Campaign", "Medium")).Returns(true);
            contactProductService.Setup(cp => cp.GetProduct("Campaign", "Medium")).Returns("Product");


            customEventsExtractor.ImportEvents(client.Id, startDate, endDate);

            Assert.AreEqual(2, contactRepository.All().Count());

            Assert.AreEqual("Campaign", contactRepository.All().First().Campaign);
            Assert.AreEqual("Medium", contactRepository.All().First().Medium);
            Assert.AreEqual("Source", contactRepository.All().First().Source);
            Assert.AreEqual("Test Action", contactRepository.All().First().Property.Single(lp => lp.Type == "Action").Value);
            Assert.AreEqual("Test Lable", contactRepository.All().First().Property.Single(lp => lp.Type == "Label").Value);
            Assert.AreEqual("Product", contactRepository.All().First().Product);

            Assert.IsFalse(contactRepository.All().First().Property.Any(lp => lp.Type == "SearchPhrase"));


            Assert.AreEqual("Campaign", contactRepository.All().Last().Campaign);
            Assert.AreEqual("Medium", contactRepository.All().Last().Medium);
            Assert.AreEqual("Source", contactRepository.All().Last().Source);
            Assert.AreEqual("Test Action", contactRepository.All().Last().Property.Single(lp => lp.Type == "Action").Value);
            Assert.AreEqual("Test Lable", contactRepository.All().Last().Property.Single(lp => lp.Type == "Label").Value);
            Assert.AreEqual("Product", contactRepository.All().Last().Product);

            Assert.IsFalse(contactRepository.All().Last().Property.Any(lp => lp.Type == "SearchPhrase"));
        }
        public void DefaultAnalyticsValuesAreNotImportad()
        {
            var clientRepositoryMoq   = new LocalRepository <Client>();
            var contactRepository     = new LocalRepository <Contact>();
            var contactProductService = new Mock <IProductService>();
            var contactAutoRating     = new Mock <IContactAutoRating>();

            var gaService = new Mock <IGoogleAnalyticsApi>();

            var dataEntries = new List <EventAnalyticData>();
            var dataEntry1  = new EventAnalyticData();

            dataEntry1.NumberOfUniqueEvents = 1;
            dataEntry1.RatingValue          = 0;
            dataEntry1.EventAction          = "Test Action";
            dataEntry1.EventLabel           = "Test Lable";
            dataEntry1.EventSearchPhrase    = "Some Search Phrase";
            dataEntry1.EventSourceMedium    = "SourceValue / MediumValue";
            dataEntry1.EventCampaign        = "Campaign 1";
            dataEntry1.EventDateHour        = "2014010100";
            dataEntry1.EventMinute          = "00";
            dataEntries.Add(dataEntry1);

            var dataEntry2 = new EventAnalyticData();

            dataEntry2.NumberOfUniqueEvents = 1;
            dataEntry2.RatingValue          = 1;
            dataEntry2.EventAction          = "Test Action2";
            dataEntry2.EventLabel           = "Test Lable2";
            dataEntry2.EventSearchPhrase    = "(not provided)";
            dataEntry2.EventSourceMedium    = "(direct) / (none)";
            dataEntry2.EventCampaign        = "(not set)";
            dataEntry2.EventDateHour        = "2014010100";
            dataEntry2.EventMinute          = "01";
            dataEntries.Add(dataEntry2);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 01, 03);
            var client    = new Client()
            {
                Id = 1, IsActive = true, AnalyticsTableId = "ga:123456"
            };

            clientRepositoryMoq.Add(client);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:sourceMedium", "ga:dateHour", "ga:minute", "ga:campaign");
            analyticQuery.TabelId   = clientRepositoryMoq.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:uniqueEvents", "ga:eventValue");
            analyticQuery.Filters.Add("ga:eventCategory==Helloy Event");

            gaService.Setup(
                ga =>
                ga.Get <EventAnalyticData>(It.Is <AnalyticQuery>(
                                               aq =>
                                               !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                               !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                               !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                               aq.StartDate == analyticQuery.StartDate &&
                                               aq.EndDate == analyticQuery.EndDate &&
                                               aq.TabelId == analyticQuery.TabelId))).Returns(dataEntries);

            var customEventsExtractor = new CustomEventsExtractor(
                clientRepositoryMoq,
                contactRepository,
                new ServerTime(),
                contactProductService.Object,
                contactAutoRating.Object,
                gaService.Object);



            contactProductService.Setup(ps => ps.IsValidProduct("Campaign 1", "MediumValue")).Returns(true);
            contactProductService.Setup(ps => ps.GetProduct("Campaign 1", "MediumValue")).Returns("Product1");

            customEventsExtractor.ImportEvents(client.Id, startDate, endDate);

            var contact1 = contactRepository.All().ElementAt(0);
            var contact2 = contactRepository.All().ElementAt(1);


            Assert.AreEqual("Some Search Phrase", contact1.SearchPhrase);
            Assert.AreEqual("SourceValue", contact1.Source);
            Assert.AreEqual("MediumValue", contact1.Medium);
            Assert.AreEqual("Campaign 1", contact1.Campaign);
            Assert.AreEqual("Product1", contact1.Product);

            Assert.IsNull(contact2.SearchPhrase);
            Assert.IsNull(contact2.Source);
            Assert.IsNull(contact2.Medium);
            Assert.IsNull(contact2.Campaign);
        }
        public void CreateLeadForEventValueDayLightSaving()
        {
            var clientRepositoryMoq   = new LocalRepository <Client>();
            var contactRepository     = new LocalRepository <Contact>();
            var contactProductService = new Mock <IProductService>();
            var contactAutoRating     = new Mock <IContactAutoRating>();

            var gaService = new Mock <IGoogleAnalyticsApi>();

            var dataEntries = new List <EventAnalyticData>();
            var dataEntry1  = new EventAnalyticData();

            dataEntry1.NumberOfUniqueEvents = 1;
            dataEntry1.RatingValue          = 0;
            dataEntry1.EventAction          = "Test Action";
            dataEntry1.EventLabel           = "Test Lable";
            dataEntry1.EventSearchPhrase    = "Some Search Phrase";
            dataEntry1.EventSourceMedium    = "Source/Medium";
            dataEntry1.EventCampaign        = "Campaign";
            dataEntry1.EventDateHour        = "2014052703";
            dataEntry1.EventMinute          = "00";
            dataEntries.Add(dataEntry1);

            var startDate = new DateTime(2014, 05, 26);
            var endDate   = new DateTime(2014, 05, 28);

            Client client = new Client()
            {
                Id = 1, IsActive = true, AnalyticsTableId = "ga:123456"
            };

            clientRepositoryMoq.Add(client);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:sourceMedium", "ga:dateHour", "ga:minute", "ga:campaign");
            analyticQuery.TabelId   = clientRepositoryMoq.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:uniqueEvents", "ga:eventValue");
            analyticQuery.Filters.Add("ga:eventCategory==Helloy Event");

            gaService.Setup(
                ga =>
                ga.Get <EventAnalyticData>(It.Is <AnalyticQuery>(
                                               aq =>
                                               !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                               !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                               !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                               aq.StartDate == analyticQuery.StartDate &&
                                               aq.EndDate == analyticQuery.EndDate &&
                                               aq.TabelId == analyticQuery.TabelId))).Returns(dataEntries);

            contactProductService.Setup(cp => cp.GetProduct("Campaign", "Medium")).Returns("Product");

            var customEventsExtractor = new CustomEventsExtractor(
                clientRepositoryMoq,
                contactRepository,
                new ServerTime(),
                contactProductService.Object,
                contactAutoRating.Object,
                gaService.Object);


            customEventsExtractor.ImportEvents(client.Id, startDate, endDate);

            Assert.AreEqual(1, contactRepository.All().Count());

            var createdContact = contactRepository.All().First();

            Assert.AreEqual(new DateTime(2014, 05, 27, 1, 0, 0), createdContact.Date);
            Assert.AreEqual("Event", createdContact.LeadType);
            Assert.AreEqual(1, createdContact.ClientId);
        }
        public void DontCreateLeadForEventsWithSameDateAndTimeWithLeadInDatabase()
        {
            var clientRepositoryMoq   = new LocalRepository <Client>();
            var contactRepositoryMoq  = new LocalRepository <Contact>();
            var contactProductService = new Mock <IProductService>();
            var contactAutoRating     = new Mock <IContactAutoRating>();
            var serverTime            = new Mock <IServerTime>();
            var actionProperty        = new ContactProperty()
            {
                ContactId = 1,
                Type      = "Action",
                Value     = "Test Action"
            };
            var lableProperty = new ContactProperty()
            {
                ContactId = 1,
                Type      = "Label",
                Value     = "Test Lable"
            };

            var leadEntry1 = new Contact()
            {
                Id       = 1,
                ClientId = 1,
                LeadType = "Event",
                Date     = new DateTime(2014, 01, 01, 00, 00, 00)
            };

            leadEntry1.Property.Add(actionProperty);
            leadEntry1.Property.Add(lableProperty);
            contactRepositoryMoq.Add(leadEntry1);

            var gaService = new Mock <IGoogleAnalyticsApi>();

            var dataEntries = new List <EventAnalyticData>();
            var dataEntry1  = new EventAnalyticData();

            dataEntry1.NumberOfUniqueEvents = 1;
            dataEntry1.RatingValue          = 1;
            dataEntry1.EventAction          = "Test Action";
            dataEntry1.EventLabel           = "Test Lable";
            dataEntry1.EventSearchPhrase    = "Some Search Phrase";
            dataEntry1.EventSourceMedium    = "Source/Medium";
            dataEntry1.EventCampaign        = "Campaign";
            dataEntry1.EventDateHour        = "2014010101"; //==>anothe time zone
            dataEntry1.EventMinute          = "00";
            dataEntries.Add(dataEntry1);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 01, 03);
            var client    = new Client()
            {
                Id = 1, IsActive = true, AnalyticsTableId = "ga:123456"
            };

            clientRepositoryMoq.Add(client);

            serverTime.Setup(st => st.ParseToServerTimeZoneFromStandardUser("20140101 01:00:00", "yyyyMMdd HH:mm:ss"))
            .Returns(leadEntry1.Date);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:eventAction", "ga:eventLabel", "ga:keyword", "ga:sourceMedium", "ga:dateHour", "ga:minute", "ga:campaign");
            analyticQuery.TabelId   = clientRepositoryMoq.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:uniqueEvents", "ga:eventValue");
            analyticQuery.Filters.Add("ga:eventCategory==Helloy Event");

            gaService.Setup(
                ga =>
                ga.Get <EventAnalyticData>(It.Is <AnalyticQuery>(
                                               aq =>
                                               !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                               !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                               !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                               aq.StartDate == analyticQuery.StartDate &&
                                               aq.EndDate == analyticQuery.EndDate &&
                                               aq.TabelId == analyticQuery.TabelId))).Returns(dataEntries);

            var customEventsExtractor = new CustomEventsExtractor(
                clientRepositoryMoq,
                contactRepositoryMoq,
                serverTime.Object,
                contactProductService.Object,
                contactAutoRating.Object,
                gaService.Object);


            customEventsExtractor.ImportEvents(client.Id, startDate, endDate);

            Assert.AreEqual(contactRepositoryMoq.All().Count(), 1);
        }
Пример #15
0
        public void CanGetKeywordsForSearch()
        {
            var gaService              = new Mock <IGoogleAnalyticsApi>();
            var clientRepository       = RepositoryHelper.RepositoryLocalWithOneClient;
            var clientInRepository     = clientRepository.All().First();
            var contactProductService  = new Mock <IProductService>();
            var userManager            = new Mock <IIdentityMembershipProvider>();
            var contactIndexCalculator = new Mock <IContactIndexCalculator>();

            var startDate = new DateTime(2013, 1, 1);
            var endDate   = new DateTime(2013, 1, 3);

            var mapRowResponse = new List <SearchDetailsRow>();

            var row1 = new SearchDetailsRow
            {
                Keyword     = "Keyword1",
                AdClicks    = 10,
                AdCost      = 20,
                NumVisitors = 40,
            };

            var row2 = new SearchDetailsRow
            {
                Keyword           = "Keyword2",
                AdClicks          = 11,
                AdCost            = 21,
                Impressions       = 31,
                ContactCollection = new ContactCollection("Keyword2", 21, 31, new List <Contact>())
                {
                    IndexValue = 0.5m
                }
            };

            var contact1 = new Contact()
            {
                Date         = startDate.AddDays(1),
                SearchPhrase = "Keyword1"
            };
            var contact2 = new Contact()
            {
                Date         = startDate.AddDays(1),
                SearchPhrase = "Keyword2"
            };
            var contactNotInRange = new Contact()
            {
                Date         = endDate.AddDays(1),
                SearchPhrase = "Keyword1"
            };

            clientRepository.All().First().Leads.Add(contact1);
            clientRepository.All().First().Leads.Add(contact2);
            clientRepository.All().First().Leads.Add(contactNotInRange);

            mapRowResponse.Add(row1);
            mapRowResponse.Add(row2);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.Add("ga:keyword");
            analyticQuery.TabelId   = clientRepository.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.AddMany("ga:adClicks", "ga:adCost", "ga:impressions");
            analyticQuery.Filters.AddMany("ga:campaign!~(display)|(retargeting)|(Display)|(Retargeting)|(remarketing)|(Remarketing)", "ga:medium==cpc");

            gaService.Setup(
                ga =>
                ga.Get <SearchDetailsRow>(It.Is <AnalyticQuery>(
                                              aq =>
                                              !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                              !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                              !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                              aq.StartDate == analyticQuery.StartDate &&
                                              aq.EndDate == analyticQuery.EndDate &&
                                              aq.TabelId == analyticQuery.TabelId))).Returns(mapRowResponse);


            var controller = new SourceController(clientRepository,
                                                  contactProductService.Object,
                                                  userManager.Object,
                                                  gaService.Object,
                                                  contactIndexCalculator.Object);

            contactIndexCalculator.Setup(ic => ic.SetIndexValues(It.IsAny <IEnumerable <ContactCollection> >())).Callback(
                (IEnumerable <ContactCollection> contactColletions) =>
            {
                foreach (var contactCollection in contactColletions)
                {
                    if (contactCollection.Id == "Keyword1")
                    {
                        contactCollection.IndexValue = 1.0m;
                    }
                    else
                    {
                        contactCollection.IndexValue = 0.5m;
                    }
                }
            });

            var result = controller.GetSearchKeywords(clientInRepository.Id, startDate,
                                                      endDate) as OkNegotiatedContentResult <IOrderedEnumerable <SearchDetailsRow> >;


            Assert.AreEqual(2, result.Content.Count());

            Assert.AreEqual(10, result.Content.Single(kw => kw.Name == "Keyword1").AdClicks);
            Assert.AreEqual(20, result.Content.Single(kw => kw.Name == "Keyword1").AdCost);
            Assert.AreEqual(null, result.Content.Single(kw => kw.Name == "Keyword1").Impressions);
            Assert.AreEqual(40, result.Content.Single(kw => kw.Name == "Keyword1").NumVisitors);
            Assert.AreEqual(1, result.Content.Single(kw => kw.Name == "Keyword1").NumContacts);

            Assert.AreEqual(11, result.Content.Single(kw => kw.Name == "Keyword2").AdClicks);
            Assert.AreEqual(21, result.Content.Single(kw => kw.Name == "Keyword2").AdCost);
            Assert.AreEqual(31, result.Content.Single(kw => kw.Name == "Keyword2").Impressions);
            Assert.AreEqual(1, result.Content.Single(kw => kw.Name == "Keyword2").NumContacts);
        }
Пример #16
0
        public IHttpActionResult GetCampaignsDetail(int clientId, DateTime startDate, DateTime endDate)
        {
            if (userManager.IsInRole(User.Identity.GetUserId(), "demo"))
            {
                var demoCampaigns = new List <CampaignDetails>();
                var random        = new Random(DateTime.Now.Second);

                demoCampaigns.Add(new CampaignDetails()
                {
                    Campaign          = "Kampanj",
                    AdClicksMetric    = random.Next(0, 1000),
                    AdCost            = random.NextDouble() * 10000,
                    SourceMedium      = "google/cpc",
                    Impressions       = random.Next(0, 10000),
                    Product           = "Search",
                    NumContacts       = random.Next(0, 200),
                    ContactCollection = new ContactCollection("Sökord 1", 0, 0, new List <Contact>())
                    {
                        IndexValue = 1
                    }
                });

                demoCampaigns.Add(new CampaignDetails()
                {
                    Campaign          = "Kampanj",
                    AdClicksMetric    = random.Next(0, 500),
                    AdCost            = random.NextDouble() * 3000,
                    Impressions       = random.Next(0, 10000),
                    SourceMedium      = "Bing/cpc",
                    Product           = "Search",
                    NumContacts       = random.Next(0, 50),
                    ContactCollection = new ContactCollection("Sökord 1", 0, 0, new List <Contact>())
                    {
                        IndexValue = 0.7m
                    }
                });

                demoCampaigns.Add(new CampaignDetails()
                {
                    Campaign          = "Kampanj Retargeting",
                    AdClicksMetric    = random.Next(0, 500),
                    AdCost            = random.NextDouble() * 1000,
                    Impressions       = random.Next(0, 10000),
                    SourceMedium      = "Adroll/cpc",
                    Product           = "Retargeting",
                    NumContacts       = random.Next(0, 50),
                    ContactCollection = new ContactCollection("Sökord 1", 0, 0, new List <Contact>())
                    {
                        IndexValue = 0.6m
                    }
                });

                return(Ok(demoCampaigns));
            }

            var client  = clienRepository.Where(c => c.Id == clientId).Single();
            var tableId = client.AnalyticsTableId;

            var query = new AnalyticQuery
            {
                TabelId   = tableId,
                StartDate = startDate,
                EndDate   = endDate,
            };

            query.Metrics.AddMany("ga:adClicks", "ga:adCost", "ga:impressions", "ga:sessions");
            query.Dimenssions.AddMany("ga:sourceMedium", "ga:campaign");
            query.MaxResults = 50;
            query.Filters.AddMany("ga:campaign!=(not set)");
            query.Sort = "-ga:adCost";

            var campaignFeed = gaService.Get <CampaignDetails>(query);

            var campaigns = new List <CampaignDetails>();

            foreach (var campaignDetails in campaignFeed)
            {
                var row = campaignDetails;
                var contactsForCampaign =
                    client.Leads.Where(
                        c => c.Campaign != null && c.Campaign.Equals(row.Campaign) &&
                        c.Date >= startDate && c.Date <= endDate);

                var cost   = row.AdCost.HasValue ? (decimal)row.AdCost : 0m;
                var clicks = row.AdClicks.HasValue ? (int)row.AdClicks : 0;
                campaignDetails.ContactCollection = new ContactCollection(campaignDetails.Campaign, cost, clicks, contactsForCampaign.ToList());
                campaignDetails.NumContacts       = contactsForCampaign.Count();

                if (!contactProductService.IsValidProduct(campaignDetails.Campaign, campaignDetails.Medium))
                {
                    continue;
                }

                campaignDetails.Product = contactProductService.GetProduct(campaignDetails.Campaign, campaignDetails.Medium);

                if (campaignDetails.AdClicks.HasValue && campaignDetails.AdClicks.Value > 0 &&
                    !string.IsNullOrEmpty(campaignDetails.Product))
                {
                    campaigns.Add(campaignDetails);
                }
            }

            if (campaigns.Any())
            {
                contactIndexCalculator.SetIndexValues(campaigns.Select(k => k.ContactCollection));
            }
            return(Ok(campaigns.OrderByDescending(c => c.ContactCollection.IndexValue).ToEnumerable()));
        }
Пример #17
0
        public void CanGetVisitorsYearly()
        {
            var clientRepository = RepositoryHelper.RepositoryLocalWithOneClient;
            var gaService        = new Mock <IGoogleAnalyticsApi>();

            var userManager           = new Mock <IIdentityMembershipProvider>();
            var contactProductService = new Mock <IProductService>();

            var contactIndexCalculator = new Mock <IContactIndexCalculator>();
            var controller             = new SourceController(clientRepository,
                                                              contactProductService.Object,
                                                              userManager.Object,
                                                              gaService.Object,
                                                              contactIndexCalculator.Object);

            var startDate = new DateTime(2012, 1, 1);
            var endDate   = new DateTime(2014, 1, 1);

            var mapRowResponse = new List <VisitorsOverTimeGaData>();
            var row1           = new VisitorsOverTimeGaData
            {
                Date     = "2014",
                Visitors = 100
            };

            var row2 = new VisitorsOverTimeGaData
            {
                Date     = "2013",
                Visitors = 170
            };

            var row3 = new VisitorsOverTimeGaData
            {
                Date     = "2012",
                Visitors = 70
            };

            mapRowResponse.Add(row1);
            mapRowResponse.Add(row2);
            mapRowResponse.Add(row3);

            var analyticQuery = new AnalyticQuery();

            analyticQuery.Dimenssions.AddMany("ga:year");
            analyticQuery.TabelId   = clientRepository.All().First().AnalyticsTableId;
            analyticQuery.StartDate = startDate;
            analyticQuery.EndDate   = endDate;
            analyticQuery.Metrics.Add("ga:visitors");

            gaService.Setup(
                ga =>
                ga.Get <VisitorsOverTimeGaData>(It.Is <AnalyticQuery>(
                                                    aq =>
                                                    !aq.Dimenssions.Except(analyticQuery.Dimenssions).Any() &&
                                                    !aq.Metrics.Except(analyticQuery.Metrics).Any() &&
                                                    !aq.Filters.Except(analyticQuery.Filters).Any() &&
                                                    aq.StartDate == analyticQuery.StartDate &&
                                                    aq.EndDate == analyticQuery.EndDate &&
                                                    aq.TabelId == analyticQuery.TabelId))).Returns(mapRowResponse);

            var result =
                controller.GetVisitorsOverTime(1, startDate, endDate, "Yearly")
                as OkNegotiatedContentResult <List <VisitorStats> >;

            Assert.AreEqual(3, result.Content.Count());

            Assert.AreEqual(70, result.Content.Single(r => r.date == startDate).visitors);

            Assert.AreEqual(170, result.Content.Single(r => r.date == startDate.AddYears(1)).visitors);

            Assert.AreEqual(100, result.Content.Single(r => r.date == endDate).visitors);
        }
Пример #18
0
        public IHttpActionResult GetVisitorsOverTime(int clientId, DateTime startDate, DateTime endDate, string aggregateType)
        {
            var    tableId         = clienRepository.Where(c => c.Id == clientId).Single().AnalyticsTableId;
            string dimentions      = "";
            var    aggregateFormat = "";

            if (aggregateType == "Daily")
            {
                dimentions      = "ga:date";
                aggregateFormat = "yyyyMMdd";
            }
            else if (aggregateType == "Monthly")
            {
                dimentions      = "ga:yearmonth";
                aggregateFormat = "yyyyMM";
            }
            else if (aggregateType == "Yearly")
            {
                dimentions      = "ga:year";
                aggregateFormat = "yyyy";
            }

            var query = new AnalyticQuery
            {
                TabelId   = tableId,
                StartDate = startDate,
                EndDate   = endDate,
            };

            query.Metrics.AddMany("ga:visitors");
            query.Dimenssions.AddMany(dimentions);

            var response = gaService.Get <VisitorsOverTimeGaData>(query);

            var sourceByDay = response
                              .Select(row => new VisitorStats
            {
                date     = DateTime.ParseExact(row.AggregationDate, aggregateFormat, CultureInfo.InvariantCulture),
                visitors = row.Visitors
            })
                              .ToList();

            if (userManager.IsInRole(User.Identity.GetUserId(), "demo"))
            {
                var r = new Random();
                sourceByDay = response
                              .Select(dataEntry => new VisitorStats
                {
                    date     = DateTime.ParseExact(dataEntry.AggregationDate, aggregateFormat, CultureInfo.InvariantCulture),
                    visitors = r.Next(0, 100)
                })
                              .ToList();
            }

            if (sourceByDay.Any())
            {
                return(Ok(sourceByDay));
            }
            else
            {
                return(NotFound());
            }
        }
Пример #19
0
 /// <summary>
 /// Queries offsets and values in time-series data for a specified flight and analytic.
 /// </summary>
 /// <param name="emsSystem">
 /// The unique identifier of the EMS system.
 /// </param>
 /// <param name="flightId">
 /// The integer ID of the flight record for which to query data.
 /// </param>
 /// <param name="query">
 /// The information used to construct a query for which results are returned.
 /// </param>
 public virtual QueryResult QueryResults(int flightId, AnalyticQuery query, int emsSystem = NoEmsServerSpecified)
 {
     return(AccessTaskResult(QueryResultsAsync(flightId, query, emsSystem)));
 }
Пример #20
0
        public ActionResult Report(int clientId, DateTime startDate, DateTime endDate)
        {
            var client = clientRepository.First(c => c.Id == clientId);
            var clientViewModel = new ClientViewModel(client);
            var model = new CcoReportViewModel(userManager.GetRoles(User.Identity.GetUserId()), clientViewModel);

            model.Today = serverTime.RequestStarted;
            model.OnMonth = model.Today.AddMonths(-1);
            model.OneQuarter = model.Today.AddMonths(-3);
            model.OneYear = model.Today.AddMonths(-12);
            model.StartDate = startDate;
            model.EndDate = endDate;

            var tableId = client.AnalyticsTableId;

            var query = new AnalyticQuery
            {
                TabelId = tableId,
                StartDate = startDate,
                EndDate = endDate,
            };

            query.Metrics.AddMany("ga:adClicks", "ga:adCost");
            query.Dimenssions.AddMany("ga:keyword");
            query.MaxResults = 500;
            query.Filters.AddMany("ga:campaign!~Retargeting", "ga:campaign!~Remarketing", "ga:campaign!~Display");
            query.Sort = "-ga:adCost";
            var keywordRows = gaService.Get<KeyWordReport>(query);

            var keywordFinder = new Dictionary<string, KeyWordReport>();
            keywordRows.ForEach(k =>
            {
                model.KeyWords.Add(k);
                keywordFinder.Add(k.Keyword, k);
            });

            var searchPhrasesLeads = SearchPhrasesLeads(clientId, startDate, endDate);
            foreach (var searchPhraseLead in searchPhrasesLeads)
            {
                if (!string.IsNullOrEmpty(searchPhraseLead) && keywordFinder.ContainsKey(searchPhraseLead))
                {
                    keywordFinder[searchPhraseLead].NumLead = keywordFinder[searchPhraseLead].NumLead + 1;
                }
            }

            var searchPhrasesNotLeads = SearchPhrasesNotLeads(clientId, startDate, endDate);
            foreach (var searchPhraseNotLead in searchPhrasesNotLeads)
            {
                if (!string.IsNullOrEmpty(searchPhraseNotLead) && keywordFinder.ContainsKey(searchPhraseNotLead))
                {
                    keywordFinder[searchPhraseNotLead].NumNotALead = keywordFinder[searchPhraseNotLead].NumNotALead + 1;
                }
            }

            var searchPhrasesContacts = SearchPhrasesContacts(clientId, startDate, endDate);
            foreach (var searchPhraseContact in searchPhrasesContacts)
            {
                if (!string.IsNullOrEmpty(searchPhraseContact) && keywordFinder.ContainsKey(searchPhraseContact))
                {
                    keywordFinder[searchPhraseContact].Contacts = keywordFinder[searchPhraseContact].Contacts + 1;
                }
            }

            return View(model);
        }