예제 #1
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();
            }
        }
예제 #2
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));
            }

        }