예제 #1
0
        public void Parse(NginxLog ngingLog)
        {
            try
            {
                var time = ngingLog.Time.ToString("yyyyMMddHH");
                // 有refer且是http开头
                var isFront = (ngingLog.Referer != null &&
                               ngingLog.Referer.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                    ? 1
                    : 0;

                var app = GetUriApp(ngingLog.Request);
                if (!IsKnownApp(app))
                {
                    app = "other";
                }

                var identify = time + '\n' + isFront + '\n' + app;
                lock (groups)
                {
                    groups.TryGetValue(identify, out var num);
                    groups[identify] = num + 1;
                }
            }
            catch (Exception exp)
            {
                logger.Error(ngingLog.Filename + " " + exp);
            }
        }
예제 #2
0
 public void Parse(NginxLog ngingLog)
 {
     try
     {
         nginxLogRepository.Save(ngingLog);
     }
     catch (Exception exp)
     {
         logger.Error(ngingLog.Filename + " " + exp);
     }
 }
예제 #3
0
        private NginxLog ConvertToNginxLog(List <string> arrFields, string fileName)
        {
            var    log = new NginxLog();
            int    tmp;
            double tmpd;

            log.Timelocal  = arrFields[0]; // '时间',
            log.Remoteaddr = arrFields[1]; // 'ip',
            log.Remoteuser = arrFields[2]; // '用户',
            log.Host       = arrFields[3]; // '主机',
            log.Request    = arrFields[4]; // '请求方法和地址',

            int.TryParse(arrFields[5], out tmp);
            log.Status = tmp;                                // '响应状态',
            int.TryParse(arrFields[6], out tmp);
            log.Requestlength = tmp;                         // '请求长度',
            int.TryParse(arrFields[7], out tmp);
            log.Bodybytessent = tmp;                         // '发送长度',
            log.Referer       = arrFields[8];                // 'referer',
            log.Useragent     = arrFields[9];                // 'ua',
            log.Forwardedfor  = arrFields[10];               // '代理ip',
            log.Upstreamaddr  = arrFields[11];               // '后端ip+端口',
            double.TryParse(arrFields[12], out tmpd);
            log.Requesttime = (int)Math.Floor(tmpd * 1000);  // '请求时长',
            double.TryParse(arrFields[13], out tmpd);
            log.Upstreamtime = (int)Math.Floor(tmpd * 1000); // '后端响应时长',
            int.TryParse(arrFields[14], out tmp);
            log.Upstreamstatus = tmp;                        // '后端状态',
            int.TryParse(arrFields[15], out tmp);
            log.Contentlength = tmp;                         // '内容长度',
            int.TryParse(arrFields[16], out tmp);
            log.Httpcontentlength = tmp;                     // 'http内容长',
            int.TryParse(arrFields[17], out tmp);
            log.Sentcontentlength = tmp;                     // '发送内容长',
            log.Filename          = fileName;                // '采集源文件',
            return(log);
        }
예제 #4
0
        public void Parse(NginxLog ngingLog)
        {
            try
            {
                var time    = ngingLog.Time.ToString("yyyyMMddHH");
                var referer = GetUriPattern(ngingLog.Referer);
                if (!referer.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                {
                    referer = "-"; // referer不应该没有http的
                }

                var url      = GetUriPattern(ngingLog.Request);
                var identify = time + '\n' + referer + '\n' + url;
                lock (groups)
                {
                    groups.TryGetValue(identify, out var num);
                    groups[identify] = num + 1;
                }
            }
            catch (Exception exp)
            {
                logger.Error(ngingLog.Filename + " " + exp);
            }
        }