//исполнение команды для устройства 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(); } }
public Config_Watcher(Config config) { InitializeComponent(); currentConfig = config; LoadData(); }
//проблема с многопоточностью //создаем новый контекст для каждого потока private void ConnectionThread(FavoriteTask favConnect) { try { using (RconfigContext ctx = new RconfigContext()) { var task = (from c in ctx.RemoteTasks where c.Id == favConnect.TaskId select c).Single(); List<string> commands = favConnect.Commands; Favorite fav = (from c in ctx.Favorites where c.Id == favConnect.FavoriteId select c).Single(); //данные для подключения к сетевому устройству 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; data.timeOut = fav.TimeOut; //по типу протоколу выбираем требуемое подключение 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"; 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; ctx.Reports.Add(report); ctx.SaveChanges(); } } } catch (Exception ex) { //логгирование Logging(string.Format("TASK {0} failed!!! Exception: {1}", _taskId, ex.StackTrace)); } }
//метод для сохранения конфигурации private void SaveConfiguration() { try { using (RconfigContext context = new RconfigContext()) { var fav = (from c in context.Favorites where c.Hostname == _favName select c).Single(); if (fav != null) { DialogResult dialogResult = MessageBox.Show("Do you want to save output to database as configuration?!", "Confirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); //предупредить пользователя, что единовременный сбор конфигурации не будет храниться в базе данных //затем сделать сбор конфигурации if (dialogResult == DialogResult.OK) { Config config = new Config(); config.Current = _result ?? "Empty"; config.Date = DateTime.Now; fav.Configs.Add(config); context.SaveChanges(); } } } } catch (Exception e) { richTextBoxConfig.Text = e.StackTrace; } }