//ставим метку удаленного
        public void NSetDeletedAddresses(int jobID, string dbConnectionString)
        {

            /*
             * update AddressesMask
                set Deleted=1
                where Deleted is null and DateLastUpload<DATEADD(DAY,-5, CURRENT_TIMESTAMP)
                and JobID=N
                Где N - id'шник его джоба
             */
            try
            {
                DataDBService ddbs = new DataDBService();
                using(SqlConnection conn = ddbs.GetDBCon(dbConnectionString))
                if (conn != null)
                {
                    try
                    {
                        string sqlI = @"
                                    update AddressesMask
                                    set Deleted=1
                                    where Deleted is null and DateLastUpload<DATEADD(DAY,-5, CURRENT_TIMESTAMP)
                                    and JobID=" + jobID;

                        string sI = ddbs.ExecuteSQLCommand(sqlI, dbConnectionString);
                        if (!string.IsNullOrEmpty(sI))
                        {
                            ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка метки deleted. "
                                 + "jobid = " + jobID + ". " + sI);
                        }
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
            catch (Exception e)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка в DataDBExtention.NSetStatistics." + e.ToString());
            }
        }
Example #2
0
        protected bool IUDAdressesMask(string hostName, int jobID)
        {
            //из upload в адреса
            using(DataDBService ddbs = new DataDBService())
            using(SqlConnection conn = ddbs.GetDBCon(_dbConnectionString))
            try
            {
            if (conn != null)
                    {

                        //проставление deleted старым ссылкам с изменившимся хэшем (чтоб по 100 раз не перепарсивать)

                        string SQLstrU0 =
                        "update AddressesMask "+
                        "set Deleted = 1 "+
                        "where ID in "+
                        "( "+
                        "    select id "+
                        "    from AddressesMask a "+

                        "    where a.Address>'' and Deleted is null and exists " +

                        "    ("+
                        "        select * "+
                        "        from AddressesMaskUpload u "+

                        "        where u.Address = a.Address "+

                        "        and u.Hash != a.Hash " +
                        "        AND u.Host ='" + hostName + "' AND u.StreamNumber =" + _streamNumber+
                        "    ) " +
                        ")";

                        string sU0 = ddbs.ExecuteSQLCommand(SQLstrU0, _dbConnectionString);
                        if (!string.IsNullOrEmpty(sU0))
                        {
                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка добавление ссылок в AddressesMask. "
                                 + "jobid = " + jobID + ". " + sU0);
                            return false;
                        }

                        //insert того чего еще нет

                        string SQLstrI =
                        "INSERT INTO [AddressesMask] ([JobID],[Source_ref],[Address] ,[Sticker],[DateFirstUpload],[DateLastUpload],[Hash]) " +
                        "SELECT up.[JobID],s.ID,up.[Address],up.[Sticker], up.[DateUpload], up.[DateUpload],up.[Hash] " +
                        "FROM [AddressesMaskUpload] up " +
                        "LEFT JOIN PjobStat pj on up.jobid = pj.ID " +
                        "LEFT JOIN Sources s on s.Source = pj.Source " +
                        "WHERE up.[Hash] NOT IN (SELECT a.[Hash] FROM AddressesMask a) " +
                        "AND up.Host ='" + hostName + "' AND up.StreamNumber =" + _streamNumber;

                        string sI = ddbs.ExecuteSQLCommand(SQLstrI, _dbConnectionString);
                        if (!string.IsNullOrEmpty(sI))
                        {
                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка добавление ссылок в AddressesMask. "
                                 + "jobid = " + jobID + ". " + sI);
                            return false;
                        }

                        //update тех что уже есть
                        //string SQLstrU =
                        //    "UPDATE [AddressesMask] " +
                        //    "SET DateLastUpload = up.DateUpload " +
                        //    "FROM [AddressesMaskUpload] up " +
                        //    "WHERE up.[Hash] = [AddressesMask].[Hash] " +
                        //    "AND up.Host ='" + hostName + "' AND up.StreamNumber =" + _streamNumber;
                        string SQLstrU =
                        "UPDATE [AddressesMask] " +
                        "SET DateLastUpload = s.DateUpload " +
                        "FROM (" +
                                "select [Hash], DateUpload " +
                                "from [AddressesMaskUpload] up " +
                                "WHERE up.Host ='" + hostName + "' AND up.StreamNumber = " + _streamNumber +
                                " except " +
                                "select [Hash], DateLastUpload " +
                                "from [AddressesMask] up " +
                                ") s " +
                        "where s.Hash=[AddressesMask].Hash";

                string sU = ddbs.ExecuteSQLCommand(SQLstrU, _dbConnectionString);
                if (!string.IsNullOrEmpty(sU))
                {
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка обновления времени ссылок в AddressesMask. "
                         + "jobid = " + jobID + ". " + sU);
                    return false;
                }

                if (string.IsNullOrEmpty(sI) && string.IsNullOrEmpty(sU))
                {
                    //delete этих строк
                    string SQLstrD =
                        "DELETE FROM [AddressesMaskUpload] " +
                        "WHERE Host ='" + hostName + "' AND StreamNumber =" + _streamNumber;

                    string sD = ddbs.ExecuteSQLCommand(SQLstrD, _dbConnectionString);
                    if (!string.IsNullOrEmpty(sD))
                    {
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка удаления ссылок из AddressesMaskUpload. "
                             + "jobid = " + jobID + ". " + sD);

                        return false;
                    }
                }

                conn.Close();
                return true;
            }
            else
            {
                return false;
            }
            }
            catch (Exception ex) { Console.WriteLine(ex.Message); }
            finally
            { conn.Close(); conn.Dispose(); }
            return false;
        }
        public void NSetStatistics(int jobID, string dbConnectionString, string hostName, int streamNumber)
        {
            try
            {
                DataDBService ddbs = new DataDBService();
                using(SqlConnection conn = ddbs.GetDBCon(dbConnectionString))
                if (conn != null)
                {
                    try
                    {
                        string sqlI =
                        @"INSERT INTO [ParsersStatistics] ([JobID],[SourceID],[SourceDescription],[DateBegin],[DateEnd],[Complete],[NumberOfRestart],[CountAnnouncement],[NewAnnouncement],[UpdatedAnnouncement],[Host],[Stream]) 
                    SELECT top 1  " + jobID +
                            @",s.ID, pj.SourceDescription,pj.DateBegin, 

                            case 
                             when pj.DateEnd >= pj.DateBegin 
                                 then pj.DateEnd 
                            else NULL
                            end, 

                        pj.[Complete],
                        pj.[NumberOfRestart],
                        pj.[CountAds],

                        (select COUNT(a.id)
                        from AddressesMask a
                        left join [PJobUpdate] p on a.JobID = p.ID
                        where a.DateLastUpload between p.DateBegin and p.DateEnd + CONVERT(TIME,'00:00:05.000',104)
                        and p.ID = " + jobID + @"
                        and a.DateLastUpload=a.DateFirstUpload),

                        (select COUNT(a.id)
                        from AddressesMask a
                        left join [PJobUpdate] p on a.JobID = p.ID
                        where a.DateLastUpload between p.DateBegin and p.DateEnd + CONVERT(TIME,'00:00:05.000',104)
                        and p.ID = " + jobID + @"
                        and a.DateLastUpload>a.DateFirstUpload),'" +
                            hostName + "'," + streamNumber + @"
                    FROM [PJobView] pj
                    INNER JOIN [Sources] s on s.[Source] = pj.[Source] 
                    WHERE pj.ID = " + jobID;

                        string sI = ddbs.ExecuteSQLCommand(sqlI, dbConnectionString);
                        if (!string.IsNullOrEmpty(sI))
                        {
                            ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка добавленя записи в статистику"
                                 + "jobid = " + jobID + ". " + sI);
                        }
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
            catch (Exception e)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка в DataDBExtention.NSetStatistics." + e.ToString());
            }

        }
        private bool NSetJobState(int id, int currentPage, int countPagesTotal, int CountAnnouncement, int jobid, HtmlDocument doc)
        {
            // текущие дата и время
            DateTime dateTime = DateTime.Now; //new DateTime();
            string dt = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

            using (DataDBService ddbs = new DataDBService())
            {
                try
                {
                    //update
                    string SQLstr = "UPDATE [PJobUpdate] SET "
                                         + "  StartType=1"
                                         + " ,LastDate='" + dt + "'"
                        //+ " ,LastDocument= '" + doc.DocumentNode.InnerHtml.Replace("'", "''").Substring(0,999) + "'"
                                         + " ,CurrentPage=" + currentPage.ToString()
                                         + " ,CountPagesTotal=" + countPagesTotal.ToString()
                                         + " ,CountAnnouncement=CountAnnouncement+" + CountAnnouncement.ToString()
                                         + " ,Complete=" + (currentPage + 1 == _firstPage + _pageCount
                                                         || currentPage == countPagesTotal ? 1 : 0).ToString()
                        /* статус = 1  фиксируется в общем порядке
                        + (currentPage + 1 == _firstPage + _pageCount
                                        || currentPage == countPagesTotal ? " ,ParserStatus=1" : "")
                        */
                                         + (currentPage + 1 == _firstPage + _pageCount
                                         || currentPage == countPagesTotal ? " ,DateEnd='" + dt + "'" : "")
                                         + "  Where ID = " + id.ToString();
                    string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);

                    if (!string.IsNullOrEmpty(s))
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи текущего состояния задания. "
                            + jobid + ".");
                }
                finally
                { ddbs.Dispose();}
            }
            return (currentPage + 1 == _firstPage + _pageCount
                 || currentPage == countPagesTotal ? false : true);
        }
        public bool ToDB(string tableName, string connectionString)
        {
            if (this.items == null)
                return true;
            if (!this.items.Any())
                return true;
            error = "";
                DataDBService ddbs = new DataDBService();
                bool fl = false;
                List <string> fields=null;
                List<int> PublishedIDs_ = new List<int>();
                List<string> values = null;
                string[] values_field = null;
                string q = "";
                try
                {
                    ContainParsersDatafields(tableName, connectionString);
                    fields = ContainFields(tableName, connectionString, fields);
                    if (fields == null)
                        return false;
                    if (!fields.Any())
                        return false;
                    
                    for (int k = 0; k < this.items.Count() / 1000 + 1; k++)
                    {
                        int c = 0;
                        if (this.items.Count() < 1000)
                            c = this.items.Count();
                        else
                            if (this.items.Count() - k * 1000 > 1000)
                                c = 1000;
                        q = "insert into " + tableName + "(" + String.Join(", ", fields.ToArray()) + ") values ";
                        if (items == null || !this.items.Any())
                            return true;
                            else
                                c = this.items.Count() - k * 1000;
                        values = new List<string>();
                        values_field = new string[fields.Count];
                        //DataTable table = CreateDBTable();
                        if (this.items != null)
                        {
                            for (int i = 0; i < c; i++)
                            {
                                if (this.items[i] != null)
                                    if (this.items[i].GetType() != null)
                                        try
                                        {
                                            for (int j = 0; j < fields.Count; j++)
                                            {
                                                if (this.items[i].GetPropertyValue(fields[j]) != null)
                                                {
                                                    try
                                                    {
                                                        lock (fieldtypes)
                                                            if (!fieldtypes.Keys.Contains(fields[j]))
                                                                fieldtypes.Add(fields[j], this.items[i].GetPropertyValue(fields[j]).GetType().Name);
                                                    }
                                                    catch (Exception exxx) { ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка добавления полей в запрос " + exxx.Message);
                                                    Console.WriteLine("Ошибка добавления полей в запрос " + exxx.Message); fl = false; error = exxx.Message;
                                                    }
                                                    if (fieldtypes[fields[j]] == "String")
                                                        values_field[j] = ("'" + ((string)(this.items[i + k * 1000].GetPropertyValue(fields[j]))).Replace("'", "''") + "'");
                                                    else if (fieldtypes[fields[j]] == "Int32")
                                                        values_field[j] = (((int)(this.items[i + k * 1000].GetPropertyValue(fields[j]))).ToString());
                                                    else
                                                        values_field[j] = ("'" + ((this.items[i + k * 1000].GetPropertyValue(fields[j]))).ToString().Replace("'", "''") + "'");
                                                }
                                                else
                                                    values_field[j] = ("null");
                                            }
                                            values.Add( ("(" + String.Join(", ", values_field) + ")"));
                                            try
                                            {
                                                if (this.items[i].GetPropertyValue("AddressParsing") != null)
                                                    PublishedIDs_.Add((int)(this.items[i].GetPropertyValue("AddressParsing")));
                                            }
                                            catch { Console.WriteLine("Ошибка");}
                                        }
                                        catch (Exception exxx)
                                        {
                                            string sss = exxx.Message;
                                            ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка добавления объявлений в запрос " + sss + ", i = " + i.ToString());
                                            Console.WriteLine("Ошибка добавления объявлений в запрос " + sss + ", i = " + i.ToString());
                                            error = sss + " " + q;
                                            fl = false;
                                        }
                            }
                        }
                        if(values!=null)
                        if (values.Any())
                        {
                            q += String.Join(", ", values);
                            string s2 = ddbs.ExecuteSQLCommand(q, connectionString, 29);
                            if (this.items != null)
                                Console.WriteLine("Отправили " + this.items.Count() + " объектов");

                            if (PublishedIDs_!=null)
                            if (PublishedIDs_.Any())
                            {
                                if (!string.IsNullOrEmpty(s2))
                                {
                                    ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка записи объектов в БД " + s2 + " " + q);
                                    Console.WriteLine("Ошибка записи объектов в БД " + s2 + " " + q.Substring(0, 99));
                                    error = s2 + " " + q;
                                    fl = false;
                                }
                                else
                                {
                                        PublishedIDs.AddRange(PublishedIDs_);
                                    fl = true;
                                }
                            }
                            else
                                fl = false;
                        }
                        else
                            fl = true;
                    }
                    //return true;           
                }
                catch (Exception exx)
            {
                if (this.items != null)
                    Console.WriteLine("Не отправили " + this.items.Count() + " объектов"); 
                string s = exx.Message;
                ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка отправки объявлений2: " + exx.Message);
                Console.WriteLine("Ошибка отправки объявлений2: " + exx.Message);
                fl = false;
                error = s + " " + q;
            }
            finally { if (fields != null) { fields.Clear(); GC.SuppressFinalize(fields); } if (values != null)GC.SuppressFinalize(values); if (values_field != null)GC.SuppressFinalize(values_field); }
            if (!fl)
                    return fl;
           return fl;
        }
Example #6
0
        public void JobToNoBusy()
        {
            // при остановке сервиса
            // остающиеся в состоянии занято

            // имя хоста
            string hostName = Dns.GetHostName();
            //string ipAddress = "";

            // IP хоста
            IPHostEntry ipEntry = Dns.GetHostEntry(hostName);

            string SQLstr = "UPDATE PJobUpdate SET "
                  + "  StartType=6"
                  + " ,Busy=0, Start=1,  FirstPage = currentpage "
                  // --
                  + " Where "
                  + " Host = '" + hostName + "'"
                  //+ " and IP = '" + ipAddress + "'"
                  + " and Busy=1";

            using (DataDBService ddbs = new DataDBService())
            {
                string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);

                if (!string.IsNullOrEmpty(s))
                {
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "JobToNoBusy. не смог выставить Start=1, Busy =0, работавшим задачам при остановке сервиса");

                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи изменения состояния задания по зависанию в занято при остановке сервиса. "
                         + _parserName + " " + _sourceDescription + ". " + s);
                }
            }
        }
Example #7
0
        public void JobSchedule()
        {
            // StartUp - не смотрим
            // Начальная страница обычного задания - из поля FirstPageForSchedule
            // Даты старта - из DateStart, если совпадает с текущей датой - текущая дата, иначе 01.01.1900 (скалярная ф-я sfGetJobDate)
            // Времена старта - истина, если текущее время больше не более, чем на minutes минут времени старта, ложь (скалярная ф-я sfGetJobTime)
            // Время в часах с момента DateEnd+TimeEnd - в часах (скалярная ф-я sfGetHoursFromEnd)


            if (GetTuningScheduler()) // данному парсеру разрешена работа планировщиком?
            {
                //StreamWriter _fileWrite;

                //добавлено 24.11.2014

                using (DataDBService ddbs = new DataDBService())
                {
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п1. начинаю...");

                    // ежедневное 
                    //берем id, которые не запущены и не выствлен старт соответствуют (кроме авито,)
                    string SQLstr = "UPDATE PJobUpdate SET "
                                 + "  StartType=2"
                                 + " ,Start=1"
                                 + " ,NumberOfRestart = 0"
                                 + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)"
                                 + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)"
                        // --
                                 + " WHERE ID in  "
                                 + @"
                                    (
                                    SELECT DISTINCT ID FROM PJobView jv 
                                    OUTER APPLY  (select word from	dbo.split (TimeStart, '%,%') )spl
                                    WHERE StartUp=1 
                                    and
                                    
                                    (
                                    --сегоднящние
                                    (
                                    --запланированное время старта меньше текущего времени.
                                     substring(spl.word, patindex('%[^\.]%', spl.word),40)< SUBSTRING(CONVERT(nvarchar(32),CONVERT (time, CURRENT_TIMESTAMP)),0,CHARINDEX('.',CONVERT(nvarchar(32),CONVERT (time, CURRENT_TIMESTAMP)),0)-3)

                                    --дата начала парсинга меньше текущей даты +запланированное время старта (то есть сегодня не стартовала в нужное время)
                                    and (CONVERT(datetime,DateBegin,104) < convert(datetime,CONVERT (date, CURRENT_TIMESTAMP)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108)
                                    --для задач, которые стартуют более одного раза, чтобы выводились остаточные разы
                                    or CONVERT(datetime,DateEnd,104) < convert(datetime,CONVERT (date, CURRENT_TIMESTAMP)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108))
                                    )

                                    or
                                    --для вчерашних

                                    ( 
                                    --дата начала парсинга меньше текущей даты +запланированное время старта (то есть сегодня не стартовала в нужное время)
                                    CONVERT(datetime,DateBegin,104) < convert(datetime,cast (DATEADD(DAY,-1, CURRENT_TIMESTAMP) as date)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108)
                                    --для задач, которые стартуют более одного раза, чтобы выводились остаточные разы
                                    or CONVERT(datetime,DateEnd,104)< convert(datetime,cast (DATEADD(DAY,-1, CURRENT_TIMESTAMP) as date)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108)
                                    )
                                    )
                                    --and ParserName not like 'avito%' 
                                    and isnull(Busy,0)=0 and isnull(Start,0)=0 
                                    )
                                ";
                    string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {

                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п1. не смог выставить Start задачам " + s);
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п1. не смог выставить Start задачам"
                            + _parserName + " " + _sourceDescription + ". " + s);
                    }



                    s = "";
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п2. начинаю...");
                    //старт раз в 12 часов для тех, где превышено количество рестартов
                    SQLstr = "UPDATE PJobUpdate SET "
                              + "  StartType=3"
                              + " ,Start=1"
                              + " ,NumberOfRestart = 0"
                              + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)"
                              + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)"
                        // --разница между текущим временем и последней отпиской в базу больше 12 часов
                              + @" Where ID in
                                (
                                SELECT ID FROM PJobView where
                                StartUp=1
                                and NumberOfRestart > AllowRestarts 
                                --and ParserName not like 'avito%' 
                                and DATEDIFF(HOUR, CONVERT(datetime,LastDate,104), CURRENT_TIMESTAMP) > 12
                                )";
                    s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {
                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п2. не смог выставить Start задачам " + s);

                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, " Schedule. п2. не смог выставить Start задачам, где NumberOfRestart>AllowRestarts и LastTime>12h"
                             + _parserName + " " + _sourceDescription + ". " + s);
                    }




                    s = "";
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п3. начинаю...");

                    //24/11/2014 не совсем понимаю эту ситуацию, видо для тех, кто остался висеть после рестарта сервиса, но сейчас в JobToNoBusy() добавлено выставелние Start=1, скорее всего эта ситуация не повторится
                    // незавершенные / незанятые / не в старте (подхватываются в т.ч. после рестарта сервиса)
                    SQLstr = "UPDATE PJobUpdate SET "
                           + "  StartType=4"
                           + " ,Start=1"
                        // --
                           + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)"
                           + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)"
                        // --
                           + " Where isnull(Complete,0)=0"
                        //+ " and isnull(Startup,0)=1" //здесь этого не надо
                           + " and isnull(Start,0)=0"
                           + " and isnull(Busy,0)=0"
                           + " and isnull(CurrentPage,0)+1 < isnull(FirstPage,1)+isnull(PageCount,1)" // страниц меньше
                           + " and isnull(NumberOfRestart,0) > 0" // старты были
                           + " ";
                    s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {
                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п3. не смог выставить Start задачам " + s);
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п3. Ошибка записи изменения состояния задания по незавершено незанято."
                             + _parserName + " " + _sourceDescription + ". " + s);
                    }



                    s = "";
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п4. начинаю...");
                    // зависшие в состоянии занято 
                    //change - 24/11/2014
                    SQLstr = "UPDATE PJobUpdate SET "
                          + "  StartType=5"
                          + " ,Busy=0, FirstPage = case when CurrentPage > 1 then CurrentPage-1 else 1 end, Start=1 "
                        // --
                          + @" Where ID in
                                (
                                SELECT ID FROM PJobView 
                                where  DATEDIFF(MINUTE, CONVERT(datetime,LastDate,104),CURRENT_TIMESTAMP) > ResetTimeInMinutes 
                                and isnull(Startup,0)=1 and isnull(Busy,0)=1 
                                ) ";
                    s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {
                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п4. не смог выставить Start задачам. " + s);

                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п4. не смог выставить Start зависшим задачам (Busy=1)"
                             + _parserName + " " + _sourceDescription + ". " + s);
                    }
                }

            }
        }
Example #8
0
        private void SetJobStatus(int id, int status)
        {
            using (DataDBService ddbs = new DataDBService())
            {
                //update
                string SQLstr = "UPDATE [PJobUpdate] SET "
                                      + "  StartType=1"
                                      + " ,ParserStatus=" + status.ToString()
                                      + " Where ID = " + id.ToString();
                string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);

                if (!string.IsNullOrEmpty(s))
                {
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Ошибка записи текущего состояния задания.");

                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи текущего состояния задания. "
                        + _parserName + " " + _sourceDescription + ". " + s + (status != 1 ? "Ошибка: статус " + status.ToString() + "." : ""));
                }

                if (status != 1)
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, _startPage, "Ошибка: статус " + status.ToString() + ". jobID=" + _ID);
            }

            //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);
        }
Example #9
0
        private bool SetJobToStartOrStop(bool start)
        {
            // имя хоста
            string hostName = Dns.GetHostName();
            string ipAddress = "";

            // IP хоста
            IPHostEntry ipEntry = Dns.GetHostEntry(hostName);
            IPAddress[] addr = ipEntry.AddressList;

            for (int i = 0; i < addr.Length; i++)
            {
                ipAddress = ipAddress + addr[i].ToString() + ";";
            }
            ipAddress = ipAddress.Substring(0, ipAddress.Length - 1);

            // текущие дата и время
            DateTime dateTime = DateTime.Now; //new DateTime();
            //string date = dateTime.Date.ToString("dd.MM.yyyy");
            //string time = dateTime.ToString("HH:mm:ss");
            string dt = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

            using (DataDBService ddbs = new DataDBService())
            {
                if (_numberOfRestart <= _allowRestarts)
                {

                    //версия на 26.11 для того чтобы при рестарте задачи мы не зануляли количество спарсенных ссылок 
                    //и не перезаписывали дату начала парсинга задачи - позволит не потерять новые и обновленные ссылки
                    string SQLstr = "UPDATE PJobUpdate SET "
                            + "  StartType=1"
                            + " ,Busy=" + (start ? 1 : 0).ToString()
                            + (!start ? ",Host = ''" : " ,Host = '" + hostName + "'")
                            + (!start ? ",IP = ''" : " ,IP = '" + ipAddress + "'")
                            + (!start ? " ,ServiceMessage= 'отработал +" + _parserName + " " + _streamNumber.ToString() + " " + dt + "'"
                                      : " ,ServiceMessage= 'стартовал +" + _parserName + " " + _streamNumber.ToString() + " " + dt + "'")
                            + (start ? " ,Start=0" : "")
                            + (start ? " ,NumberOfRestart=isnull(NumberOfRestart,0)+1" : "")
                            + (start ? " ,LastDocument=''" : "")
                            + (start ? (_numberOfRestart > 0 ? "" : " ,CurrentPage=0") : "")
                            + (start ? " ,CountPagesTotal=0" : "")
                        //+ (start ? (_numberOfRestart > 0 ? "" : " ,CountAnnouncement=0") : "")
                            + (start ? (_numberOfRestart > 0 ? (_firstPage == 1 ? " ,CountAnnouncement=0" : "") : " ,CountAnnouncement=0") : "")
                            + (start ? " ,Complete=0" : "")
                            + (start ? " ,ParserStatus=0" : "")
                            + (start ? (_numberOfRestart > 0 ? "" : " ,DateBegin='" + dt + "'") : "")
                            + (start ? " ,LastDate='" + dt + "'" : "")
                            + "  Where ID = " + _ID.ToString();

                    string s2 = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s2))
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за ошибки записи задания. "
                            + _parserName + " " + _sourceDescription + ". " + s2);
                    if (_numberOfRestart + 1 > _allowRestarts)
                    {
                        if (!start)
                        {
                            //если превышено количество рестартов. пишем в статистику
                            DataDBExtention ddbe = new DataDBExtention();
                            ddbe.NSetStatistics(_ID, _dbConnectionString, hostName, _streamNumber);

                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за превышения заданного количества рестартов "
                            + _parserName + " " + _sourceDescription + ".");
                        }
                        return false;
                    }
                    return (string.IsNullOrEmpty(s2) ? true : false);
                }
                else // такое не случится, если не будет нарушена логика обработки
                {
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за превышения заданного количества рестартов "
                    + _parserName + " " + _sourceDescription + ".");
                    return false;
                }
            }
        }
Example #10
0
 public static bool CleanPJobUpdate(string _dbConnectionString)
 {
     string hostName = Dns.GetHostName();
     string SQLstr = "UPDATE PJobUpdate SET Busy=0 where host='"+ hostName + "' and busy=1";
     using (DataDBService ddbs = new DataDBService())
     {
         string s2 = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
         if (String.IsNullOrEmpty(s2))
             return true;
     }
     return false;
 }