Beispiel #1
0
 public void Add(string className, string functionName, string message, LogStat stat)
 {
     mLock.EnterWriteLock();
     try
     {
         mStream.WriteLine($"{ERRORS_NAME[(int)stat]}  |  {DateTime.Now.ToString()}  |  {className}  |  {functionName}  |  {message}");
     }
     finally
     {
         mLock.ExitWriteLock();
     }
 }
Beispiel #2
0
        public StatLogger StatMoveToFirst(int index, string name)
        {
#if !NO_PEGI
            lock (executionOrder)
            {
                if (loopLock.Unlocked)
                {
                    using (loopLock.Lock())
                    {
                        processedStat = allStats[index];

                        if (!processedStat.addedToList)
                        {
                            Create(index, name);
                        }
                        else
                        {
                            if (executionOrder.Contains(processedStat))
                            {
                                int ind = executionOrder.IndexOf(processedStat);
                                if (ind > 0)
                                {
                                    if (ind >= executionOrder.Count)
                                    {
                                        Debug.Log("Debug element is " + ind + " while length is " + executionOrder.Count);
                                    }
                                    else
                                    {
                                        executionOrder.Move(ind, 0);
                                    }
                                }
                            }
                            else
                            {
                                Debug.Log("List doesn't contain elemnt " + name);
                            }
                        }

                        if (processedStat.outputToLog)
                        {
                            Debug.Log(processedStat.ToPEGIstring());
                        }
                    }
                }
            }
#endif
            return(this);
        }
Beispiel #3
0
        public StatLogger Get(int index, string name)
        {
#if !NO_PEGI
            if (loopLock.Unlocked)
            {
                using (loopLock.Lock())
                {
                    processedStat = allStats[index];

                    if (!processedStat.addedToList)
                    {
                        Create(index, name);
                    }
                }
            }
#endif
            return(this);
        }
Beispiel #4
0
        /// <summary>
        /// 前端代理处理程序,收和发
        /// </summary>
        /// <param name="context">http上下文</param>
        /// <returns>结果,不会抛出异常</returns>
        public static Result <object> Send(HttpContext context)
        {
            // 构造一个统计日志
            var mainLog = new LogStat()
            {
                BusinessType = "http.Proxy"
            };

            mainLog.SetInfo(context);
            var           content = string.Empty;
            Args <object> a       = null;

            try
            {
                content = GetRequestValue(context.Request);
                var isUdf = IsController(context);
                if (isUdf)
                {
                    ApiArgs apiArgs = new ApiArgs {
                        Headers = new Dictionary <string, string>(), Params = new Dictionary <string, string>()
                    };
                    foreach (var h in context.Request.Headers)
                    {
                        apiArgs.Headers.Add(h.Key, h.Value);
                    }
                    foreach (var p in context.Request.Query)
                    {
                        apiArgs.Params[p.Key] = p.Value;
                    }
                    apiArgs.Body = content;
                    a            = new Args <object> {
                        v = apiArgs, ct = ClientType.ThirdPart.ToString()
                    };
                }
                else
                {
                    a = JsonConvert.DeserializeObject <Args <object> >(content, jSetting);
                }

                a.Headers = GetRequestIp(context);
                if (string.IsNullOrEmpty(a.rid))
                {
                    // 提前端产生一个rid
                    a.rid = Guid.NewGuid().ToString("N");
                }

                var    rtn  = RpcClientManager.Send(a, context.Request.Path);
                string body = rtn.c;
                if (isUdf)
                {
                    if (rtn.r.v != null && !string.IsNullOrEmpty(rtn.r.v.ToString()))
                    {
                        var apiRst = JsonConvert.DeserializeObject <ApiResult>(rtn.r.v.ToString());
                        if (apiRst != null)
                        {
                            body = apiRst.Body;
                            context.Response.StatusCode = (int)apiRst.Code;
                            if (context.Response.StatusCode < 1)
                            {
                                context.Response.StatusCode = 200;
                            }
                            if (!string.IsNullOrEmpty(apiRst.ContentType))
                            {
                                context.Response.ContentType = apiRst.ContentType;
                            }
                        }
                    }
                }
                using (var strStream = new StreamWriter(context.Response.Body))
                {
                    strStream.Write(body);
                    strStream.Flush();
                    strStream.Close();
                }

                mainLog.SetInfo(a, rtn.r);
                logger.LogInformation(new EventId(0, a.rid), mainLog.ToString());
                return(rtn.r);
            }
            catch (Exception e)
            {
                Result <object> rr = new Result <object>()
                {
                    c   = 500,
                    msg = e.Message,
                };
                // 处理返回值中的rid,解析请求内容获取rid
                if (!string.IsNullOrEmpty(content))
                {
                    try
                    {
                        a = JsonConvert.DeserializeObject <Args <object> >(content);
                        if (!string.IsNullOrEmpty(a.rid))
                        {
                            rr.rid = a.rid;
                        }
                    }
                    catch
                    {
                        //反序列化请求内容异常
                    }
                }
                //如果未获取到原始请求rid,则重新生成
                if (string.IsNullOrEmpty(rr.rid))
                {
                    rr.rid = Guid.NewGuid().ToString("N");
                }

                var jSetting = new JsonSerializerSettings {
                    NullValueHandling = NullValueHandling.Ignore
                };
                jSetting.DateFormatString = "yyyy-MM-dd HH:mm:ss";

                var rst = JsonConvert.SerializeObject(rr, jSetting);
                using (var strStream = new StreamWriter(context.Response.Body))
                {
                    strStream.Write(rst);
                    strStream.Flush();
                    strStream.Close();
                }
                logger.LogError(new EventId(0, rr.rid), e, $"GrantHttpProxy.Send.Error");
                mainLog.SetInfo(null, rr, e);
                logger.LogInformation(new EventId(0, rr.rid), mainLog.ToString());
                return(rr);
            }
        }
Beispiel #5
0
        /// <summary>
        /// 前端代理处理程序,收和发
        /// </summary>
        /// <param name="context">http上下文</param>
        /// <returns>结果,不会抛出异常</returns>
        public static Result <object> Send(HttpContext context)
        {
            // 构造一个统计日志
            var mainLog = new LogStat()
            {
                BusinessType = "http.Proxy"
            };

            mainLog.SetInfo(context);
            var content = string.Empty;

            try
            {
                content = GetRequestValue(context.Request);
                Args <object> a = JsonConvert.DeserializeObject <Args <object> >(content, jSetting);
                a.Headers = GetRequestIp(context);
                if (string.IsNullOrEmpty(a.rid))
                {
                    // 提前端产生一个rid
                    a.rid = Guid.NewGuid().ToString("N");
                }

                var rtn = GrantRpcClientManager.Send(a, context.Request.Path);

                using (var strStream = new StreamWriter(context.Response.Body))
                {
                    strStream.Write(rtn.c);
                    strStream.Flush();
                    strStream.Close();
                }

                mainLog.SetInfo(a, rtn.r);
                logger.LogInformation(new EventId(0, a.rid), mainLog.ToString());
                return(rtn.r);
            }
            catch (Exception e)
            {
                Result <object> rr = new Result <object>()
                {
                    c   = 500,
                    msg = e.Message,
                };
                // 处理返回值中的rid,解析请求内容获取rid
                if (!string.IsNullOrEmpty(content))
                {
                    try
                    {
                        Args <object> a = JsonConvert.DeserializeObject <Args <object> >(content);
                        if (!string.IsNullOrEmpty(a.rid))
                        {
                            rr.rid = a.rid;
                        }
                    }
                    catch
                    {
                        //反序列化请求内容异常
                    }
                }
                //如果未获取到原始请求rid,则重新生成
                if (string.IsNullOrEmpty(rr.rid))
                {
                    rr.rid = Guid.NewGuid().ToString("N");
                }

                var jSetting = new JsonSerializerSettings {
                    NullValueHandling = NullValueHandling.Ignore
                };
                jSetting.DateFormatString = "yyyy-MM-dd HH:mm:ss";

                var rst = JsonConvert.SerializeObject(rr, jSetting);
                using (var strStream = new StreamWriter(context.Response.Body))
                {
                    strStream.Write(rst);
                    strStream.Flush();
                    strStream.Close();
                }
                logger.LogError(new EventId(0, rr.rid), e, $"GrantHttpProxy.Send.Error");
                mainLog.SetInfo(null, rr, e);
                logger.LogInformation(new EventId(0, rr.rid), mainLog.ToString());
                return(rr);
            }
        }