Пример #1
0
        public JsonResult ResetErrorMessage()
        {
            var model = (IpmiResetModel)Session[Definitions.SYSTEM_RESET_MODEL_KEY];

            if (null != model)
            {
                model.ErrorMessage           = string.Empty;
                model.IpmiResponse           = string.Empty;
                model.CurrentCount           = 0;
                model.BMCCfig.IpmiAccessable = true;
                this._UpdateSessionModel(model);
            }
            else
            {
                model = new IpmiResetModel();
            }
            return(Json(model));
        }
Пример #2
0
        public JsonResult UpdateIfAbortAtFailure(JsonContainer jsonData)
        {
            var model = (IpmiResetModel)Session[Definitions.SYSTEM_RESET_MODEL_KEY];

            if (null != jsonData &&
                !string.IsNullOrEmpty(jsonData.JsonString))
            {
                var ischecked = false;
                bool.TryParse(jsonData.JsonString, out ischecked);
                model.SutCfig.ifAboutAtFailure = ischecked;
                this._UpdateSessionModel(model);
            }
            if (null == model)
            {
                model = new IpmiResetModel();
            }
            return(Json(model));
        }
Пример #3
0
        public ActionResult Index()
        {
            var model = Session[Definitions.SYSTEM_RESET_MODEL_KEY] as IpmiResetModel;
            var commandMapFileName = Path.Combine(Server.MapPath(@"~/App_Data/"), "IpmiCommandList.json");

            using (StreamReader file = System.IO.File.OpenText(commandMapFileName))
            {
                var serializer = new JsonSerializer();
                var map        = (CommandMaps)serializer.Deserialize(file, typeof(CommandMaps));
                Session[Definitions.COMMAND_MAP_KEY] = map;
            }

            if (null == model)
            {
                model = new IpmiResetModel();
                this._UpdateSessionModel(model);
            }
            return(View(model));
        }
Пример #4
0
        public JsonResult UpdateBmcPasswordConfig(JsonContainer jsonData)
        {
            var model = (IpmiResetModel)Session[Definitions.SYSTEM_RESET_MODEL_KEY];

            if (null != model && null != jsonData)
            {
                model.CurrentCount           = 0;
                model.ErrorMessage           = string.Empty;
                model.BMCCfig.MEMode         = MeMode.Recovery.ToString();
                model.BMCCfig.Password       = string.IsNullOrEmpty(jsonData.JsonString) ? string.Empty : jsonData.JsonString;
                model.BMCCfig.IpmiAccessable = true;
                this._UpdateSessionModel(model);
            }
            if (null == model)
            {
                model = new IpmiResetModel();
            }
            return(Json(model));
        }
Пример #5
0
        public JsonResult PingSut()
        {
            var model = (IpmiResetModel)Session[Definitions.SYSTEM_RESET_MODEL_KEY];

            if (null != model && null != model.SutCfig && model.Status != ProcessStatus.Alive.ToString())
            {
                //var proxy = XmlRpcProxyGen.Create<IXmlRpcInterface>();
                //var json = proxy.PingHost(model.SutCfig.IpAddress);
                //var serializer = new JsonSerializer();
                //var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
                //var reader = new StreamReader(stream);
                //var respons = (PingHostResponse)serializer.Deserialize(reader, typeof(PingHostResponse));
                //model.SutCfig.IsPowerOn = respons.hostUp;
                var reply = this._PingIPAddress(ref model);
            }
            if (null == model)
            {
                model = new IpmiResetModel();
            }
            return(Json(model));
        }
Пример #6
0
        public JsonResult UpdateDelay(JsonContainer jsonData)
        {
            var model = (IpmiResetModel)Session[Definitions.SYSTEM_RESET_MODEL_KEY];

            if (null != jsonData &&
                !string.IsNullOrEmpty(jsonData.JsonString) &&
                _regexDigits.Match(jsonData.JsonString).Success)
            {
                var delay = 0;
                if (int.TryParse(jsonData.JsonString, out delay))
                {
                    model.Delay = delay.ToString();
                }
                this._UpdateSessionModel(model);
            }
            if (null == model)
            {
                model = new IpmiResetModel();
            }
            return(Json(model));
        }
Пример #7
0
        public JsonResult UpdateTimeout(JsonContainer jsonData)
        {
            var model = (IpmiResetModel)Session[Definitions.SYSTEM_RESET_MODEL_KEY];

            if (null != jsonData &&
                !string.IsNullOrEmpty(jsonData.JsonString) &&
                _regexDigits.Match(jsonData.JsonString).Success)
            {
                var timeout = 0;
                int.TryParse(jsonData.JsonString, out timeout);
                model.TimeoutInMimutes = timeout;
                model.CurrentCount     = 0;

                this._UpdateSessionModel(model);
            }
            if (null == model)
            {
                model = new IpmiResetModel();
            }
            return(Json(model));
        }
Пример #8
0
        public JsonResult UpdateSuTConfig(JsonContainer jsonData)
        {
            var model = (IpmiResetModel)Session[Definitions.SYSTEM_RESET_MODEL_KEY];

            if (null != model && null != jsonData)
            {
                model.SutCfig.IpAddress = string.IsNullOrEmpty(jsonData.JsonString) ? string.Empty : jsonData.JsonString;
                model.ErrorMessage      = string.Empty;
                if (!Utils.IsValidIpV4(model.SutCfig.IpAddress))
                {
                    model.SutCfig.IsPowerOn = false;
                    model.ErrorMessage      = "Please enter a valid SUT IP address. NOTE:If you select the Customer Defined option and like to send BMC comman, please click on the <Refresh> icon.";
                }
                this._UpdateSessionModel(model);
            }
            if (null == model)
            {
                model = new IpmiResetModel();
            }
            return(Json(model));
        }
Пример #9
0
 private void _UpdateSessionModel(IpmiResetModel model)
 {
     lock (_updateModelSyncObj)
     {
         for (int i = 0; i < 3; ++i)
         {
             try
             {
                 try
                 {
                     Session.Remove(Definitions.SYSTEM_RESET_MODEL_KEY);
                 }
                 catch { }
                 model.CmdMaps = (CommandMaps)Session[Definitions.COMMAND_MAP_KEY];
                 Session[Definitions.SYSTEM_RESET_MODEL_KEY] = model;
             }
             catch
             {
             }
         }
     }
 }
Пример #10
0
        private StringBuilder _InvokeIpmiCommand(IpmiResetModel model, string ipaddress, string command)
        {
            var sb = new StringBuilder();

            lock (_invokeSyncObj)
            {
                var errorIgnoreFilter  = (string)WebConfigurationManager.AppSettings["ipmitoolErrorIgnoreFilter"];
                var ipmiCommandTimeout = int.Parse(WebConfigurationManager.AppSettings["ipmiCommandTimeoutInMin"]);
                if (string.IsNullOrEmpty(errorIgnoreFilter))
                {
                    errorIgnoreFilter = "(Timeout)|(Node busy)";
                }


                var ignore = new Regex(errorIgnoreFilter);
                if (model.BMCCfig.CanSubmit && model.BMCCfig.IpmiAccessable)
                {
                    var ipmitoolPath = (string)WebConfigurationManager.AppSettings["ipmitoolPath"];
                    var ipmiCommand  = string.Format(@" -I lanplus -H {0} -U {1} -P {2} {3}",
                                                     ipaddress,
                                                     model.BMCCfig.User,
                                                     model.BMCCfig.Password,
                                                     command,
                                                     "\"");
                    var startInfo = new ProcessStartInfo
                    {
                        UseShellExecute        = false,
                        CreateNoWindow         = false,
                        WorkingDirectory       = ipmitoolPath,
                        RedirectStandardOutput = true,
                        RedirectStandardError  = true,
                        FileName  = Path.Combine(ipmitoolPath, "ipmitool.exe"),
                        Arguments = ipmiCommand
                    };
                    bool succss = false;
                    bool isCustomerDefinedCommand = model.RestType == CommandType.CustomerDefined.ToString();
                    for (int i = 0; i < 3 && !succss; ++i)
                    {
                        try
                        {
                            var process = new Process()
                            {
                                StartInfo = startInfo
                            };
                            process.Start();

                            var proc = Process.GetProcessesByName("ipmitool");
                            if (null != proc)
                            {
                                var t = ipmiCommandTimeout * 3600 * 1000;
                                foreach (var p in proc)
                                {
                                    if (!p.WaitForExit(t))
                                    {
                                        p.Kill();
                                        model.ErrorMessage = string.Format("Time out {0} min reached, forces to terminat the process for ipmi command [{1}].", ipmiCommandTimeout, command);
                                        break;
                                    }
                                }
                            }

                            var err = process.StandardError.ReadToEnd();

                            if (string.IsNullOrEmpty(err))
                            {
                                var msg = process.StandardOutput.ReadToEnd();
                                if (isCustomerDefinedCommand &&
                                    command == model.CustomerDefinedCommand)
                                {
                                    model.IpmiResponse = model.FormatCustomerDefinedIpmiResponse(command, msg);
                                    this._UpdateSessionModel(model);
                                }
                                else
                                {
                                    sb.Append(msg.Replace("\r\n", string.Empty));
                                }
                            }
                            else
                            {
                                if (ignore.Match(err).Success)
                                {
                                    Thread.Sleep(1000);
                                    continue;
                                }
                                model.BMCCfig.IpmiAccessable = false;
                                model.ErrorMessage           = err;
                                this._UpdateSessionModel(model);
                            }
                            succss = true;
                        }
                        catch (Exception e)
                        {
                            model.ErrorMessage = e.Message;
                            model.Status       = ProcessStatus.ShutDown.ToString();
                            this._UpdateSessionModel(model);
                            _shouldTerminate = true;
                        }
                    }
                }
            }
            return(sb);
        }