예제 #1
0
        public void setConfig(ParseConfig config)
        {
            state.serverHost            = config.serversHost;
            state.avevasLogWasDeleteStr = config.avevasLogWasDeleteStr;
            state.logFiles         = config.logFiles;
            state.connectionString = config.connectionString;

            if (state.avevasLogWasDeleteStr != null)
            {
                try
                {
                    state.avevasLogWasDelete = false;
                    //Создание bat-файла Aveva
                    List <string> buf = new List <string>();
                    buf.Add(@"@echo off");
                    buf.Add("cd /d " + state.avevasLogWasDeleteStr);
                    buf.Add("lsmon aveva > " + Directory.GetCurrentDirectory() + "\\output.txt");
                    ReadWriteTextFile.Write_to_file(buf, Directory.GetCurrentDirectory() +
                                                    "\\CreateAvevasLog.bat", 1);

                    //запуск утилиты создания лога Aveva(Запуск ранее созданного bat файла)
                    string command = @"/C " + Directory.GetCurrentDirectory() +
                                     "\\CreateAvevasLog.bat";
                    WorkWithWindowsCommandLine wwwcl = new WorkWithWindowsCommandLine();
                    int currentTime = DateTime.Now.Minute;
                    wwwcl.Run_command(command); //WindowsCommandLineError
                    while (File.Exists(Directory.GetCurrentDirectory() + "\\output.txt")
                           == false)            //ожидание создания файла
                    {
                        //Если в течении 2 минут не создается, то bat, который должен
                        //создать файл-не отработал
                        if (DateTime.Now.Minute - 2 >= currentTime)
                        {
                            throw new WindowsCommandLineError("CreateAvevasLog.bat not create aveva " +
                                                              "log-file");
                        }
                    }
                }
                catch (Exception ex)
                {
                    ExceptionHandler.getInstance().processing(ex);
                }
            }
        }
예제 #2
0
        public List <ResultTableRows> go_parsing(List <string> buf_of_lines,
                                                 string server_host, ref string last_date)//основная функция
        {
            string                 in_example        = @".*IN\W.*";
            string                 out_example       = @".*OUT\W.*";
            string                 time_example      = @".*Time:.*";
            string                 time_example2     = @".*Start-Date:.*";
            string                 vendor            = "AutoDesk";
            DateTime               current_date_time = new DateTime(1, 1, 1);
            List <LogsRows>        buf_of_inputs     = new List <LogsRows>();
            List <ResultTableRows> result            = new List <ResultTableRows>();

            try
            {
                for (int i = 0; i < buf_of_lines.Count(); i++)
                {
                    //обновление даты
                    if ((Regex.IsMatch(buf_of_lines.ElementAt(i), time_example)) |
                        (Regex.IsMatch(buf_of_lines.ElementAt(i), time_example2)))
                    {
                        string[] words = buf_of_lines.ElementAt(i).Split(new char[] { ' ' },
                                                                         StringSplitOptions.RemoveEmptyEntries);
                        //этот и следующий if из-за разных форматов строки с текущем временем
                        if (words[3] == "System")
                        {
                            current_date_time = new DateTime(int.Parse(words[10]),
                                                             month_converter(words[8]), int.Parse(words[9]));
                        }
                        else
                        {
                            current_date_time = new DateTime(int.Parse(words[7]),
                                                             month_converter(words[5]), int.Parse(words[6]));
                        }
                    }
                    if (Regex.IsMatch(buf_of_lines.ElementAt(i), out_example))
                    {
                        string[] words = buf_of_lines.ElementAt(i).Split(new char[] { ' ' },
                                                                         StringSplitOptions.RemoveEmptyEntries);
                        //иногда попадаются такие строки, их нужно исключить
                        if (words[2] != "SERVER-OUT:")
                        {
                            string[] time = words[0].Split(new char[] { ':' },
                                                           StringSplitOptions.RemoveEmptyEntries);
                            DateTime date = new DateTime(current_date_time.Year,
                                                         current_date_time.Month, current_date_time.Day,
                                                         int.Parse(time[0]), int.Parse(time[1]), int.Parse(time[2]));
                            string[] user_and_host = words[4].Split(new char[] { '@' },
                                                                    StringSplitOptions.RemoveEmptyEntries);
                            //удаление лишних символов вначале и в конце вендора и типа лицензии
                            words[3] = words[3].Remove(0, 1);
                            words[1] = words[1].Remove(0, 1);
                            words[3] = words[3].Remove((words[3].Count() - 1), 1);
                            words[1] = words[1].Remove((words[1].Count() - 1), 1);

                            LogsRows lr = new LogsRows(date, user_and_host[0],
                                                       user_and_host[1], words[1], words[3], server_host);

                            //перезапись последней даты, она будет содержать дату
                            //последней строки с in или out
                            last_date = date.Day.ToString() + "." + date.Month.ToString() +
                                        "." + date.Year.ToString() + "_" + date.Hour.ToString() +
                                        ":" + date.Minute.ToString() + ":" + date.Second.ToString();


                            //поиск "своего in"
                            //out может встретится и до первого in, его нужно все равно
                            //записать в ответ
                            if (buf_of_inputs.Count() == 0)
                            {
                                //обработка out без in
                                DateTime        date2 = new DateTime(1, 1, 1, 1, 1, 1);
                                ResultTableRows rtr   = new ResultTableRows(date2, lr.date,
                                                                            lr.user, lr.host, vendor, lr.po, lr.servers_host);
                                result.Add(rtr);
                            }
                            for (int j = 0; j < buf_of_inputs.Count(); j++)
                            {
                                if (buf_of_inputs.ElementAt(j).user == lr.user & buf_of_inputs.
                                    ElementAt(j).host == lr.host & buf_of_inputs.ElementAt(j).
                                    po == lr.po)
                                {
                                    ResultTableRows rtr = new ResultTableRows(
                                        buf_of_inputs.ElementAt(j).date, lr.date, lr.user,
                                        lr.host, vendor, lr.po, lr.servers_host);
                                    result.Add(rtr);
                                    buf_of_inputs.RemoveAt(j);
                                    break;
                                }
                                if (j == buf_of_inputs.Count() - 1)
                                {
                                    //обработка out без in
                                    DateTime        date2 = new DateTime(1, 1, 1, 1, 1, 1);
                                    ResultTableRows rtr   = new ResultTableRows(date2, lr.date,
                                                                                lr.user, lr.host, vendor, lr.po, lr.servers_host);
                                    result.Add(rtr);
                                }
                            }
                        }
                    }
                    if (Regex.IsMatch(buf_of_lines.ElementAt(i), in_example))
                    {
                        string[] words = buf_of_lines.ElementAt(i).Split(new char[] { ' ' },
                                                                         StringSplitOptions.RemoveEmptyEntries);
                        string[] time = words[0].Split(new char[] { ':' },
                                                       StringSplitOptions.RemoveEmptyEntries);
                        DateTime date = new DateTime(current_date_time.Year,
                                                     current_date_time.Month, current_date_time.Day, int.Parse(time[0]),
                                                     int.Parse(time[1]), int.Parse(time[2]));
                        string[] user_and_host = words[4].Split(new char[] { '@' },
                                                                StringSplitOptions.RemoveEmptyEntries);
                        LogsRows lr = new LogsRows(date, user_and_host[0],
                                                   user_and_host[1], words[1], words[3], server_host);
                        lr.po = lr.po.Remove(0, 1);
                        lr.po = lr.po.Remove((lr.po.Count() - 1), 1);
                        buf_of_inputs.Add(lr);


                        //перезапись последней даты, она будет содержать дату последней
                        //строки с in или out
                        last_date = date.Day.ToString() + "." + date.Month.ToString() +
                                    "." + date.Year.ToString() + "_" + date.Hour.ToString() + ":" +
                                    date.Minute.ToString() + ":" + date.Second.ToString();
                    }
                }

                for (int i = 0; i < buf_of_inputs.Count; i++)//вывод незавершенных соединений
                {
                    DateTime        date = new DateTime(1, 1, 1, 1, 1, 1);
                    ResultTableRows rtr  = new ResultTableRows(buf_of_inputs.ElementAt(i).date,
                                                               date, buf_of_inputs.ElementAt(i).user, buf_of_inputs.ElementAt(i).host,
                                                               vendor, buf_of_inputs.ElementAt(i).po, buf_of_inputs.ElementAt(i).
                                                               servers_host);
                    result.Add(rtr);
                }

                return(result);
            }
            catch (Exception ex)
            {
                ReadWriteTextFile rwtf = new ReadWriteTextFile();
                List <string>     buf  = new List <string>();
                buf.Add("-----------------------------------------------");
                buf.Add("Module: AutoDeskParser");
                DateTime thisDay = DateTime.Now;
                buf.Add("Time: " + thisDay.ToString());
                buf.Add("Exception: " + ex.Message);
                buf.Add("Rows:");
                ReadWriteTextFile.Write_to_file(buf, Directory.GetCurrentDirectory() +
                                                "\\Errors.txt", 0);
                ReadWriteTextFile.Write_to_file(buf_of_lines,
                                                Directory.GetCurrentDirectory() + "\\Errors.txt", 0);
                result.Clear();
                return(result);
            }
        }
예제 #3
0
        public void parseFiles()
        {
            //Получение id пользователей
            List <MappingIdWithNameWithHost> usersInfo = getUsersIDAndNames();
            //Получение id программного обеспечения
            List <MappingIdWithName> softwareInfo = getSoftwaresIdAndNames();

            for (int h = 0; h < state.logFiles.Count; h++)//последовательно разбираем файлы
            {
                //читаем лог-файл
                LogAndHisLastEntry lahle = new LogAndHisLastEntry();
                lahle = state.logFiles.ElementAt(h);
                try
                {
                    string last_date = "";//записываю для перезаписи файла настроек
                    //Так как чтение из файла с проверкой на last_entry является специфической
                    //функцией, то не стал делать через dataWorker, так как потребуется
                    //создание большого числа новых классов
                    state.bufOfLines = ReadWriteTextFile.Read_from_file(lahle.path,
                                                                        lahle.last_entry);
                    //вставил пустую строку, если не сделать, ты вылетит
                    //исключение, если все строки проверяемого файла по времени не
                    //попадают в рассмотрение
                    //парсим лог-файл
                    state.bufOfLines.Add("");
                    if (state.bufOfLines.ElementAt(0) == "Aveva")
                    {
                        state.result = state.aveva_parser.go_parsing(state.bufOfLines,
                                                                     state.serverHost);
                        File.Delete(state.logFiles.ElementAt(h).path);
                        state.avevasLogWasDelete = true;
                    }
                    else
                    {
                        state.result = state.autodesk_parser.go_parsing(state.bufOfLines,
                                                                        state.serverHost, ref last_date);
                    }

                    //формирование массива запросов
                    List <string> buf = new List <string>();
                    for (int i = 0; i < state.result.Count; i++)
                    {
                        int userID;
                        int softwareID;
                        //Получение id пользователя
                        userID = checkExistUserInDB(
                            usersInfo, state.result.ElementAt(i).user,
                            state.result.ElementAt(i).host);
                        //Получение id ПО
                        softwareID = checkExistSoftWareInDB(
                            softwareInfo, state.result.ElementAt(i));
                        if (softwareID == -1)
                        {
                            softwareID   = addSoftwareIntoDB(state.result.ElementAt(i));
                            softwareInfo = getSoftwaresIdAndNames();
                        }
                        //если это логи aveva, то нужно каждый раз проверять, есть ли
                        //такие же записи в бд
                        if (state.result.ElementAt(i).vendor == "Aveva")
                        {
                            string query = "SELECT COUNT(*) FROM History WHERE UserID=" + userID +
                                           " AND SoftwareID = " + softwareID + " AND DateIN = '" +
                                           state.result.ElementAt(i).star_time.Date.ToString("yyyy-MM-dd") +
                                           "' AND DateExit = '" +
                                           state.result.ElementAt(i).finish_time.Date.ToString("yyyy-MM-dd") +
                                           "' AND TimeIn = '" +
                                           state.result.ElementAt(i).star_time.ToLongTimeString() +
                                           "' AND TimeExit='" +
                                           state.result.ElementAt(i).finish_time.ToLongTimeString() + "'";
                            DataSet ds    = configProxyForLoadDataFromBDAndExecute(query);
                            int     count = ds.Tables[0].Rows.Count;



                            if (count == 0)//значит нет такой строки и ее можно записать
                            {
                                string newLine = "INSERT INTO History VALUES(" + userID + "," +
                                                 softwareID + ",'" +
                                                 state.result.ElementAt(i).star_time.Date.ToString("yyyy-MM-dd") +
                                                 "','" +
                                                 state.result.ElementAt(i).finish_time.Date.
                                                 ToString("yyyy-MM-dd") + "','" +
                                                 state.result.ElementAt(i).star_time.ToLongTimeString() +
                                                 "','" +
                                                 state.result.ElementAt(i).finish_time.ToLongTimeString() +
                                                 "')";
                                configProxyForLoadDataFromBDAndExecute(newLine);
                            }
                            continue;
                        }
                        //Иначе это не aveva
                        //если дата не известна, то вместо нее везде стоят единицы, но чтобы
                        //все не проверять, достаточно проверить толлько год, он при
                        //известной дате точно не может быть равен 1
                        if (state.result.ElementAt(i).star_time.Year == 1)
                        {
                            string newLine = "INSERT INTO History VALUES(" + userID + "," +
                                             softwareID + "," +
                                             "null" +
                                             ",'" +
                                             state.result.ElementAt(i).finish_time.Date.ToString("yyyy-MM-dd") +
                                             "'," +
                                             "null" +
                                             ",'" +
                                             state.result.ElementAt(i).finish_time.ToLongTimeString() + "')";
                            buf.Add(newLine);
                            continue;
                        }
                        //если дата не известна, то вместо нее везде стоят единицы, но
                        //чтобы все не проверять, достаточно проверить толлько год, он при
                        //известной дате точно не может быть равен 1
                        if (state.result.ElementAt(i).finish_time.Year == 1)
                        {
                            string newLine = "INSERT INTO History VALUES(" + userID + "," +
                                             softwareID + ",'" +
                                             state.result.ElementAt(i).star_time.Date.ToString("yyyy-MM-dd") +
                                             "'," +
                                             "null" +
                                             ",'" +
                                             state.result.ElementAt(i).star_time.ToLongTimeString() +
                                             "'," +
                                             "null" + ")";
                            buf.Add(newLine);
                            continue;
                        }
                        if ((state.result.ElementAt(i).finish_time.Year != 1) &
                            (state.result.ElementAt(i).star_time.Year != 1))
                        {
                            string newLine = "INSERT INTO History VALUES(" + userID + "," +
                                             softwareID + ",'" +
                                             state.result.ElementAt(i).star_time.Date.ToString("yyyy-MM-dd") +
                                             "','" +
                                             state.result.ElementAt(i).finish_time.Date.
                                             ToString("yyyy-MM-dd") + "','" +
                                             state.result.ElementAt(i).star_time.ToLongTimeString() +
                                             "','" +
                                             state.result.ElementAt(i).finish_time.ToLongTimeString() +
                                             "')";
                            buf.Add(newLine);
                        }
                    }
                    configProxyForLoadDataFromBDAndExecute(buf);
                    //перезапись последней даты
                    List <string> new_buf_of_lines = new List <string>();
                    IniFiles      INI = new IniFiles("config.ini");
                    if (h == 0)
                    {
                        if (last_date != "")
                        {
                            INI.Write("Settings", "lastDateOfLogFile", last_date);
                        }
                    }
                    else
                    {
                        if (last_date != "")
                        {
                            INI.Write("Settings", "lastDateOfLogFile" + h.ToString(), "last_date");
                        }
                    }
                }
                catch (Exception ex)
                {
                    List <string> buf = new List <string>();
                    buf.Add("-----------------------------------------------");
                    buf.Add("Module: Form1");
                    DateTime thisDay = DateTime.Now;
                    buf.Add("Time: " + thisDay.ToString());
                    buf.Add("Exception: " + ex.Message);
                    buf.Add("Rows:");
                    ReadWriteTextFile.Write_to_file(buf, Directory.GetCurrentDirectory() +
                                                    "\\Errors.txt", 0);
                    ReadWriteTextFile.Write_to_file(state.bufOfLines, Directory.
                                                    GetCurrentDirectory() + "\\Errors.txt", 0);
                }
            }
            if (state.avevasLogWasDelete == false)
            {
                List <string> buf = new List <string>();
                buf.Add("-----------------------------------------------");
                buf.Add("Module: Form1");
                DateTime thisDay = DateTime.Now;
                buf.Add("Time: " + thisDay.ToString());
                buf.Add("Ошибка: при создании или обработки лога aveva.");
                ReadWriteTextFile.Write_to_file(buf, Directory.GetCurrentDirectory() +
                                                "\\Errors.txt", 0);
            }
        }
예제 #4
0
        //основная функция
        public List <ResultTableRows> go_parsing(List <string> buf_of_lines, string server_host)
        {
            string   user_name_example    = @".*User name\W.*";
            string   host_name_example    = @".*Host name\W.*";
            string   status_example       = @".*Status.*";
            DateTime empty_date           = new DateTime(1, 1, 1, 1, 1, 1);
            List <ResultTableRows> result = new List <ResultTableRows>();
            LogsRows lr = new LogsRows(empty_date, "", "", "Aveva", "Aveva", server_host);


            try
            {
                for (int i = 0; i < buf_of_lines.Count; i++)
                {
                    //поиск имени пользователя
                    if (Regex.IsMatch(buf_of_lines.ElementAt(i), user_name_example))
                    {
                        string[] words = buf_of_lines.ElementAt(i).Split(new char[] { ' ' },
                                                                         StringSplitOptions.RemoveEmptyEntries);
                        lr.user = words[4];
                        continue;
                    }
                    //поиск имени хоста пользователя
                    if (Regex.IsMatch(buf_of_lines.ElementAt(i), host_name_example))
                    {
                        string[] words = buf_of_lines.ElementAt(i).Split(new char[] { ' ' },
                                                                         StringSplitOptions.RemoveEmptyEntries);
                        lr.host = words[4];
                        continue;
                    }
                    //поиск даты подключения
                    if (Regex.IsMatch(buf_of_lines.ElementAt(i), status_example))
                    {
                        string[] words = buf_of_lines.ElementAt(i).Split(new char[] { ' ' },
                                                                         StringSplitOptions.RemoveEmptyEntries);
                        //удаление лишнего нуля перед числом(день)
                        string a = words[7];
                        if ((a.ElementAt(0).ToString().Equals("0")) & (a.Count() > 1))
                        {
                            words[7] = words[7].Remove(0, 1);
                        }
                        //парсинг времени
                        string[] time = words[8].Split(new char[] { ':' },
                                                       StringSplitOptions.RemoveEmptyEntries);
                        for (int h = 0; h < time.Count(); h++)
                        {
                            a = time[h];
                            if ((a.ElementAt(0).ToString().Equals("0")) & (a.Count() > 1))
                            {
                                time[h] = time[h].Remove(0, 1);
                            }
                        }
                        DateTime connection_date = new DateTime(int.Parse(words[9]),
                                                                month_converter(words[6]), int.Parse(words[7]),
                                                                int.Parse(time[0]), int.Parse(time[1]), int.Parse(time[2]));
                        ResultTableRows rtr = new ResultTableRows(connection_date,
                                                                  empty_date, lr.user, lr.host, lr.vendor, lr.po, lr.servers_host);
                        result.Add(rtr);
                        continue;
                    }
                }
            }
            catch (Exception ex)
            {
                ReadWriteTextFile rwtf = new ReadWriteTextFile();
                List <string>     buf  = new List <string>();
                buf.Add("-----------------------------------------------");
                buf.Add("Module: AutoDeskParser");
                DateTime thisDay = DateTime.Now;
                buf.Add("Time: " + thisDay.ToString());
                buf.Add("Exception: " + ex.Message);
                buf.Add("Rows:");
                ReadWriteTextFile.Write_to_file(buf, Directory.GetCurrentDirectory() +
                                                "\\Errors.txt", 0);
                ReadWriteTextFile.Write_to_file(buf_of_lines, Directory.
                                                GetCurrentDirectory() + "\\Errors.txt", 0);
                result.Clear();
            }
            return(result);
        }