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); }
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); }
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; } }