コード例 #1
0
        //подгружаем данные
        private async void LoadData()
        {
            using (context = new RconfigContext())
            {
                var queryCommands = await(from c in context.Commands
                                          select c).ToListAsync();

                if (queryCommands != null)
                {
                    listViewCommands.Items.Clear();
                    foreach (Command command in queryCommands)
                    {
                        var item = new ListViewItem(new[] {
                            command.Name,
                            command.Order.ToString()
                        });
                        listViewCommands.Items.Add(item);
                    }
                }
            }
        }
コード例 #2
0
 //удалить команду
 private void deleteCommandToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (listViewCommands.SelectedItems.Count != 0)
     {
         using (context = new RconfigContext())
         {
             var    item    = listViewCommands.SelectedItems[0];
             string command = item.SubItems[0].Text;
             // MessageBox.Show(listBoxCommands.SelectedItem.ToString());
             var queryCommand = (from c in context.Commands
                                 where c.Name == command
                                 select c).FirstOrDefault();
             if (queryCommand != null)
             {
                 context.Commands.Remove(queryCommand);
                 context.SaveChanges();
                 LoadData();
             }
         }
     }
 }
コード例 #3
0
        private void LoadData()
        {
            using (RconfigContext context = new RconfigContext())
            {
                var queryCredentials = (from c in context.Credentials
                                        select c.CredentialName).ToList();
                comboBoxCredentials.DataSource = queryCredentials;

                var queryCategories = (from c in context.Categories
                                       select c.CategoryName).ToList();
                comboBoxCategories.DataSource = queryCategories;

                var queryProtocols = (from c in context.Protocols
                                      select c.Name).ToList();
                comboBoxProtocols.DataSource = queryProtocols;

                var queryLocations = (from c in context.Locations
                                      select c.LocationName).ToList();
                comboBoxLocations.DataSource = queryLocations;
            }
        }
コード例 #4
0
ファイル: CommandUsage.cs プロジェクト: Yertayev/RemoteWork
        //вариант прохождения в цикле обхода и сбора конфигураций с устройств по задаче
        //проверяется корректность идентификатора задачи
        //затем собираются данные по командам доступные для устройства
        //затем запускается сбор конфигураций
        #region LOOP USAGE
        //метод опроса в цикле
        private void LoopMethod(int taskId)
        {
            context = new RconfigContext();

            var queryTask = (from c in context.RemoteTasks
                             where c.Id == taskId
                             select c).FirstOrDefault();

            //записать в логи операция началась
            if (queryTask != null)
            {
                Logging(string.Format("TASK {0} started... LOOP METHOD ", taskId));
                LoadConfiguration(queryTask);
                //записать в логи успешное завершение
                Logging(string.Format("TASK {0} finished...", taskId));
            }
            else
            {
                //записать в логи провал
                Logging(string.Format("TASK {0} failed!!! Not correct task ID!!!", taskId));
            }
        }
コード例 #5
0
        //удаление задачи
        private void buttonDelete_Click(object sender, EventArgs e)
        {
            if (listViewDetails.SelectedItems.Count != 0)
            {
                var item   = listViewDetails.SelectedItems[0];
                int taskId = Int32.Parse(item.SubItems[0].Text);
                //MessageBox.Show(taskId.ToString());
                using (context = new RconfigContext())
                {
                    var queryTask = (from c in context.RemoteTasks
                                     where c.Id == taskId
                                     select c).FirstOrDefault();

                    if (queryTask != null)
                    {
                        context.RemoteTasks.Remove(queryTask);
                        context.SaveChanges();
                        listViewDetails.Items.Clear();
                        LoadData();
                    }
                }
            }
        }
コード例 #6
0
        //подгрузка данных о категории для отображения
        private async void LoadData()
        {
            using (context = new RconfigContext())
            {
                var queryCategory = await(from c in context.Categories
                                          select c).ToListAsync();

                foreach (Category category in queryCategory)
                {
                    TreeNode node = new TreeNode();
                    node.Name = category.CategoryName;
                    node.Text = category.CategoryName;
                    //foreach (Favorite favorite in category.Favorites)
                    //{
                    //    TreeNode childNode = new TreeNode();
                    //    childNode.Text = favorite.Hostname;
                    //}
                    treeViewFavorites.Nodes.Add(node);
                }
            }
            //подгружать будем только данные верхнего уровня каталоги
            //LoadChildData();
        }
コード例 #7
0
        //подгрузка данных при выборе категории
        private void LoadCategoryData(string category)
        {
            using (context = new RconfigContext())
            {
                var queryCategory = (from c in context.Categories
                                     where c.CategoryName == category
                                     select c).FirstOrDefault();

                if (queryCategory != null)
                {
                    listViewDetails.Items.Clear();
                    foreach (Favorite fav in queryCategory.Favorites)
                    {
                        var item = new ListViewItem(new[] { fav.Hostname,
                                                            fav.Address,
                                                            fav.Port.ToString(),
                                                            fav.Protocol.Name,
                                                            fav.Location.LocationName });
                        listViewDetails.Items.Add(item);
                    }
                }
            }
        }
コード例 #8
0
 //просмотр конфигурации устройства
 private void openConfigurationToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (listViewConfig.SelectedItems.Count != 0)
     {
         var item     = listViewConfig.SelectedItems[0];
         int configId = Int32.Parse(item.SubItems[0].Text);
         using (context = new RconfigContext())
         {
             var queryConfig = (from c in context.Configs
                                where c.Id == configId
                                select c).FirstOrDefault();
             if (queryConfig != null)
             {
                 Config_Watcher frm    = new Config_Watcher(queryConfig);
                 DialogResult   result = frm.ShowDialog();
                 if (result == DialogResult.OK)
                 {
                     //*******************************
                 }
             }
         }
     }
 }
コード例 #9
0
ファイル: Favorite Edit.cs プロジェクト: Yertayev/RemoteWork
        //подгружаем предыдущие данные для редактирования
        private void LoadPrevData()
        {
            using (RconfigContext context = new RconfigContext())
            {
                var queryPrevFavorite = (from c in context.Favorites
                                         where c.Hostname == prevFavName
                                         select c).FirstOrDefault();
                //если избранное было найдено подгружаем данные
                if (queryPrevFavorite != null)
                {
                    //сохраняем наше избранное
                    currentFavorite = queryPrevFavorite;

                    //редактируем данные формы
                    textBoxHostname.Text    = prevFavName;
                    textBoxAddress.Text     = queryPrevFavorite.Address;
                    numericUpDownPort.Value = queryPrevFavorite.Port;

                    //проверить
                    var credential = queryPrevFavorite.Credential.CredentialName;
                    var location   = queryPrevFavorite.Location.LocationName;
                    var protocol   = queryPrevFavorite.Protocol.Name;
                    var category   = queryPrevFavorite.Category.CategoryName;

                    comboBoxCredential.SelectedItem = credential;
                    comboBoxLocation.SelectedItem   = location;
                    comboBoxProtocol.SelectedItem   = protocol;
                    comboBoxCategory.SelectedItem   = category;
                }
                else
                {
                    //если в базе данных не удалось обнаружить избранное с указанным именем, то оставляем форму без изменений
                    mode = WindowsMode.ADD;
                }
            }
        }
コード例 #10
0
ファイル: CommandUsage.cs プロジェクト: Yertayev/RemoteWork
        //многопоточный вариант обхода и сбора конфигураций с устройств по задаче
        #region TASK PARALLEL USAGE
        //возможен конфликт при параллельной вставке данных
        //требуется протестировать
        private void LoadConfigurationThread(int taskId)
        {
            using (RconfigContext context = new RconfigContext())
            {
                var task = (from c in context.RemoteTasks
                            where c.Id == taskId
                            select c).FirstOrDefault();

                if (task != null)
                {
                    List <Task> taskRunnerManager = new List <Task>();
                    try
                    {
                        Logging(string.Format("TASK {0} started... THREADING", taskId));
                        //если количество избранных равна нулю коэффициент ожидания равен 1
                        //int waiter = (task.Favorites.Count>0) ? task.Favorites.Count : 1;
                        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);
                                    }
                                }
                            }
                            //мультипоточность
                            //устанавливаем соединение
                            FavoriteTask connect = new FavoriteTask();
                            connect.Commands   = commands;
                            connect.FavoriteId = fav.Id;
                            connect.TaskId     = task.Id;

                            //создаем задачу и добавляем ее в менеджер
                            Task taskRunner = Task.Factory.StartNew(() =>
                                                                    ConnectionThread(connect));
                            taskRunnerManager.Add(taskRunner);
                        }
                        //дожидаемся пока выполняться все задания
                        Task.WaitAll(taskRunnerManager.ToArray());
                        //************************************************************
                        //создаем событие и уведомляем о том, что все задачи выполнены
                        taskCompleted();
                    }
                    catch (Exception ex)
                    {
                        //логгирование
                        Logging(string.Format("TASK {0} failed!!! Exception: {1}", taskId, ex.Message));
                    }
                }
                else
                {
                    //записать в логи провал
                    Logging(string.Format("TASK {0} failed!!! Not correct task ID!!!", taskId));
                }
            }
        }
コード例 #11
0
ファイル: CommandUsage.cs プロジェクト: Yertayev/RemoteWork
        //проблема с многопоточностью
        //создаем новый контекст для каждого потока
        private void ConnectionThread(FavoriteTask favConnect)
        {
            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;
                //по типу протоколу выбираем требуемое подключение
                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();
                }
            }
        }
コード例 #12
0
        //импорт в базу данных
        private void DataImport()
        {
            using (RconfigContext context = new RconfigContext())
            {
                bool attributeLoadSuccess = true;
                //данные по местоположению
                string location      = comboBoxLocations.SelectedValue.ToString();
                var    queryLocation = (from c in context.Locations
                                        where c.LocationName == location
                                        select c).FirstOrDefault();
                if (queryLocation == null)
                {
                    attributeLoadSuccess = false;
                }

                //данные безопасности
                string credential      = comboBoxCredentials.SelectedValue.ToString();
                var    queryCredential = (from c in context.Credentials
                                          where c.CredentialName == credential
                                          select c).FirstOrDefault();
                if (queryCredential == null)
                {
                    attributeLoadSuccess = false;
                }

                //данные протокола
                string protocol      = comboBoxProtocols.SelectedValue.ToString();
                var    queryProtocol = (from c in context.Protocols
                                        where c.Name == protocol
                                        select c).FirstOrDefault();
                if (queryProtocol == null)
                {
                    attributeLoadSuccess = false;
                }

                //данные категории
                string category      = comboBoxCategories.SelectedValue.ToString();
                var    queryCategory = (from c in context.Categories
                                        where c.CategoryName == category
                                        select c).FirstOrDefault();
                if (queryCategory == null)
                {
                    attributeLoadSuccess = false;
                }

                int port = (int)numericUpDownPort.Value;
                //если успешно импортировать устройства
                if (attributeLoadSuccess)
                {
                    foreach (string address in network.Keys)
                    {
                        string hostname = network[address].ToString();

                        Favorite fav = new Favorite();
                        fav.Hostname   = hostname;
                        fav.Address    = address;
                        fav.Port       = port;
                        fav.Protocol   = queryProtocol;
                        fav.Location   = queryLocation;
                        fav.Credential = queryCredential;
                        fav.Category   = queryCategory;
                        fav.Date       = DateTime.Now;

                        context.Favorites.Add(fav);
                    }
                    context.SaveChanges();
                }
                else
                {
                    MessageBox.Show("Attributes load failed!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
コード例 #13
0
        //вставка данных по умолчанию
        private void FirstInsert()
        {
            using (RconfigContext context = new RconfigContext())
            {
                //проверяем данные в БД
                //если данных нет инициализируем их
                if (context.Protocols.Count <Protocol>() == 0)
                {
                    //PROTOCOLS
                    context.Protocols.Add(new Protocol
                    {
                        Name        = "SSH",
                        DefaultPort = 22
                    });
                    context.Protocols.Add(new Protocol
                    {
                        Name        = "Telnet",
                        DefaultPort = 23
                    });

                    //CATEGORIES
                    Category routers = new Category
                    {
                        CategoryName = "Routers"
                    };

                    Category switches = new Category
                    {
                        CategoryName = "Switches"
                    };

                    Category servers = new Category
                    {
                        CategoryName = "Servers"
                    };

                    context.Categories.Add(routers);
                    context.Categories.Add(switches);
                    context.Categories.Add(servers);

                    //COMMANDS
                    ICollection <Category> cisco = new HashSet <Category>();
                    cisco.Add(routers);
                    cisco.Add(switches);

                    context.Commands.Add(new Command
                    {
                        Name       = "terminal length 0",
                        Order      = 0,
                        Categories = cisco
                    });

                    context.Commands.Add(new Command
                    {
                        Name       = "show running-config",
                        Order      = 1,
                        Categories = cisco
                    });
                    ICollection <Category> vlan = new HashSet <Category>();
                    vlan.Add(switches);
                    context.Commands.Add(new Command
                    {
                        Name       = "show ip vlan brief",
                        Order      = 2,
                        Categories = vlan
                    });

                    //CREDENTIALS
                    context.Credentials.Add(new Credential
                    {
                        CredentialName = "Default",
                        Username       = "******",
                        Domain         = "domain.com",
                        Password       = "******"
                    });
                    //LOCATIONS
                    context.Locations.Add(new Location
                    {
                        LocationName = "Syslocation"
                    });
                    context.SaveChanges();
                }
            }
        }
コード例 #14
0
        //поиск по указанному паттерну
        #region SEARCH
        //поиск избранного устройства
        private void toolStripButtonSearch_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(toolStripComboBoxSearch.Text))
            {
                UseWaitCursor = true;
                //MessageBox.Show(toolStripComboBoxSearch.Text);
                using (RconfigContext context = new RconfigContext())
                {
                    bool   isCleared      = false;//для проверка очищался у нас listview
                    string pattern        = toolStripComboBoxSearch.Text.Trim();
                    var    queryFavorites = from c in context.Favorites
                                            select c;
                    //nested query
                    var filterQuery = queryFavorites;

                    if (byAddressToolStripMenuItem.CheckState == CheckState.Checked)//фильтр поиска
                    {
                        //ищем схожести по паттерну
                        filterQuery = from c in queryFavorites
                                      where c.Address.Contains(pattern) && c.Address.EndsWith(pattern)
                                      select c;
                        //если запрос не пустой
                        if (filterQuery != null)
                        {
                            //делаем проверку очищался у нас listview
                            if (!isCleared)
                            {
                                //если не очищался, очищаем
                                listViewDetails.Items.Clear();
                                isCleared = true;
                            }
                            //добавляем наши устройства
                            AddFavoritesFromQuery(filterQuery);
                        }
                    }
                    if (byHostnameToolStripMenuItem.CheckState == CheckState.Checked)//фильтр поиска
                    {
                        filterQuery = from c in queryFavorites
                                      where c.Hostname.Contains(pattern) && c.Hostname.EndsWith(pattern)
                                      select c;
                        if (filterQuery != null)
                        {
                            if (!isCleared)
                            {
                                listViewDetails.Items.Clear();
                                isCleared = true;
                            }
                            AddFavoritesFromQuery(filterQuery);
                        }
                    }
                    if (byLocationToolStripMenuItem.CheckState == CheckState.Checked)//фильтр поиска
                    {
                        filterQuery = from c in queryFavorites
                                      where c.Location.LocationName.Contains(pattern) && c.Location.LocationName.EndsWith(pattern)
                                      select c;
                        if (filterQuery != null)
                        {
                            if (!isCleared)
                            {
                                listViewDetails.Items.Clear();
                                isCleared = true;
                            }
                            AddFavoritesFromQuery(filterQuery);
                        }
                    }
                }
                UseWaitCursor = false;
            }
        }
コード例 #15
0
        //многопоточный вариант обхода и сбора конфигураций с устройств по задаче
        #region TASK PARALLEL USAGE
        //возможен конфликт при параллельной вставке данных
        private static void LoadConfigurationThread(int taskId)
        {
            // CancellationToken token;
            using (RconfigContext context = new RconfigContext())
            {
                var task = (from c in context.RemoteTasks
                            where c.Id == taskId
                            select c).FirstOrDefault();

                if (task != null)
                {
                    List <Task> taskRunnerManager = new List <Task>();
                    //var tokenSource = new CancellationTokenSource();
                    // token = tokenSource.Token;
                    //int countFav = 0;  //для логгирования???
                    try
                    {
                        foreach (Favorite fav in task.Favorites)
                        {
                            //STARTED
                            //логгирование!!!
                            //Console.WriteLine("OPERATION started for {0}...", fav.Address);
                            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);
                                    }
                                }
                            }
                            //мультипоточность
                            //устанавливаем соединение
                            FavoriteTask connect = new FavoriteTask();
                            connect.Commands   = commands;
                            connect.FavoriteId = fav.Id;
                            connect.TaskId     = task.Id;

                            //логгирование !!!
                            //Console.WriteLine("Connection started for {0} favorites...", countFav++);

                            //создаем задачу и добавляем ее в менеджер
                            Task taskRunner = Task.Factory.StartNew(() =>
                                                                    ConnectionThread(connect));
                        }

                        //дожидаемся пока выполняться все задания
                        foreach (Task taskRunner in taskRunnerManager)
                        {
                            taskRunner.Wait();
                            // Console.WriteLine("Task {0} finished...", taskRunner.Id);
                        }
                    }
                    catch (Exception ex)
                    {
                        //Console.ForegroundColor = ConsoleColor.Red;
                        // Console.WriteLine(ex.Message);
                        //логгирование
                    }
                }
            }
        }
コード例 #16
0
        //сбор конфигурационных данных
        private void LoadConfigurationData(string favorite)
        {
            switch (filter)
            {
            case FavoriteFilter.ByHostname:
                using (context = new RconfigContext())
                {
                    var queryByHostname = (from c in context.Favorites
                                           where c.Hostname == favorite
                                           select c).FirstOrDefault();    //если использовать Single, выкидывает исключение
                    if (queryByHostname != null)
                    {
                        listViewConfig.Items.Clear();
                        //пройтись по списку конфигураций устройства, отсортированный по ID
                        foreach (Config config in queryByHostname.Configs.OrderByDescending(p => p.Id))
                        {
                            //если используется фильтр по дате
                            if (useDateFilter)
                            {
                                if (config.Date.Value.Year == dateFilter.Year
                                    & config.Date.Value.Month == dateFilter.Month
                                    & config.Date.Value.Day == dateFilter.Day)
                                {
                                    var item = new ListViewItem(new[] {
                                        config.Id.ToString(),
                                        config.Date.ToString()
                                    });
                                    listViewConfig.Items.Add(item);
                                }
                            }
                            //если не используется фильтр по времени
                            else
                            {
                                var item = new ListViewItem(new[] {
                                    config.Id.ToString(),
                                    config.Date.ToString()
                                });
                                listViewConfig.Items.Add(item);
                            }
                        }
                    }
                    else
                    {
                        NotifyInfo("Favorite not found!");
                    }
                }
                break;

            case FavoriteFilter.ByIPAddress:
                using (context = new RconfigContext())
                {
                    var queryByAddress = (from c in context.Favorites
                                          where c.Address == favorite
                                          select c).FirstOrDefault();
                    if (queryByAddress != null)
                    {
                        listViewConfig.Items.Clear();
                        //пройтись по списку конфигураций устройства, отсортированный по ID
                        foreach (Config config in queryByAddress.Configs.OrderByDescending(p => p.Id))
                        {
                            //если используется фильтр по дате
                            if (useDateFilter)
                            {
                                if (config.Date.Value.Year == dateFilter.Year
                                    & config.Date.Value.Month == dateFilter.Month
                                    & config.Date.Value.Day == dateFilter.Day)
                                {
                                    var item = new ListViewItem(new[] {
                                        config.Id.ToString(),
                                        config.Date.ToString()
                                    });
                                    listViewConfig.Items.Add(item);
                                }
                            }
                            //если не используется фильтр по времени
                            else
                            {
                                var item = new ListViewItem(new[] {
                                    config.Id.ToString(),
                                    config.Date.ToString()
                                });
                                listViewConfig.Items.Add(item);
                            }
                        }
                    }
                    else
                    {
                        NotifyInfo("Favorite not found!");
                    }
                }
                break;
            }
        }