public void fillRowsAndDataField(ref int index, ref int incomingCallsAmount, ref int outcomingCallsAmount, ref TimeSpan allCallsDuration, ref TimeSpan incomingDuration, ref TimeSpan outcomingDuration, ref int amountUnansweredCalls, CallRecord cr) { index++; DataRow currentRow; currentRow = dt.NewRow(); currentRow[0] = index; currentRow[1] = cr.StationNumber; currentRow[2] = cr.CO; currentRow[3] = cr.Duration; currentRow[4] = cr.Start.ToString(new CultureInfo("he-IL")); currentRow[5] = cr.CallType.ToString(); currentRow[6] = cr.Dialed; currentRow[7] = cr.Cost; currentRow[8] = cr.AccountCode; currentRow[9] = cr.DisconnectCause.ToString(); currentRow[10] = GetGroupName(cr); dt.Rows.Add(currentRow); if (currentRow[5].Equals("Incoming")) { incomingCallsAmount++; incomingDuration = incomingDuration.Add(cr.Duration); } if (currentRow[5].Equals("Transferd")) { incomingCallsAmount++; incomingDuration = incomingDuration.Add(cr.Duration); } if (currentRow[5].Equals("Hold")) { incomingCallsAmount++; incomingDuration = incomingDuration.Add(cr.Duration); } if (currentRow[5].Equals("Unknown")) { incomingCallsAmount++; incomingDuration = incomingDuration.Add(cr.Duration); } if (currentRow[5].Equals("Ring") || currentRow[5].Equals("Group")) { amountUnansweredCalls++; } if (currentRow[5].Equals("Outgoing")) { outcomingCallsAmount++; outcomingDuration = outcomingDuration.Add(cr.Duration); } allCallsDuration = allCallsDuration.Add(cr.Duration); }
public static CallRecord Parse(string line) { CallRecord record = new CallRecord(); record.StationNumber = int.Parse(line.Substring(0, 5)); record.CO = line.Substring(6, 3).Trim(); record.Duration = TimeSpan.Parse(line.Substring(10, 8)); record.Start = DateTime.Parse(line.Substring(19, 14)); record.CallType = ParseCallType(line.Substring(34, 1)); record.Dialed = line.Substring(35, 20).Trim(); string costSubstring = line.Substring(56, 23); record.Cost = string.IsNullOrWhiteSpace(costSubstring) ? 0 : decimal.Parse(costSubstring); record.AccountCode = line.Substring(80, 20).Trim(); record.DisconnectCause = ParseDisconnectCause(line.Substring(101, 2), record.CallType); return(record); }
private string GetGroupName(CallRecord cr) { // if (cr.CallType != CallType.Group) return string.Empty; string groupName = GetGroupNameByField(cr.Dialed); if (groupName != null) { return(groupName); } groupName = GetGroupNameByField(cr.AccountCode); if (groupName != null) { return(groupName); } return(string.Empty); }
private void ReadingThread() { using (TcpClient tcpClient = new TcpClient()) { string host = ConfigurationManager.AppSettings["TelnetHost"]; int port = int.Parse(ConfigurationManager.AppSettings["TelnetPort"]); tcpClient.Connect(host, port); using (TextReader tr = new StreamReader(tcpClient.GetStream())) { while (true) { try { string line = tr.ReadLine(); if (!string.IsNullOrWhiteSpace(line)) { int num; if (!int.TryParse(line.Substring(0, 1), out num)) { continue; } CallRecord record = SlkCdrParser.Parse(line); using (MainModel model = new MainModel()) { model.CallRecords.Add(record); model.SaveChanges(); } } } catch (Exception ex) { Console.WriteLine(ex); } } } } }
public static IEnumerable <CallRecord> Parse(FileInfo slkFile) { List <CallRecord> callRecords = new List <CallRecord>(); using (TextReader reader = slkFile.OpenText()) { string line; CallRecord record = new CallRecord(); while ((line = reader.ReadLine()) != null) { string[] arr = line.Split(';'); if (arr[0] != "C") { continue; } if (arr[2] == "Y1") { continue; } string content = arr[3].Substring(2, arr[3].Length - 3); switch (arr[1]) { case "X1": record.StationNumber = int.Parse(content); break; case "X2": record.CO = content.Trim(); break; case "X3": record.Duration = TimeSpan.Parse(content); break; case "X4": record.Start = DateTime.Parse(content); break; case "X5": record.CallType = ParseCallType(content); break; case "X6": record.Dialed = content.Trim(); break; case "X7": record.Cost = string.IsNullOrWhiteSpace(content) ? 0 : decimal.Parse(content); break; case "X8": record.AccountCode = content.Trim(); break; case "X9": record.DisconnectCause = ParseDisconnectCause(content, record.CallType); callRecords.Add(record); record = new CallRecord(); break; } } } return(callRecords); }