private static List <Dictionary <string, string> > GetWijmoCallGrid()
        {
            if (AllCalls.Any())
            {
                var calls = AllCalls.OrderByDescending(p => p.DateCreated).Select(activeCall => new Dictionary <string, string>
                {
                    { "Number", CensorPhoneNumber(activeCall.From) },
                    { "Status", GetCallStatus(activeCall) },
                    {
                        "Duration",
                        string.Format("{0} seconds",
                                      GetCallDuration(activeCall))
                    },
                    { "Date", activeCall.DateCreated.ToString() },
                    { "City", activeCall.City },
                    { "State", activeCall.State },
                    { "Zip Code", activeCall.ZipCode },
                    { "Country", activeCall.Country }
                });

                return(calls.ToList());
            }
            else
            {
                return(new List <Dictionary <string, string> >());
            }
        }
        public static void AddToLog(string sid, string logText)
        {
            if (Log == null)
            {
                Log = new List <LogItem>();
            }

            Log.Add(new LogItem()
            {
                PhoneNumber = CensorPhoneNumber(AllCalls.Find(p => p.Sid == sid).From),
                LogText     = logText,
                Date        = DateTime.Now
            });
        }
        private static void BroadcastCallsPerMinute()
        {
            var context = GlobalHost.ConnectionManager.GetHubContext("DashboardHub");

            var callsInPastFive = AllCalls.Where(p => (DateTime.Now - p.DateCreated).Minutes <= 5).OrderByDescending(p => p.DateCreated);
            List <WijLineChartSeriesItem> callList = new List <WijLineChartSeriesItem>();

            foreach (var call in callsInPastFive)
            {
                var a = callList.FirstOrDefault();
                if (a == null)
                {
                    callList.Add(new WijLineChartSeriesItem()
                    {
                        label       = "times",
                        legendEntry = false,
                        fitType     = "spline",
                        data        = new xyObject()
                        {
                            x = new List <string>(), y = new List <int>()
                        }
                    });

                    // get latest time
                    DateTime maxTime = DateTime.UtcNow;
                    for (DateTime current = maxTime; (maxTime - current).Minutes <= 5; current = current.AddMinutes(-1))
                    {
                        callList.FirstOrDefault().data.x.Add(current.ToShortTimeString());
                        callList.FirstOrDefault().data.y.Add(0);
                    }
                }

                a = callList.FirstOrDefault();
                if (a.data.x.Contains(call.DateCreated.ToShortTimeString()))
                {
                    int index = a.data.x.IndexOf(call.DateCreated.ToShortTimeString());
                    a.data.x[index] = call.DateCreated.ToShortTimeString();
                    a.data.y[index]++;
                }
                else
                {
                    a.data.x.Add(call.DateCreated.ToShortTimeString());
                    a.data.y.Add(1);
                }
            }

            context.Clients.updateCallsPerMinute(callList.OrderBy(p => p.data.x));
        }
        private static void BroadcastAreaCodes()
        {
            var context = GlobalHost.ConnectionManager.GetHubContext("DashboardHub");

            var areaCodeCounts = new Dictionary <string, int>();

            foreach (var areaCode in AllCalls.OrderByDescending(p => p.DateCreated).Select(call => ExtractAreaCode(call.From)))
            {
                if (areaCodeCounts.ContainsKey(areaCode))
                {
                    areaCodeCounts[areaCode] += 1;
                }
                else
                {
                    areaCodeCounts[areaCode] = 1;
                }
            }

            List <WijPieChartSeriesItem> areaCodeList;

            if (areaCodeCounts.Any())
            {
                areaCodeList = areaCodeCounts.Select(keyValuePair => new WijPieChartSeriesItem()
                {
                    data        = keyValuePair.Value,
                    label       = keyValuePair.Key,
                    legendEntry = true
                }).ToList();
            }
            else
            {
                areaCodeList = new List <WijPieChartSeriesItem>()
                {
                    new WijPieChartSeriesItem()
                    {
                        data = 1, label = "None", legendEntry = false
                    }
                };
            }

            context.Clients.updateAreaCodeChart(areaCodeList);
        }