Exemple #1
0
 /// <summary>
 /// 结束会话跟踪
 /// </summary>
 /// <param name="traceContext">跟踪上下文</param>
 public static void EndSpan(UrlTraceContext traceContext)
 {
     try
     {
         if (traceContext.TraceSpan != null)
             traceContext.TraceSpan.Stop();
     }
     catch
     { }
 }
        /// <summary>
        /// 创建新的实例
        /// </summary>
        /// <returns></returns>
        public static UrlTraceContext Create()
        {
            var context = new UrlTraceContext();

            //跟踪开始时间
            context.StartTime = DateTime.Now;
            HttpContext.Current.Items.Add(cacheKey, context);

            return context;
        }
Exemple #3
0
        /// <summary>
        /// 开始会话跟踪
        /// </summary>
        /// <param name="traceContext">跟踪上下文</param>
        public static void StartSpan(UrlTraceContext traceContext)
        {
            ISpan span = null;
            long traceId, spanId;

            try
            {
                tracer.Clear();

                var request = HttpContext.Current.Request;
                if (long.TryParse(request.Headers["Tracing-TraceId"], out traceId) && long.TryParse(request.Headers["Tracing-SpanId"], out spanId))
                    span = tracer.ContinueSpan("HttpRequest", typeof(UrlTraceLogger).FullName, traceId, spanId, GetSpanType(request)); //延续现有跟踪
                else
                    span = tracer.StartSpan("HttpRequest", typeof(UrlTraceLogger).FullName, GetSpanType(request)); //开始新的跟踪

                //将TraceId存放起来供后续其他处理逻辑使用,例如写入Html<meta>标签等
                HttpContext.Current.Items.Add(AppConst.CloggingTraceIdKey, span.TraceId);
                traceContext.TraceSpan = span;
            }
            catch
            {}
        }
Exemple #4
0
        /// <summary>
        /// 记录
        /// </summary>
        /// <param name="traceContext">跟踪上下文</param>
        public static void Log(UrlTraceContext traceContext)
        {
            if (traceContext.TraceSpan == null || traceContext.TraceInfo == null)
                return;

            //写入Trace信息
            WriteTraceInfo(traceContext.TraceInfo);
            //写入component
            UrlTracerContain.AddUrlTrace(traceContext.TraceInfo);
            //写入Metric信息
            WriteMetricInfo(traceContext.TraceInfo);
        }
        /// <summary>
        /// 结束收集
        /// </summary>
        /// <param name="traceContext">跟踪上下文</param>
        public static void EndColloct(UrlTraceContext traceContext)
        {
            if (traceContext.TraceSpan == null || traceContext.TraceInfo == null)
                return;

            var traceInfo = traceContext.TraceInfo;

            try
            {
                //请求文件的虚拟路径
                traceInfo.FilePath = GetFilePath();

                if (traceInfo.TraceItems.ResponseStatus)
                    traceInfo.ResponseStatus = (int)HttpContext.Current.Response.StatusCode;

                if (traceInfo.TraceItems.RequestCost)
                    traceInfo.RequestCost = DateTime.Now.Subtract(traceContext.StartTime).TotalMilliseconds;
            }
            catch
            { }
        }
        /// <summary>
        /// 开始收集
        /// </summary>
        /// <param name="traceContext">跟踪上下文</param>
        public static void StartCollect(UrlTraceContext traceContext)
        {
            if (traceContext.TraceSpan == null)
                return;

            var request = HttpContext.Current.Request;
            var response = HttpContext.Current.Response;

            UrlTraceInfo traceInfo = new UrlTraceInfo();

            try
            {
                traceInfo.TraceItems = (UrlTraceItems)ConfigHelper.UrlTraceItems.Clone();
                traceInfo.HostAddress = request.ServerVariables["Server_Name"].ToLower(); //主机域名或IP

                //请求的目标服务方法
                if (traceContext.TraceSpan.SpanType == SpanType.WEB_SERVICE && traceInfo.TraceItems.WSRequestInfo)
                {
                    string requestType = request.Headers["Tracing-RequestType"];
                    if (requestType != null)
                    {
                        traceInfo.RequestType = requestType;
                    }
                    else
                    {
                        requestType = request.Headers["SOAPAction"];
                        if (requestType != null)
                        {
                            Match match = Regex.Match(requestType, "/?([^\"/]*)\"$", RegexOptions.Compiled);
                            if (match.Success && match.Groups.Count > 1)
                                traceInfo.RequestType = match.Groups[1].Value;
                        }
                    }

                    traceInfo.ClientAppId = request.Headers["ClientAppId"];
                }

                //请求内容大小
                if (traceInfo.TraceItems.RequestSize)
                {
                    long value;
                    if (long.TryParse(request.Headers["Content-Length"], out value))
                        traceInfo.RequestSize = value;
                }

                if (traceInfo.TraceItems.RawUrl)
                {
                    traceInfo.RawUrl = request.RawUrl;
                    traceInfo.HttpMethod = request.HttpMethod;
                }

                if (traceInfo.TraceItems.ResponseSize)
                    response.Filter = new ResponseFilter(response.Filter, traceInfo); //响应内容大小

                if (traceInfo.TraceItems.ClientIP)
                    traceInfo.ClientIP = IPHelper.GetClientIP(); //客户端IP

                traceContext.TraceInfo = traceInfo;
            }
            catch
            { }
        }