コード例 #1
0
        protected virtual void Login()
        {
            try
            {
                if (AppContext.Principal != null)
                {
                    AppContext.Principal.Logout();
                }
                PrincipalBase.Login();

                MyLogger.LogText(string.Format("CONNECTED TO {0}:{1} AS USER {2}",
                                               SettingsMng.Instance.GetActiveServer(),
                                               SettingsMng.Instance.GetDBName(),
                                               SettingsMng.Instance.GetDBUser()),
                                 "Service::Login");
            }
            catch (Exception ex)
            {
                MyLogger.LogException(ex, "ServiceBase::Login");
                if (AppContext.Principal != null)
                {
                    AppContext.Principal.Close();
                }
            }
        }
コード例 #2
0
        public void Run(object parameter = null)
        {
            Status = CheckStatus((ISchemaInfo)parameter);

            if (Status != EComponentStatus.READY)
            {
                return;
            }

            Status = EComponentStatus.WORKING;

            try
            {
                //Before calling. Maybe could be an error
                UpdateLastExecution((ISchemaInfo)parameter);

                Status = DoRun(parameter);

                Status = EComponentStatus.OK;

                //After calling. Real last update
                UpdateLastExecution((ISchemaInfo)parameter);

                MyLogger.LogText("COMPLETE", string.Format("{0}::Run", ID));
            }
            catch (Exception ex)
            {
                MyLogger.LogText("FINALIZED WITH ERROR", string.Format("{0}::Run", ID));
                MyLogger.LogException(ex, string.Format("{0}::Run", ID));
                Status = EComponentStatus.ERROR;
            }

            return;
        }
コード例 #3
0
 protected override void OnStart(string[] args)
 {
     try
     {
         Initialize();
     }
     catch (Exception ex)
     {
         MyLogger.LogException(ex, "ServiceBase::OnStart");
         Dispose();
     }
 }
コード例 #4
0
        protected void StartTimer()
        {
            try
            {
                TimerGuid = TimerMng.Instance.InitTimer(ETimerType.System, ServiceTimerController, PollInterval);

                MyLogger.LogText(string.Format("Service Timer Started. TICK EVERY {0}s", PollInterval), "Service::StartTimer");
            }
            catch (Exception ex)
            {
                MyLogger.LogException(ex, "ServiceBase::StartTimer");
            }
        }
コード例 #5
0
 protected override void OnStop()
 {
     try
     {
         Close();
     }
     catch (Exception ex)
     {
         MyLogger.LogException(ex, "ServiceBase::OnStop");
     }
     finally
     {
         MyLogger.LogText("Service Stopped", "ServiceBase::OnStop");
     }
 }
コード例 #6
0
        protected virtual void Execute()
        {
            try
            {
                //To avoid overlapped executions
                if (Running)
                {
                    MyLogger.LogText("LAST EXECUTION IS STILL BUSY. NOT EXECUTED TO AVOID OVERLAPPING", "ServiceBase::Execute");
                    return;
                }

                Running = true;

                foreach (ISchemaInfo item in Schemas)
                {
                    MyLogger.LogText(String.Format("PROCESSING SCHEMA '{0}'...", item.Name), "ServiceBase::Execute");

                    if (!LoadSchema(item))
                    {
                        MyLogger.LogText(String.Format("ERROR LOADING SCHEMA {0}", item.Name), "ServiceBase::Execute");
                        Running = false;
                        return;
                    }

                    foreach (KeyValuePair <string, ICronJob> cronjob in CronJobs)
                    {
                        Thread cronThread = ExecuteTask(cronjob.Value, item);
                        while (cronThread != null && cronThread.IsAlive)
                        {
                        }
                        ;
                    }
                }

                Running = false;
            }
            catch (Exception ex)
            {
                Running = false;
                MyLogger.LogException(ex, "ServiceBase::Execute");

                Login();
            }
        }
コード例 #7
0
 protected virtual void LoadCronJobs()
 {
     try
     {
         foreach (KeyValuePair <string, ICronJob> item in CronJobs)
         {
             if (item.Value.Status == EComponentStatus.DISABLED)
             {
                 MyLogger.LogText(string.Format("{0} is DISABLED", item.Key), "ServiceBase::LoadCronjobs");
             }
             else
             {
                 MyLogger.LogText(string.Format("{0} is ENABLED EVERY {1}s", item.Key, item.Value.Interval), "ServiceBase::LoadCronjobs");
             }
         }
     }
     catch (Exception ex)
     {
         MyLogger.LogException(ex, "ServiceBase::LoadCronJobs");
     }
 }
コード例 #8
0
        protected virtual bool LoadSchema(ISchemaInfo schema)
        {
            try
            {
                if (AppContext.Principal == null)
                {
                    Login();
                }

                AppContext.Principal.ChangeUserSchema(schema, true);

                return(AppContext.Principal != null);
            }
            catch (Exception ex)
            {
                MyLogger.LogException(ex, "ServiceBase::LoadSchema");
                if (AppContext.Principal != null)
                {
                    AppContext.Principal.Close();
                }

                return(false);
            }
        }
コード例 #9
0
        protected static void DoCreateBackup(string dbHost, string dbName, string dbUser, List <ISchemaInfo> schemas, string outputFile)
        {
            System.Diagnostics.Process process = null;

            try
            {
                //Obtención de la ruta de pg_dump
                string path_pg_dump = Reg32GetPGBinPath() + Paths.PG_DUMP;

                if (path_pg_dump == string.Empty)
                {
                    return;
                }

                if (!File.Exists(path_pg_dump))
                {
                    throw new iQException(Errors.BACKUP_APP_NOT_FOUND);
                }

                string msg = "Creating db credentials file " + outputFile;
                MyLogger.LogText(msg, "AppControllerBase::DoCreateBackup");
                Console.WriteLine(msg);

                string db_pass = SettingsMng.Instance.GetDBPassword();

                //Creamos el fichero pgpass.conf para que no salte el prompt pidiendo password
                string pgpassPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
                pgpassPath += Paths.PG_PASS;
                if (!Directory.Exists(Path.GetPathRoot(pgpassPath)))
                {
                    Directory.CreateDirectory(Path.GetPathRoot(pgpassPath));
                }
                StreamWriter sw = File.CreateText(pgpassPath);
                sw.WriteLine(dbHost + ":*:*:" + dbUser + ":" + db_pass);
                sw.Close();

                if (!Directory.Exists(Path.GetDirectoryName(outputFile)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(outputFile));
                }

                //Crea un nuevo proceso
                process = new System.Diagnostics.Process();

                if (schemas == null)
                {
                    //Ejecución del pg_dump
                    process.StartInfo.FileName  = path_pg_dump;
                    process.StartInfo.Arguments =
                        string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}"
                                      , new string[] {
                        "--format=c"
                        , "--ignore-version"
                        , "--oids"
                        , "--blobs"
                        , "--verbose"
                        , "--host=" + dbHost
                        , "-U " + dbUser
                        , @"--file=""" + string.Format(outputFile, "FULL") + @""""
                        , @"""" + dbName + @""""
                    }
                                      );
                    process.Start();
                    process.WaitForExit();
                }
                else
                {
                    //COMMON SCHEMA
                    try
                    {
                        //Ejecución del pg_dump
                        process.StartInfo.FileName  = path_pg_dump;
                        process.StartInfo.Arguments =
                            string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9}"
                                          , new string[] {
                            "--format=c"
                            , "--ignore-version"
                            , "--oids"
                            , "--blobs"
                            , "--verbose"
                            , "--host=" + dbHost
                            , "-U " + dbUser
                            , @"--file=""" + string.Format(outputFile, AppContext.CommonSchema) + @""""
                            , "--schema=" + AppContext.CommonSchema
                            , @"""" + dbName + @""""
                        }
                                          );

                        process.Start();
                        process.WaitForExit();
                    }
                    catch (Exception ex)
                    {
                        MyLogger.LogException(ex, "AppControllerBase::DoCreateBackup");
                    }

                    //DETAILED SCHEMAS
                    foreach (ISchemaInfo schema in schemas)
                    {
                        try
                        {
                            //Ejecución del pg_dump
                            process.StartInfo.FileName  = path_pg_dump;
                            process.StartInfo.Arguments =
                                string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9}"
                                              , new string[] {
                                "--format=c"
                                , "--ignore-version"
                                , "--oids"
                                , "--blobs"
                                , "--verbose"
                                , "--host=" + dbHost
                                , "-U " + dbUser
                                , @"--file=""" + string.Format(outputFile, schema.SchemaCode) + @""""
                                , "--schema=" + schema.SchemaCode
                                , @"""" + dbName + @""""
                            }
                                              );

                            process.Start();
                            process.WaitForExit();
                        }
                        catch (Exception ex)
                        {
                            MyLogger.LogException(ex, "AppControllerBase::DoCreateBackup");
                        }
                    }
                }

                //Borramos el fichero pgpass.conf
                File.Delete(pgpassPath);

                SettingsMng.Instance.SetBackupsLastDate(DateTime.Now);
                SettingsMng.Instance.SaveSettings();
            }
            catch (Exception ex)
            {
                MyLogger.LogException(ex, "AppControllerBase::DoCreateBackup");
                if (process != null)
                {
                    MyLogger.LogText("process.StartInfo.Arguments = " + process.StartInfo.Arguments);
                }
            }
        }
コード例 #10
0
        protected Thread ExecuteTask(ICronJob cronjob, object parameter)
        {
            if (cronjob == null)
            {
                return(null);
            }

            try
            {
                switch (cronjob.CheckStatus((ISchemaInfo)parameter))
                {
                case EComponentStatus.DISABLED:
                {
                    if (LogLevel == ELogLevel.ALL)
                    {
                        MyLogger.LogText(string.Format("{0} DISABLED", cronjob.ID), "ServiceBase::ExecuteTask");
                    }
                    return(null);
                }

                case EComponentStatus.WORKING:
                {
                    if (LogLevel == ELogLevel.ALL || LogLevel == ELogLevel.WARN)
                    {
                        MyLogger.LogText(string.Format("{0} STILL BUSY", cronjob.ID), "ServiceBase::ExecuteTask");
                    }
                    return(null);
                }

                case EComponentStatus.UNAVAILABLE:
                {
                    if (LogLevel == ELogLevel.ALL)
                    {
                        MyLogger.LogText(string.Format("{0} OUT OF DATE ", cronjob.ID), "ServiceBase::ExecuteTask");
                    }
                    return(null);
                }

                case EComponentStatus.READY:
                {
                    if (LogLevel == ELogLevel.ALL || LogLevel == ELogLevel.WARN)
                    {
                        MyLogger.LogText(string.Format("{0} STARTED ", cronjob.ID), "ServiceBase::ExecuteTask");
                    }
#if DEBUG
                    cronjob.Run(parameter);
                    return(null);
#else
                    Thread taskthread = new Thread(new ParameterizedThreadStart(cronjob.Run));
                    taskthread.Start(parameter);
                    return(taskthread);
#endif
                }
                }

                return(null);
            }
            catch (Exception ex)
            {
                MyLogger.LogException(ex, "ServiceBase::ExecuteTask");
                return(null);
            }
        }