//сбор данных задачи для исполнения команд private void LoadConfiguration(RemoteTask task) { // Logging("STARTED"); foreach (Favorite fav in task.Favorites) { List <string> commands = new List <string>(); //проходим по списку команд, выявляем соответствие используемой команды и категории избранного //в сортированном списке по ордеру foreach (Command command in task.Commands.OrderBy(c => c.Order)) { foreach (Category category in command.Categories) { if (fav.Category.CategoryName == category.CategoryName) { commands.Add(command.Name); } } } //устанавливаем соединение FavoriteConnect connect = new FavoriteConnect(); connect.commands = commands; connect.favorite = fav; connect.task = task; try { Connection(connect); } catch (Exception ex) { //записать в логи!!! Logging(string.Format("TASK {0} failed!!! Exception: {1}!!!", taskId, ex.Message)); } } //************************************************************ //создаем событие и уведомляем о том, что все задачи выполнены taskCompleted(); }
//исполнение команды для устройства private void Connection(FavoriteConnect favConnect) { RemoteTask task = favConnect.task; List<string> commands = favConnect.commands; Favorite fav = favConnect.favorite; //данные для подключения к сетевому устройству ConnectionData data = new ConnectionData(); data.address = fav.Address; data.port = fav.Port; data.username = fav.Credential.Username; data.password = fav.Credential.Password; data.enableMode = fav.Category.EnableModeRequired; data.enablePassword = fav.Credential.EnablePassword; data.anonymousLogin = fav.Category.AnonymousLogin; //по типу протоколу выбираем требуемое подключение string protocol = fav.Protocol.Name; Expect.Expect expect; switch (protocol) { case "Telnet": expect = new TelnetMintExpect(data); break; case "SSH": expect = new SshExpect(data); break; //по умолчанию для сетевых устройств протокол Telnet default: expect = new TelnetMintExpect(data); break; } //если объект expect успешно создан if (expect != null) { //выполняем список команд expect.ExecuteCommands(commands); //если возвращает пустую строку, то выдает исключение string result = expect.GetResult(); bool success = expect.isSuccess; string error =expect.GetError(); //если успешно сохраняем конфигурацию устройства if (success) { Config config = new Config(); config.Current = result ?? "Empty";//если строка пустая, вернуть Empty config.Date = DateTime.Now; fav.Configs.Add(config); Logging(string.Format("TASK {0} : success connection for {0} {1}", _taskId, fav.Hostname, fav.Address)); } else { Logging(string.Format("TASK {0} : failed connection for {0} {1}!!!", _taskId, fav.Hostname, fav.Address)); } //создаем отчет о проделанном задании Report report = new Report(); report.Date = DateTime.Now; report.Status = success; report.Info = error; report.Task = task; report.Favorite = fav; _context.Reports.Add(report); _context.SaveChanges(); } }
//сбор данных задачи для исполнения команд private void LoadConfiguration(RemoteTask task) { // Logging("STARTED"); foreach (Favorite fav in task.Favorites) { List<string> commands = new List<string>(); //проходим по списку команд, выявляем соответствие используемой команды и категории избранного //в сортированном списке по ордеру foreach (Command command in task.Commands.OrderBy(c => c.Order)) { foreach (Category category in command.Categories) { if (fav.Category.CategoryName == category.CategoryName) { commands.Add(command.Name); } } } //устанавливаем соединение FavoriteConnect connect = new FavoriteConnect(); connect.commands = commands; connect.favorite = fav; connect.task = task; try { Connection(connect); } catch (Exception ex) { //записать в логи!!! Logging(string.Format("TASK {0} failed!!! Exception: {1}!!!", _taskId, ex.Message)); } } //************************************************************ //создаем событие и уведомляем о том, что все задачи выполнены taskCompleted(); }
//исполнение команды для устройства private void Connection(FavoriteConnect favConnect) { RemoteTask task = favConnect.task; List <string> commands = favConnect.commands; Favorite fav = favConnect.favorite; //данные для подключения к сетевому устройству ConnectionData data = new ConnectionData(); data.address = fav.Address; data.port = fav.Port; data.username = fav.Credential.Username; data.password = fav.Credential.Password; data.enableMode = fav.Category.EnableModeRequired; data.enablePassword = fav.Credential.EnablePassword; //по типу протоколу выбираем требуемое подключение string protocol = fav.Protocol.Name; Expect.Expect expect; switch (protocol) { case "Telnet": expect = new TelnetMintExpect(data); break; case "SSH": expect = new SshExpect(data); break; //по умолчанию для сетевых устройств протокол Telnet default: expect = new TelnetMintExpect(data); break; } //если объект expect успешно создан if (expect != null) { //выполняем список команд expect.ExecuteCommands(commands); //если возвращает пустую строку, то выдает исключение string result = expect.GetResult(); bool success = expect.isSuccess; string error = expect.GetError(); //если успешно сохраняем конфигурацию устройства if (success) { Config config = new Config(); config.Current = result ?? "Empty";//если строка пустая, вернуть Empty config.Date = DateTime.Now; fav.Configs.Add(config); Logging(string.Format("TASK {0} : success connection for {0} {1}", taskId, fav.Hostname, fav.Address)); } else { Logging(string.Format("TASK {0} : failed connection for {0} {1}!!!", taskId, fav.Hostname, fav.Address)); } //создаем отчет о проделанном задании Report report = new Report(); report.Date = DateTime.Now; report.Status = success; report.Info = error; report.Task = task; report.Favorite = fav; context.Reports.Add(report); context.SaveChanges(); } }