예제 #1
0
        //проблема с многопоточностью
        //создаем новый контекст для каждого потока
        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));
            }

        }
예제 #2
0
        //исполнение команды для устройства
        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();
            }
        }
예제 #3
0
 //подключение к сетевому устройству
 private string Connection(List<string> commands)
 {
     string resultStr = string.Empty;
     try
     {
         using (RconfigContext context = new RconfigContext())
         {
             var fav = (from c in context.Favorites
                 where c.Hostname == _favName
                 select c).Single();
             if (fav != null)
             {
                 //данные для подключения к сетевому устройству
                 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;
                 }
                 // richTextBoxConfig.Text += "Device configuration checked..."+Environment.NewLine;
                 //если объект expect успешно создан
                 if (expect != null)
                 {
                     //выполняем список команд
                     expect.ExecuteCommands(commands);
                     string result = expect.GetResult();
                     bool success = expect.isSuccess;
                     string error = expect.GetError();
                     //если успешно сохраняем конфигурацию устройства
                     if (success && !string.IsNullOrWhiteSpace(result))
                     {
                         //richTextBoxConfig.Text= "SUCCESS: " + result;
                         //DialogResult dialogResult = MessageBox.Show("Do you want to save this configuration to database?!","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();
                         //}
                         return result;
                     }
                     else if (success && string.IsNullOrWhiteSpace(result))
                     {
                         //richTextBoxConfig.Text= "Output is empty! Something wrong with device configuration. Please check!";
                         return "Output is empty! Something wrong with device configuration. Please check!";
                     }
                     else
                     {
                         //richTextBoxConfig.Text= "FAILED: " + error;
                         return "FAILED: " + error;
                     }
                 }
             }
         }
     }
     catch (Exception e)
     {
         return e.StackTrace;
     }
     return resultStr;
 }