public async Task <List <MonitorLog> > Monitor(IEnumerable <Monitor> sitesToMonitor,
                                                       IMonitorsRepository monitorsRepository,
                                                       IMonitorLogsRepository monitorLogsRepository)
        {
            if (sitesToMonitor == null)
            {
                sitesToMonitor = await monitorsRepository.GetAllActiveMonitors();
            }

            var httpMonitors
                = sitesToMonitor.Where
                      (monitor => monitor.Type == MonitorTypeEnum.HTTP)
                  .ToList();

            var keyWordMonitors
                = sitesToMonitor.Where
                      (monitor => monitor.Type == MonitorTypeEnum.KEYWORD)
                  .ToList();

            var pingMonitors
                = sitesToMonitor.Where
                      (monitor => monitor.Type == MonitorTypeEnum.PING)
                  .ToList();

            //var portMonitors
            //    = sitesToMonitor.Where
            //        (monitor => monitor.Type == MonitorTypeEnum.PORT)
            //            .ToList();

            await HttpMonitor(httpMonitors);

            await KeyWordMonitor(keyWordMonitors);

            //TODO refactor and run this asynchronously..
            PingMonitor(pingMonitors);

            await monitorsRepository.UpdateMonitors(_processedMonitors);

            await monitorLogsRepository.SaveMonitorLogs(_monitorLogs);

            return(_monitorLogs);
        }