コード例 #1
0
ファイル: CmdExecutorFacade.cs プロジェクト: cloverSA/GM
        public static Task <string> ExecuteCmdAsync(IGammaMachineInfo machine, string single_command)
        {
            string           filename = GetFileNameFromCmd(single_command);
            string           args     = GetArgsFromCmd(single_command);
            CmdExecutorProxy client   = GammaProxyFactory.GetCmdExecutorProxy(machine);

            return(client.ShellExecutorAsync(filename, args));
        }
コード例 #2
0
 /*
  *  Run Commands on machine in sequence, one after another.
  *  And the result will be returned when all of them are finished.
  */
 public Task <string> StartCmdInSeqTransaction(IGammaMachineInfo machine, string[] commands)
 {
     return(Task.Run(() => {
         var trx = GammaClientTXFactory.GetCmdExecTX(machine, commands);
         AddTransaction(trx);
         return StartTransactions(trx, machine, commands);
     }));
 }
コード例 #3
0
        /*
         *  Same as StartTransaction*S*, but single command.
         */
        private Task <string> StartTransaction(IGammaClientTransaction trx, IGammaMachineInfo machine, string command)
        {
            trx.TransactionStarted();
            var task = GammaCmdExecutorServiceFacade.ExecuteCmdAsync(machine, command);

            BindCmdTaskWithTranscation(task, trx);
            return(task);
        }
コード例 #4
0
 /*
  * QA tools transactions
  */
 public Task <string> StartQAToolsTransaction(IGammaMachineInfo machine, GammaTXQATools tool, object qatoolArgs = null)
 {
     return(Task.Run(() =>
     {
         var trx = GammaClientTXFactory.GetQAToolsTX(machine, tool);
         AddTransaction(trx);
         return StartTransactions(trx, machine, tool, qatoolArgs);
     }));
 }
コード例 #5
0
 /*
  * Clear environment transactions
  */
 public Task <string> StartClearEnvTransaction(IGammaMachineInfo machine, GammaTXClearEnv clear_step)
 {
     return(Task.Run(() =>
     {
         var trx = GammaClientTXFactory.GetClearEnvTX(machine, clear_step);
         AddTransaction(trx);
         return StartTransactions(trx, machine, clear_step);
     }));
 }
コード例 #6
0
 /*
  * return the task that run the command on the node with seq# not changed.
  * if the command are considered as in the same group, they should use this to start the transaction.
  */
 private Task <string> StartCmdGroupTransaction(IGammaMachineInfo machine, string command)
 {
     return(Task.Run(() => {
         var trx = GammaClientTXFactory.GetCmdExecTX(machine, command);
         GammaClientTXLogger.GetInstance().RegisterTransaction(trx);
         AddTransaction(trx, seq);
         return StartTransaction(trx, machine, command);
     }));
 }
コード例 #7
0
        internal static List <GammaClientTransaction> GetCmdParallelExecTX(IGammaMachineInfo machine, string[] commands)
        {
            var transactions = new List <GammaClientTransaction>();

            foreach (var cmd in commands)
            {
                transactions.Add(GetCmdExecTX(machine, commands));
            }
            return(transactions);
        }
コード例 #8
0
        /*
         * if the command is being run as parallel, all the nodes' transaction will share the same seq#,
         * so that later we can notice that they are submitted as parallel run on all nodes.
         */
        public List <Task <string> > StartCmdInParallelTransaction(IGammaMachineInfo machine, string[] commands)
        {
            List <Task <string> > tasks = new List <Task <string> >();

            //all cmds are run together and share the same seq#
            foreach (string cmd in commands)
            {
                tasks.Add(StartCmdGroupTransaction(machine, cmd));
            }
            return(tasks);
        }
コード例 #9
0
        /*
         *  return the task based on the enum code.
         *  and also bind the task with the transaction here.
         */
        private Task <string> StartTransactions(IGammaClientTransaction trx, IGammaMachineInfo machine, GammaTXClearEnv clear_step)
        {
            trx.TransactionStarted();
            Task <string> task;

            if (clear_step != GammaTXClearEnv.REBOOT)
            {
                switch (clear_step)
                {
                case GammaTXClearEnv.REG:
                    task = GammaProxyFactory.GetCrsCleanerProxy(machine).RemoveOraKeysAsync();
                    break;

                case GammaTXClearEnv.GROUP:
                    task = GammaProxyFactory.GetCrsCleanerProxy(machine).RmOraGroupAsync();
                    break;

                case GammaTXClearEnv.FILE:
                    task = GammaProxyFactory.GetCrsCleanerProxy(machine).RemoveOraFilesAsync();
                    break;

                case GammaTXClearEnv.DISK:
                    task = GammaProxyFactory.GetCrsCleanerProxy(machine).CleanDiskAsync();
                    break;

                case GammaTXClearEnv.DRIVER:
                    task = GammaProxyFactory.GetCrsCleanerProxy(machine).RemoveDrvLtrAsync();
                    break;

                default:
                    task = GenerateCompletedTask(TX_RESULT_SUC);
                    break;
                }
                BindCmdTaskWithTranscation(task, trx);
            }
            else
            {
                /*
                 *  reboot node transaction no need to Bind, as it will always fails by its mean.
                 */
                var tmp = GammaProxyFactory.GetCrsCleanerProxy(machine).RestartComputerAsync();
                task = tmp.ContinueWith <string>((t) => {
                    trx.TransactionCompleted();
                    return(TX_RESULT_SUC);
                });
            }

            return(task);
        }
コード例 #10
0
        internal static GammaClientTransaction GetCmdExecTX(IGammaMachineInfo machine, string command)
        {
            var trx = new GammaClientTransaction()
            {
                Machine        = machine.MachineName,
                TX_TYPE        = GammaTransactionType.COMMAND,
                TX_CONTENT     = command,
                TX_RESULT      = string.Empty,
                TX_RESULT_CODE = GammaTransactionRC.RUNNING,
            };

            //init event handler
            GammaClientTXLogger.GetInstance().RegisterTransaction(trx);
            return(trx);
        }
コード例 #11
0
        internal static GammaClientTransaction GetClearEnvTX(IGammaMachineInfo machine, GammaTXClearEnv op_code)
        {
            var trx = new GammaClientTransaction()
            {
                Machine        = machine.MachineName,
                TX_TYPE        = GammaTransactionType.CLEARENV,
                TX_SUB_TYPE    = (int)op_code,
                TX_CONTENT     = string.Empty,
                TX_RESULT      = string.Empty,
                TX_RESULT_CODE = GammaTransactionRC.RUNNING,
            };

            GammaClientTXLogger.GetInstance().RegisterTransaction(trx);
            return(trx);
        }
コード例 #12
0
        internal static GammaClientTransaction GetQAToolsTX(IGammaMachineInfo machine, GammaTXQATools op_code)
        {
            var trx = new GammaClientTransaction()
            {
                Machine        = machine.MachineName,
                TX_TYPE        = GammaTransactionType.QATOOLS,
                TX_SUB_TYPE    = (int)op_code,
                TX_CONTENT     = string.Empty,
                TX_RESULT      = string.Empty,
                TX_RESULT_CODE = GammaTransactionRC.RUNNING,
            };

            //init event handler
            GammaClientTXLogger.GetInstance().RegisterTransaction(trx);
            return(trx);
        }
コード例 #13
0
ファイル: CmdExecutorFacade.cs プロジェクト: cloverSA/GM
        public async static Task <string> ExecuteCmdsSeqByNodeAsync(IGammaMachineInfo machine, string[] multi_cmd)
        {
            if (multi_cmd.Count() == 1)
            {
                return(ExecuteCmdSync(machine, multi_cmd[0]));
            }
            StringBuilder sb = new StringBuilder();

            foreach (string cmd in multi_cmd)
            {
                string tmp = await ExecuteCmdAsync(machine, cmd);

                sb.AppendFormat("cmd: {0}, result: {1}", cmd, tmp);
                sb.AppendLine();
            }
            return(sb.ToString());
        }
コード例 #14
0
        /*
         *   return the task based on the enum code.
         *  and also bind the task with the transaction here.
         */
        private Task <string> StartTransactions(IGammaClientTransaction trx, IGammaMachineInfo machine, GammaTXQATools tool, object qatoolArgs = null)
        {
            trx.TransactionStarted();
            Task <string> task;

            switch (tool)
            {
            case GammaTXQATools.GETLOG:
                if (qatoolArgs != null)
                {
                    bool tmp = (bool)qatoolArgs;
                    task = GammaProxyFactory.GetQAToolsProxy(machine).GetLogAsync(tmp);
                }
                else
                {
                    throw new Exception("Unexpected error when try to get operation option.");
                }
                break;

            case GammaTXQATools.CLEARLOG:
                task = GammaProxyFactory.GetQAToolsProxy(machine).ClearLogAsync();
                break;

            case GammaTXQATools.UPLOAD:
                if (qatoolArgs != null)
                {
                    GammaServiceLib.UploadRecord tmp = qatoolArgs as GammaServiceLib.UploadRecord;
                    task = GammaProxyFactory.GetQAToolsProxy(machine).UploadLogAsync(tmp);
                }
                else
                {
                    throw new Exception("Unexpected error when try to get upload information.");
                }
                break;

            default:
                task = GenerateCompletedTask(TX_RESULT_SUC);
                break;
            }
            BindCmdTaskWithTranscation(task, trx);
            return(task);
        }
コード例 #15
0
        //Notified update of node status
        private void Ping_Complete(object sender, PingCompletedEventArgs k)
        {
            PingReply         reply   = k.Reply;
            IGammaMachineInfo machine = k.UserState as IGammaMachineInfo;

            try
            {
                if (reply.Status == IPStatus.Success)
                {
                    machine.UpdateNotifiableProperties(NodeState.Online);
                }
                else
                {
                    machine.UpdateNotifiableProperties(NodeState.Offline);
                }
            }
            catch (NullReferenceException e)
            {
                machine.UpdateNotifiableProperties(NodeState.Unknown);
            }
        }
コード例 #16
0
        internal static GammaClientTransaction GetCmdExecTX(IGammaMachineInfo machine, string[] command)
        {
            var sb = new StringBuilder();

            foreach (var cmd in command)
            {
                sb.AppendFormat("{0};", cmd);
            }
            var trx = new GammaClientTransaction()
            {
                Machine        = machine.MachineName,
                TX_TYPE        = GammaTransactionType.COMMAND,
                TX_CONTENT     = sb.ToString(),
                TX_RESULT      = string.Empty,
                TX_RESULT_CODE = GammaTransactionRC.RUNNING,
            };

            //init event handler
            GammaClientTXLogger.GetInstance().RegisterTransaction(trx);
            return(trx);
        }
コード例 #17
0
ファイル: GammaServiceProxy.cs プロジェクト: cloverSA/GM
        public static CrsCleanerProxy GetCrsCleanerProxy(IGammaMachineInfo machine)
        {
            string uri = string.Format("http://{0}:{1}/GammaService/CrsCleaner", machine.NetworkCompent.GetWorkingNic(), machine.NetworkCompent.GetWorkingServicePort());

            return(new CrsCleanerProxy(uri));
        }
コード例 #18
0
ファイル: GammaServiceProxy.cs プロジェクト: cloverSA/GM
        public static DBWorkloadProxy GetDBWorkloadProxy(IGammaMachineInfo machine)
        {
            string uri = string.Format("http://{0}:{1}/GammaService/DBWorkload", machine.NetworkCompent.GetWorkingNic(), machine.NetworkCompent.GetWorkingServicePort());

            return(new DBWorkloadProxy(uri));
        }