Ejemplo n.º 1
0
        /// <summary>
        /// Pobiera informację o najbliższym zadaniu do wykonania
        /// </summary>
        /// <param name="instance">Identyfikator instancji workera</param>
        /// <returns>
        /// Informacje o zadaniu, napis "0", gdy nic nie zaplanowano
        /// lub komunikat o błędzie z bazy danych
        /// </returns>
        public static (FtpScheduleModel, string) GetNextSync(int instance)
        {
            var           ret  = new FtpScheduleModel();
            SqlConnection conn = new SqlConnection(IFtpDiligentDatabaseClient.connStr);
            SqlCommand    cmd  = conn.CreateCommand();

            cmd.CommandText = "exec [ftp].[sp_select_next_sync] @ins_xx";
            cmd.Parameters.Add("ins_xx", SqlDbType.Int).Value = instance;

            try {
                conn.Open();
                var sdr = cmd.ExecuteReader(CommandBehavior.SingleRow);
                if (!sdr.Read())
                {
                    return(ret, "0");
                }

                ret.xx           = sdr.GetInt32(0);
                ret.name         = sdr.GetString(1);
                ret.nextSyncTime = sdr.GetDateTimeOffset(2).LocalDateTime;
                sdr.Close();
            } catch (SqlException oex) {
                return(ret, oex.Message);
            } catch (Exception sex) {
                return(ret, sex.Message);
            } finally {
                conn.Close();
            }

            return(ret, string.Empty);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Tworzenie, modyfikacja, usunięcie harmonogramu transferów FTP
        /// </summary>
        /// <param name="schedule">Definicja harmonogramu</param>
        /// <param name="mode">Rodzaj operacji</param>
        /// <returns>Komunikat o ewentualnym błędzie</returns>
        public static string ModifySchedule(FtpScheduleModel schedule, eDbOperation mode)
        {
            SqlCommand cmd = guiConn.CreateCommand();

            cmd.CommandText = "exec [ftp].[sp_modify_schedule] @mode,@xx,@end_xx,@nazwa,@start,@stop,@stride,@disabled";
            var par = cmd.Parameters;

            par.Add("mode", SqlDbType.Int).Value           = (int)mode;
            par.Add("xx", SqlDbType.Int).Value             = schedule.xx;
            par.Add("end_xx", SqlDbType.Int).Value         = schedule.endXX;
            par.Add("nazwa", SqlDbType.VarChar, 128).Value = schedule.name;
            par.Add("start", SqlDbType.SmallInt).Value     = (short)schedule.startSpan.TotalMinutes;
            par.Add("stop", SqlDbType.SmallInt).Value      = (short)schedule.stopSpan.TotalMinutes;
            par.Add("stride", SqlDbType.SmallInt).Value    = schedule.stride;
            par.Add("disabled", SqlDbType.TinyInt).Value   = !schedule.enabled;

            if (mode == eDbOperation.Insert)
            {
                return(ExecuteNonQueryStoreKey(cmd));
            }
            else
            {
                return(ExecuteNonQuery(cmd));
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Pobiera informację o najbliższym zadaniu do wykonania
        /// </summary>
        /// <param name="instance">Identyfikator instancji workera</param>
        /// <returns>
        /// Informacje o zadaniu, napis "0", gdy nic nie zaplanowano
        /// lub komunikat o błędzie z bazy danych
        /// </returns>
        public static (FtpScheduleModel, string) GetNextSync(int instance)
        {
            var ret = new FtpScheduleModel();
            OracleConnection conn = new OracleConnection(IFtpDiligentDatabaseClient.connStr);
            OracleCommand    cmd  = conn.CreateCommand();

            cmd.CommandText = "begin select_next_sync(:ins_xx,:refCur); end;";
            cmd.Parameters.Add("ins_xx", OracleDbType.Int32).Value         = instance;
            cmd.Parameters.Add("refCur", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

            try {
                conn.Open();
                var odr = cmd.ExecuteReader(CommandBehavior.SingleRow);
                if (!odr.Read())
                {
                    return(ret, "0");
                }

                ret.xx           = (int)odr.GetDecimal(0);
                ret.name         = odr.GetString(1);
                ret.nextSyncTime = odr.GetDateTime(2);
                odr.Close();
            } catch (OracleException oex) {
                return(ret, OracleMessageFormatter.FirstLine(oex.Message));
            } catch (Exception sex) {
                return(ret, sex.Message);
            } finally {
                conn.Close();
            }

            return(ret, string.Empty);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Tworzenie, modyfikacja, usunięcie harmonogramu transferów FTP
        /// </summary>
        /// <param name="schedule">Definicja harmonogramu</param>
        /// <param name="mode">Rodzaj operacji</param>
        /// <returns>Komunikat o ewentualnym błędzie</returns>
        public static string ModifySchedule(FtpScheduleModel schedule, eDbOperation mode)
        {
            OracleCommand cmd = guiConn.CreateCommand();

            cmd.CommandText = "begin modify_schedule2(:mode,:xx,:end_xx,:nazwa,:start,:stop,:stride,:disabled); end;";
            var par = cmd.Parameters;

            par.Add("mode", OracleDbType.Int32).Value          = (int)mode;
            par.Add("xx", OracleDbType.Int32).Value            = schedule.xx;
            par.Add("end_xx", OracleDbType.Int32).Value        = schedule.endXX;
            par.Add("nazwa", OracleDbType.Varchar2, 128).Value = schedule.name;
            par.Add("start", OracleDbType.Int16).Value         = (short)schedule.startSpan.TotalMinutes;
            par.Add("stop", OracleDbType.Int16).Value          = (short)schedule.stopSpan.TotalMinutes;
            par.Add("stride", OracleDbType.Int16).Value        = schedule.stride;
            par.Add("disabled", OracleDbType.Byte).Value       = !schedule.enabled;

            if (mode == eDbOperation.Insert)
            {
                return(ExecuteNonQueryStoreKeyAsync(cmd, 1).Result);
            }
            else
            {
                return(ExecuteNonQueryAsync(cmd).Result);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Wykonuje transfer plików na podstawie zaplanowanej pozycji harmonogramu
        /// Jest uruchamiana przez dispatcher o odpowiedniej porze i tylko dla poprawnych pozycji harmonogramu
        /// </summary>
        /// <param name="iSchXX">
        /// Jeœli dodatni, to identyfikator pozycji harmonogramu uruchomionej automatycznie,
        /// jeœli ujemny, to identyfikator endpointu, dla którego transfer uruchomiono rêcznie
        /// </param>
        public void ExecuteFtpTransfer(object o)
        {
            FtpScheduleModel schedule = (FtpScheduleModel)o;
            int key = schedule.xx;

            var(endpoint, errmsg) = FtpDiligentDatabaseClient.SelectEndpoint(key).Result;
            if (!string.IsNullOrEmpty(errmsg))
            {
                if (errmsg == "0")
                {
                    errmsg = "Brak definicji endpointu dla harmonogramu: " + key;
                }

                m_mainWnd.ShowErrorInfo(eSeverityCode.Error, errmsg);
                return;
            }

            string       remote = endpoint.host + endpoint.remDir;
            FtpSyncModel log    = new FtpSyncModel()
            {
                xx = key, syncTime = endpoint.nextSync
            };
            IFtpUtility   fu         = IFtpUtility.Create(endpoint, this, m_mainWnd.m_syncMode);
            eFtpDirection eDirection = endpoint.direction;

            if (key < 0)
            {
                m_mainWnd.ShowErrorInfo(eSeverityCode.Message, $"Rozpoczêto transfer plików z serwera {remote}");
            }
            else
            {
                m_mainWnd.ShowErrorInfo(eSeverityCode.Message, $"Rozpoczêto zaplanowany transfer plików {schedule.name} z serwera {remote}");
            }

            try { // transferuj pliki
                #region pobieranie
                if (eDirection.HasFlag(eFtpDirection.Get))
                {
                    if (!fu.Download(ref log))
                    {
                        m_mainWnd.ShowErrorInfo(eSeverityCode.TransferError, $"Pobieranie plików z serwera {remote} zakoñczy³o siê niepowodzeniem");
                        return;
                    }

                    // loguj zmiany
                    int filesTransfered = log.fileNames.Length;
                    if (filesTransfered == 0)
                    {
                        FtpDiligentDatabaseClient.LogActivation(log);
                        m_mainWnd.ShowErrorInfo(eSeverityCode.Message, $"Na serwerze {remote} nie znaleziono plików odpowiednich do pobrania");
                    }
                    else
                    {
                        log.direction = eFtpDirection.Get;
                        FtpDiligentDatabaseClient.LogSync(log);
                        m_mainWnd.ShowErrorInfo(eSeverityCode.Message, $"Pobrano {filesTransfered} plików z serwera {remote}");
                    }
                }
                #endregion

                #region wstawianie
                if (eDirection.HasFlag(eFtpDirection.Put))
                {
                    if (!fu.Upload(ref log))
                    {
                        m_mainWnd.ShowErrorInfo(eSeverityCode.TransferError, $"Wstawianie plików na serwer {remote} zakoñczy³o siê niepowodzeniem");
                        return;
                    }

                    // loguj zmiany
                    int filesTransfered = log.fileNames.Length;
                    if (filesTransfered == 0)
                    {
                        FtpDiligentDatabaseClient.LogActivation(log);
                        m_mainWnd.ShowErrorInfo(eSeverityCode.Message, $"Nie znaleziono plików do wstawienia na serwer {remote}");
                    }
                    else
                    {
                        log.direction = eFtpDirection.Put;
                        FtpDiligentDatabaseClient.LogSync(log);
                        m_mainWnd.ShowErrorInfo(eSeverityCode.Message, $"Wstawiono {filesTransfered} plików na serwer {remote}");
                    }
                }
                #endregion
            } catch (FtpUtilityException fex) {
                m_mainWnd.ShowErrorInfo(eSeverityCode.TransferError, fex.Message);
            } catch (Exception se) {
                m_mainWnd.ShowErrorInfo(eSeverityCode.TransferError, se.Message);
            }
        }