public TcpDbContext AddToContext(TcpDbContext context, LlcTlliSessionStagingDocument entity, int count, int commitCount, bool recreateContext, string sqlconn) { context.Set<LlcTlliSessionStagingDocument>().Add(entity); return AddToContextCon(context, count, commitCount, recreateContext, sqlconn); }
public void CreateTable(string direction, IEnumerable<Gb_LLC_ReTransmission> gb_llc_retrans, int filenum) { //int packet_cnt = gb_llc_retrans.Select(e => e.BeginFrameNum).Distinct().Count(); int? packet_cnt = gb_llc_retrans.Max(e => e.BeginFrameNum); int step = (int)packet_cnt / size + 1; for (int i = 0; i < step; i++) { var tlli_session = gb_llc_retrans.Where(e => e.BeginFrameNum >= i * size && e.BeginFrameNum < (i + 1) * size); var tlli_sessions = tlli_session.ToLookup(e => e.BeginFrameNum); //tcp的会话过程 foreach (var m in tlli_sessions) { #region 会话过滤,filter var gb_packet = m.Where(e => e.bssgp_direction == direction); var pd_llc = gb_packet.Where(e => e.llcgprs_nu != null);//不包含nu编号的包 if (pd_llc.Count() == 0) continue; #endregion LlcTlliSessionStagingDocument llcs = new LlcTlliSessionStagingDocument(); #region tcp会话的基础信息,callid/imsi/lac/cell/bvci/duration/ llcs._id = GenerateId(); llcs.session_id = filenum.ToString() + "-" + m.Key.Value.ToString(); llcs.direction = direction; llcs.imsi = m.Where(e => e.bssgp_imsi != null).Select(e => e.bssgp_imsi).FirstOrDefault(); var src = m.Select(e => e.ip_src_host); var dst = m.Select(e => e.ip_dst_host); var bscip = src.Union(dst); llcs.mscbsc_ip_aggre = string.Join(",", bscip.Distinct()); llcs.mscbsc_ip_count = bscip.Distinct().Count(); //还需要1个?留意ip的问题? llcs.bsc_bvci = m.Where(e => e.nsip_bvci != null).Select(e => Convert.ToString(e.nsip_bvci)).Distinct().Aggregate((a, b) => a + "," + b); llcs.lac_ci = m.Where(e => e.bssgp_lac != null).Count() == 0 ? "" : m.Where(e => e.bssgp_lac != null).Select(e => Convert.ToString(e.bssgp_lac) + "-" + Convert.ToString(e.bssgp_ci)).Distinct().Aggregate((a, b) => a + "," + b); //下行时延,包含3次握手,取这次会话的总长度吧。 TimeSpan? ts = m.Max(e => DateTime.Parse(e.LLC_time)) - pd_llc.Min(e => DateTime.Parse(e.LLC_time)); llcs.duration = ts.Value.TotalMilliseconds; #endregion #region 计算llc是否连续及llc_nu的数量 var nu = pd_llc.OrderBy(e => e.FileNum).ThenBy(e => e.PacketNum).Select(e => e.llcgprs_nu); llcs.llc_nu_count = nu.Count(); llcs.llc_nu_aggre = nu.Select(e => Convert.ToString(e)).Aggregate((a, b) => a + "," + b); Int16 continu = 0; for (int j = 0; j < nu.Count() - 2; j++) { if (nu.ElementAt(j + 1) - nu.ElementAt(j) != 1) if (nu.ElementAt(j + 1) - nu.ElementAt(j) != 0 - 511) { continu = 1; break; } } llcs.llc_nu_discard = continu; #endregion llcs.msg_aggre = pd_llc.Select(e => e.LLC_MsgType).Distinct().Aggregate((a, b) => a + "," + b); llcs.msg_distinct_count = pd_llc.Select(e => e.LLC_MsgType).Distinct().Count(); mongo_LlcTlliSessionStaging.MongoCol.Insert(llcs); } } string mess = string.Format("OK...direction...{0}...size:{1}...step:{2}...cnt:{3}", direction, size, step, packet_cnt); Console.WriteLine(mess); }