Example #1
0
        public static HttpBrowserCapabilities GetHttpBrowserCapabilities(NameValueCollection headers, string userAgent)
        {
            var factory     = new BrowserCapabilitiesFactory();
            var browserCaps = new HttpBrowserCapabilities();
            var hashtable   = new Hashtable(180, StringComparer.OrdinalIgnoreCase);

            hashtable[string.Empty]  = userAgent;
            browserCaps.Capabilities = hashtable;
            factory.ConfigureBrowserCapabilities(headers, browserCaps);
            factory.ConfigureCustomCapabilities(headers, browserCaps);
            return(browserCaps);
        }
Example #2
0
        public static HttpBrowserCapabilities GetCapabilities()
        {
            var capabilities = new HttpBrowserCapabilities();

            var hashtable = new Hashtable(180, StringComparer.OrdinalIgnoreCase);

            hashtable[string.Empty]   = GetUserAgent();
            capabilities.Capabilities = hashtable;

            var capabilitiesFactory = new BrowserCapabilitiesFactory();
            var headers             = new NameValueCollection();

            capabilitiesFactory.ConfigureBrowserCapabilities(headers, capabilities);
            capabilitiesFactory.ConfigureCustomCapabilities(headers, capabilities);

            return(capabilities);
        }
Example #3
0
        public static void ProcessQueue([QueueTrigger(queueName: Utility.QUEUE)] string request,
                                        [DocumentDB(Utility.URL_TRACKING, Utility.URL_STATS, CreateIfNotExists = true, ConnectionStringSetting = "CosmosDb")] out dynamic doc,
                                        TraceWriter log)
        {
            try
            {
                AnalyticsEntry parsed = Utility.ParseQueuePayload(request);
                var            page   = parsed.LongUrl.AsPage(HttpUtility.ParseQueryString);

                telemetry.TrackPageView(page);
                log.Info($"Tracked page view {page}");

                var analytics = parsed.LongUrl.ExtractCampaignAndMedium(HttpUtility.ParseQueryString);
                var campaign  = analytics.Item1;
                var medium    = analytics.Item2;

                if (!string.IsNullOrWhiteSpace(medium))
                {
                    telemetry.TrackEvent(medium);
                    log.Info($"Tracked custom event: {medium}");
                }

                // cosmos DB
                var normalize = new[] { '/' };
                doc      = new ExpandoObject();
                doc.id   = Guid.NewGuid().ToString();
                doc.page = page.TrimEnd(normalize);
                if (!string.IsNullOrWhiteSpace(parsed.ShortUrl))
                {
                    doc.shortUrl = parsed.ShortUrl;
                }
                if (!string.IsNullOrWhiteSpace(campaign))
                {
                    doc.campaign = campaign;
                }
                if (parsed.Referrer != null)
                {
                    doc.referrerUrl  = parsed.Referrer.AsPage(HttpUtility.ParseQueryString);
                    doc.referrerHost = parsed.Referrer.DnsSafeHost;
                }
                if (!string.IsNullOrWhiteSpace(parsed.Agent))
                {
                    doc.agent = parsed.Agent;
                    try
                    {
                        var capabilities = new HttpBrowserCapabilities()
                        {
                            Capabilities = new Hashtable {
                                { string.Empty, parsed.Agent }
                            }
                        };
                        var factory = new BrowserCapabilitiesFactory();
                        factory.ConfigureBrowserCapabilities(new NameValueCollection(), capabilities);
                        factory.ConfigureCustomCapabilities(new NameValueCollection(), capabilities);
                        if (!string.IsNullOrEmpty(capabilities.Browser))
                        {
                            var browser        = capabilities.Browser;
                            var version        = capabilities.MajorVersion;
                            var browserVersion = $"{browser} {capabilities.MajorVersion}";
                            doc.browser            = browser;
                            doc.browserVersion     = version;
                            doc.browserWithVersion = browserVersion;
                        }
                        if (capabilities.Crawler)
                        {
                            doc.crawler = 1;
                        }
                        if (capabilities.IsMobileDevice)
                        {
                            doc.mobile = 1;
                            var manufacturer = capabilities.MobileDeviceManufacturer;
                            var model        = capabilities.MobileDeviceModel;
                            doc.mobileManufacturer = manufacturer;
                            doc.mobileModel        = model;
                            doc.mobileDevice       = $"{manufacturer} {model}";
                        }
                        else
                        {
                            doc.desktop = 1;
                        }
                        if (!string.IsNullOrWhiteSpace(capabilities.Platform))
                        {
                            doc.platform = capabilities.Platform;
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error($"Error parsing user agent [{parsed.Agent}]", ex);
                    }
                }
                doc.count     = 1;
                doc.timestamp = parsed.TimeStamp;
                doc.host      = parsed.LongUrl.DnsSafeHost;
                if (!string.IsNullOrWhiteSpace(medium))
                {
                    ((IDictionary <string, object>)doc).Add(medium, 1);
                }
                log.Info($"CosmosDB: {doc.id}|{doc.page}|{parsed.ShortUrl}|{campaign}|{medium}");
            }
            catch (Exception ex)
            {
                log.Error("An unexpected error occurred", ex);
                throw;
            }
        }