public async Task CountAsync(DomainTrackingStat trackingUrl) { TrackingStatEntity entity = _mapper.Map <DomainTrackingStat, TrackingStatEntity>(trackingUrl); entity.Date = DateTime.UtcNow; // Counting url redirect await _trackingStatRepository.AddAsync(entity); }
public void Intercept(IInvocation invocation) { // Calls the decorated instance. invocation.Proceed(); if (invocation.GetConcreteMethod().Name == NameOfHelper.MethodName <IUrlTrackingService>(x => x.TrackAsync(null))) { // TrackAsync called var trackTask = (Task <UrlTrackingResult>)invocation.ReturnValue; // Filtering bots if (HttpContext.Current != null) { string userAgent = HttpContext.Current.Request.UserAgent; if (!string.IsNullOrEmpty(userAgent)) { if (_bots.Any(bot => userAgent.IndexOf(bot, StringComparison.InvariantCultureIgnoreCase) >= 0)) { return; } } } // Checking result trackTask.ContinueWith(async t => { UrlTrackingResult trackingResult = t.Result; if (!trackingResult.IsAccountable) { // skip non tariffing redirects return; } try { DomainTrackingStat trackingStat = _mappingEngine.Map <UrlTrackingResult, DomainTrackingStat>(trackingResult); // counting url await _service.CountAsync(trackingStat); } catch (Exception e) { Trace.TraceError(string.Format("Could not count external url '{0}': {1}", trackingResult.Redirect, e)); } }); } }