예제 #1
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="dateDir_path"></param>
 /// <param name="filename">[0]-pm15, [1]-pm24</param>
 public void ReadLocalDirDateFiles(string dateDir_path, string[] filename)
 {
     string Dir24pm, Dir15pm;
     #region Check Dir24pm 15pm
     if (Directory.Exists(dateDir_path + "\\" + pm24Dir))
         Dir24pm = dateDir_path + "\\" + pm24Dir;
     else
         Dir24pm = "";
     if (Directory.Exists(dateDir_path + "\\" + pm15Dir))
         Dir15pm = dateDir_path + "\\" + pm15Dir;
     else
         Dir15pm = "";
     #endregion
     
     #region read24 files 
     if (File.Exists(Dir24pm+"/"+filename[1]))
     {
         Invoke(new Action<int>(s => nFiles += s),1);
         ReadPM pm24 = new ReadPM(Dir24pm, filename[1]);//считали и проанализировали локальный файл
             BASE.AddNE(pm24);
             c_pm24++;
     }
     #endregion
     #region read15 files
     if (File.Exists(Dir15pm + "/" + filename[0]))
     {
         Invoke(new Action<int>(s => nFiles += s), 1);
         PM15 pm15 = new PM15(Dir15pm + "/" + filename[0]);//считали и проанализировали локальный файл
             BASE.AddNE(pm15);
             c_pm15++;
     }
     #endregion
 }
예제 #2
0
 public NE(PM15 PM)
 {
     this.NE_Name    = PM.NE_Name;
     this.File24path = "";
     this.File15path = PM.Filename;
     Ports           = PM.Ports;
     ISPM15          = true;
 }
예제 #3
0
        //add info for pm15
        public bool AddNE(PM15 pm)
        {
            int index = this.NeList.FindIndex(x => x.NE_Name == pm.NE_Name && x.ISPM15);

            if (index != -1)//Exist NE
            {
                this.NeList[index].AddInfo(pm);
                return(true);
            }
            else
            {
                this.AddNewNE(new NE(pm));
                return(false);
            }
        }
예제 #4
0
        public void ReadLocalDirDateFiles(string dateDir_path)
        {
            string Dir24pm, Dir15pm;
            #region Check Dir24pm 15pm
            if (Directory.Exists(dateDir_path + "\\" + pm24Dir))
                Dir24pm = dateDir_path + "\\" + pm24Dir;
            else
                Dir24pm = "";
            if (Directory.Exists(dateDir_path + "\\" + pm15Dir))
                Dir15pm = dateDir_path + "\\" + pm15Dir;
            else
                Dir15pm = "";
            #endregion
            string[] Files24 = String.IsNullOrWhiteSpace(Dir24pm)?new string[0]:Directory.GetFiles(Dir24pm); //список файлов статистики
            string[] Files15 = String.IsNullOrWhiteSpace(Dir15pm) ? new string[0] : Directory.GetFiles(Dir15pm); //список файлов статистики
            #region read24 files
            if (!String.IsNullOrWhiteSpace(Dir24pm)&& Files24.Any())
            { 
                Invoke(new Action<int>(s => nFiles += s), Files24.Count());
                ReadPM pm24;
                foreach (var File in Files24)
                { //перебор файлов в конечной папке//заносим инфу из каждого файла в структуру BASE
                    var file = File.Split('\\').Last();
                    pm24 = new ReadPM(Dir24pm, file);//считали и проанализировали локальный файл
                    BASE.AddNE(pm24);
                        c_pm24++;
                }
            }
            #endregion
            #region read15 files
            if (!String.IsNullOrWhiteSpace(Dir15pm)&& Files15.Any())
            {
                Invoke(new Action<int>(s => nFiles += s), Files15.Count());
                PM15 pm15;

                foreach (var File in Files15)
                { //перебор файлов в конечной папке//заносим инфу из каждого файла в структуру BASE
                    pm15 = new PM15(File);//считали и проанализировали локальный файл
                    //if (pm15.HaveErrors) MessageBox.Show(pm15.NE_Name + Environment.NewLine + File);
					BASE.AddNE(pm15);
						c_pm15++;
                }
            }
            #endregion
        }
예제 #5
0
        public void AddInfo(PM15 PM)
        {
            try
            {
                if (PM.NE_Name == this.NE_Name)
                {
                    int nPort;
                    int nStat;
                    foreach (var port in PM.Ports)
                    {
                        nPort = this.Ports.FindIndex(p => p.PortName == port.PortName);
                        if (nPort == -1)
                        {
//такого порта нету, добавляем в список
                            this.Ports.Add(port);
                        }
                        else //порта уже имеется
                        {//проверяем наличие статы по дате на порту nPort
                            foreach (var stat in port.Stat)
                            {
                                nStat = this.Ports[nPort].Stat.FindIndex(s => s.Date == stat.Date);
                                if (nStat == -1)
                                {
//такой даты не найдено
                                    //добавляем stat в список данного порта nPort
                                    this.Ports[nPort].Stat.Add(stat);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #6
0
        public void ReadAndCopyFiles(object O)
        {

            try
            {
                mutexObj.WaitOne();//wait until read dom100
                
                Invoke(new Action<string>(s => button1.Text = s), "Работаю... Остановить?");
                //Invoke(new Action<bool>(s => button1.Enabled = s), false);
                Invoke(new Action<bool>(s => button2.Enabled = s), false);
                Invoke(new Action<bool>(s => listBox1.Enabled = s), false);
                string PM_path_server = (string)O;
                string currentDOM = "";
                if (PM_path_server.Split('\\').Last() == dom100) currentDOM = dom100;
                else currentDOM = dom101;
                FtpClient client = new FtpClient();
                del Mydel = n => listBox1.Items.Add(n);
                

                #region Connection FTP
                //Задаём параметры клиента.
                client.PassiveMode = true; //Включаем пассивный режим.
                int TimeoutFTP = 30000; //Таймаут.
                string FTP_SERVER = Properties.Settings.Default.ftp_Address;
               // string FTP_SERVER = "127.0.0.1";
                int FTP_PORT = Properties.Settings.Default.ftp_Port; 
                //int FTP_PORT= 21;
                string FTP_USER = Properties.Settings.Default.ftp_User;
                string FTP_PASSWORD = Properties.Settings.Default.ftp_Pass;

                //Подключаемся к FTP серверу.
                Ping p = new Ping();
                if (p.Send(FTP_SERVER).Status != IPStatus.Success)
                {
                    MessageBox.Show("Адрес " + FTP_SERVER + " не доступен");
                    Invoke(new Action<string>(s => button1.Text = s), oldBut);
                    Invoke(new Action<bool>(s => button1.Enabled = s), true);
                    Invoke(new Action<bool>(s => button2.Enabled = s), true);
                    Invoke(new Action<bool>(s => listBox1.Enabled = s), true);
                    mutexObj.ReleaseMutex();
                    return;
                }
                client.Connect(TimeoutFTP, FTP_SERVER, FTP_PORT);
                client.Login(TimeoutFTP, FTP_USER, FTP_PASSWORD);
                #endregion
                //Меняет директорию на указанную.
                //Можно переходить вверх указав вместо имени папки ".." либо в любую папку расположенную в текущей.
                client.ChangeDirectory(TimeoutFTP, PM_path_server);//переход в директорию DOM100

                //Получает список содержимого текущего каталога с FTP.
                var listftp = client.GetDirectoryList(TimeoutFTP);
                if (listftp.Count() == 0)
                {
                    //    MessageBox.Show("В каталоге " + PM_path_server+" ничего нет", "GetDirectoryList");
                    Invoke(new Action<string>(s => button1.Text = s), oldBut);
                    //Invoke(new Action<bool>(s => button1.Enabled = s), true);
                    Invoke(new Action<bool>(s => button2.Enabled = s), true);
                    Invoke(new Action<bool>(s => listBox1.Enabled = s), true);
                    mutexObj.ReleaseMutex();
                    return;
                }
                ReadPM pm24;
                NE NEstat;
                DateTime DirDate;
                int countErr = 0;
                string text;//строка отчета о количестве папок
             //перебор всех папок DirDate
                foreach (var ftpItem in listftp)
                {
                    //перевод названия папки в дату    
                    if (ftpItem.ItemType != FtpItemType.Directory) continue;
                    Invoke(new Action<int>(s => nDirsAll += s), 1);
                    if (!DateTime.TryParseExact(ftpItem.Name, "yyyyMMdd", CultureInfo.InvariantCulture,
                            DateTimeStyles.None, out DirDate))
                    {
                        countErr += 1;
                        continue;
                    }
                    if (countErr != 0) MessageBox.Show("Пропущено " + countErr + " папок при чтении с сервера");


                    //фильтр папок по дате
                    if (DirDate.Date > FromDate.Date && (DirDate.Date + new TimeSpan(1, 0, 0, 0)) <= ToDate.Date)
                    {
                        //    MessageBox.Show("папка " + ftpItem.Name + " прошла фильтр времени");
                        Invoke(new Action<int>(s => nDirs += s), 1);
                        //copy Directories from server
                        if (!Directory.Exists(DirLocal)) Directory.CreateDirectory(DirLocal);
                        //пропуск существующих кроме последней
                        string LocalDirdate = DirLocal + "/" + currentDOM + "/" + ftpItem.Name;
                        var dirInfo = Directory.CreateDirectory(LocalDirdate);//date dir

                        client.ChangeDirectory(TimeoutFTP, ftpItem.Name);//переход в директорию DirDate


                        string dir24pm = ""; //имя промежуточной папки
                        string dir15pm = "";
                        var listDir = client.GetDirectoryList(TimeoutFTP);
                //теперь в папке с датой, видим одну или две папки (pm15 or pm24)
                        foreach (var dir in listDir)
                        {
                            if (dir.Name ==pm24Dir)
                            {
                                dir24pm = pm24Dir;
                                Directory.CreateDirectory(dirInfo.FullName + "/" + dir24pm);
                            }

                            if (dir.Name == pm15Dir)
                            {
                                dir15pm = pm15Dir;
                                Directory.CreateDirectory(dirInfo.FullName + "/" + dir15pm);
                            }
                        }
                        FtpItem[] Files;
                        string DestDir15 = DirLocal + "/" //pm
                                    + currentDOM + "/" +                     //dom100
                                    dirInfo.Name + "/" +                  //dateDir
                                    pm15Dir + "/";                          //Dir15pm

                        string DestDir24 = DirLocal + "/" //pm
                            + currentDOM + "/" +                     //dom100
                            dirInfo.Name + "/" +                  //dateDir
                            pm24Dir + "/";
                        //read files pm24
                        if (!String.IsNullOrWhiteSpace(dir24pm))//Если есть папка pm24
                        {
                            client.ChangeDirectory(TimeoutFTP, dir24pm);//зашли в папку ~PM24dir ~
                            Files = client.GetDirectoryList(TimeoutFTP); //список файлов статистики
                            consts.invokeControlText(label4, "Server: " + DestDir24);
                            foreach (var file in Files)
                            {//заносим инфу из каждого файла в структуру BASE
                                string FullDestFilePath = DestDir24 + file.Name;
                                Invoke(new Action<int>(s => nFiles += s), 1);
                                #region look local files
                                // skip existing local files
                                if (File.Exists(FullDestFilePath))
                                {
                                   BASE.AddNE(new ReadPM(DestDir24, file.Name));
                                    continue;
                                }
                                #endregion
                                if (file.Size == -1) continue;
                                //copy file from server to local Dir
                                client.GetFile(TimeoutFTP, FullDestFilePath, file.Name);
                                pm24 = new ReadPM(DestDir24, file.Name);//считали и проанализировали локальный файл
                                BASE.AddNE(pm24);//add to base
								c_pm24++;
                            }
                            client.ChangeDirectoryUp(TimeoutFTP);//in dirdate
                        }
                        //now into a Dirdate
                        //read files pm15
                        if (!String.IsNullOrWhiteSpace(dir15pm))
                        {
                           client.ChangeDirectory(TimeoutFTP, dir15pm);//зашли в папку ~PM15dir ~
                                Files = client.GetDirectoryList(TimeoutFTP); //список файлов статистики
                            consts.invokeControlText(label4, "Server: " + DestDir15);
                                foreach (var file in Files)
                                {//заносим инфу из каждого файла в структуру BASE
                                string FullDestFilePath = DestDir15 + file.Name;
                                Invoke(new Action<int>(s => nFiles += s), 1);
                                #region look local files
                                // skip existing local files
                                if (File.Exists(FullDestFilePath))
                                    {
                                        BASE.AddNE(new PM15(FullDestFilePath));
                                        continue;
                                    }

                                    #endregion
                                    if (file.Size == -1) continue;
                                   //copy file from server to local Dir
                                    client.GetFile(TimeoutFTP, FullDestFilePath, file.Name);
                                    var pm15 = new PM15(FullDestFilePath);//считали и проанализировали локальный файл
                                    BASE.AddNE(pm15);//add to base
									c_pm15++;
                                }
                                client.ChangeDirectoryUp(TimeoutFTP);//in dirdate

                            
                           // client.ChangeDirectoryUp(TimeoutFTP);//in dom100
                        }//if (pm15dir exist)
                        client.ChangeDirectoryUp(TimeoutFTP);//up from dirdate
                    } //Filter DATE
                } //foreach DirDates
                text = "Обработано файлов: " + nFiles +
                                "; Скопировано с сервера = " + c_pm24.ToString() + "(pm24) и = " + c_pm15 +
                                "(pm15). Всего =" + (c_pm24 + c_pm15).ToString();
                consts.invokeControlText(label4, text);
                //Отключаемся от ФТП сервера
                client.Disconnect(TimeoutFTP);
                    Invoke(new Action<string>(s => button1.Text = s), oldBut);
                   // Invoke(new Action<bool>(s => button1.Enabled = s), true);
                    Invoke(new Action<bool>(s => button2.Enabled = s), true);
                    Invoke(new Action<bool>(s => listBox1.Enabled = s), true);
                mutexObj.ReleaseMutex();
               if(currentDOM==dom101)needRefrash=true;
            }
            catch (Exception ex)
            {
                if (ex.Message != "Поток находился в процессе прерывания.")
                    MessageBox.Show(ex.ToString(), ex.Message);
                 Invoke(new Action<string>(s => button1.Text = s), oldBut);
                    Invoke(new Action<bool>(s => button1.Enabled = s), true);
                    Invoke(new Action<bool>(s => button2.Enabled = s), true);
                    Invoke(new Action<bool>(s => listBox1.Enabled = s), true);
                mutexObj.ReleaseMutex();
needRefrash=true;
            }
        }