예제 #1
0
        private void generateStatusBox()
        {
            XenAPI.SR sr = this.xenModelObject as XenAPI.SR;
            if (sr != null)
            {
                bool flag       = (sr.IsBroken() || !sr.MultipathAOK);
                bool isDetached = sr.IsDetached;
                List <ToolStripMenuItem> contextMenuItems = new List <ToolStripMenuItem>();

                ToolStripMenuItem item = new ToolStripMenuItem(Messages.GENERAL_SR_CONTEXT_REPAIR)
                {
                    Image = Resources._000_StorageBroken_h32bit_16
                };
                item.Click += delegate
                {
                    Program.MainWindow.ShowPerConnectionWizard(this.xenModelObject.Connection, new RepairSRDialog(sr));
                };
                contextMenuItems.Add(item);
                if (flag && !isDetached)
                {
                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("SR.state"), sr.StatusString, Status, contextMenuItems));
                }
                else
                {
                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("SR.state"), sr.StatusString, Status));
                }
                foreach (Host host in this.xenModelObject.Connection.Cache.Hosts)
                {
                    PBD pbd = null;
                    foreach (PBD pbd2 in this.xenModelObject.Connection.ResolveAll <PBD>(host.PBDs))
                    {
                        if (!(pbd2.SR.opaque_ref != this.xenModelObject.opaque_ref))
                        {
                            pbd = pbd2;
                            break;
                        }
                    }
                    if (pbd == null)
                    {
                        if (sr.shared)
                        {
                            if (!isDetached)
                            {
                                GeneralDataList.Add(new GeneralDataStructure("  " + HalsignHelpers.TrimStringIfRequired(Helpers.GetName(host), 30), Messages.REPAIR_SR_DIALOG_CONNECTION_MISSING, Status, Color.Red, contextMenuItems));
                            }
                            else
                            {
                                GeneralDataList.Add(new GeneralDataStructure("  " + HalsignHelpers.TrimStringIfRequired(Helpers.GetName(host), 30), Messages.REPAIR_SR_DIALOG_CONNECTION_MISSING, Status, Color.Red));
                            }
                        }
                    }
                    else
                    {
                        pbd.PropertyChanged -= new PropertyChangedEventHandler(this.PropertyChanged);
                        pbd.PropertyChanged += new PropertyChangedEventHandler(this.PropertyChanged);
                        if (!pbd.currently_attached)
                        {
                            if (!isDetached)
                            {
                                GeneralDataList.Add(new GeneralDataStructure(HalsignHelpers.TrimStringIfRequired(Helpers.GetName(host), 30), pbd.StatusString, Status, Color.Red, contextMenuItems));
                            }
                            else
                            {
                                GeneralDataList.Add(new GeneralDataStructure(HalsignHelpers.TrimStringIfRequired(Helpers.GetName(host), 30), pbd.StatusString, Status, Color.Red));
                            }
                        }
                        else
                        {
                            GeneralDataList.Add(new GeneralDataStructure(HalsignHelpers.TrimStringIfRequired(Helpers.GetName(host), 30), pbd.StatusString, Status));
                        }
                    }
                    if (sr.GetSRType(true) == SR.SRTypes.lvmobond)
                    {
                        if (pbd != null)
                        {
                            String status;
                            if (pbd.other_config.ContainsKey("LUN1-status"))
                            {
                                if (pbd.other_config.TryGetValue("LUN1-status", out status))
                                {
                                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN1"), status, Status));
                                }
                            }
                            if (pbd.other_config.ContainsKey("LUN2-status"))
                            {
                                if (pbd.other_config.TryGetValue("LUN2-status", out status))
                                {
                                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN2"), status, Status));
                                }
                            }
                        }
                    }
                    if (sr.GetSRType(true) == SR.SRTypes.lvmomirror && !sr.other_config.ContainsKey("_type"))
                    {
                        if (pbd != null)
                        {
                            String status;
                            if (pbd.other_config.ContainsKey("LUN1-status"))
                            {
                                if (pbd.other_config.TryGetValue("LUN1-status", out status))
                                {
                                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN1"), status, Status));
                                }
                            }
                            if (pbd.other_config.ContainsKey("LUN2-status"))
                            {
                                if (pbd.other_config.TryGetValue("LUN2-status", out status))
                                {
                                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN2"), status, Status));
                                }
                            }
                        }
                    }
                    if (sr.GetSRType(true) == SR.SRTypes.lvmomirror && sr.other_config.ContainsKey("_type"))
                    {
                        if (pbd != null)
                        {
                            String status;
                            if (pbd.device_config.ContainsKey("SCSIid1"))
                            {
                                if (pbd.device_config.TryGetValue("SCSIid1", out status))
                                {
                                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN1"), status, Status));
                                }
                            }
                            if (pbd.device_config.ContainsKey("SCSIid2"))
                            {
                                if (pbd.device_config.TryGetValue("SCSIid2", out status))
                                {
                                    GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN2"), status, Status));
                                }
                            }
                        }
                    }
                }//foreach

                /**
                 * if (sr.GetSRType(true) == SR.SRTypes.lvmobond)
                 * {
                 *  if (sr.sm_config.ContainsKey("state"))
                 *  {
                 *      GeneralDataList.Add(new GeneralDataStructure(FriendlyName("RAID.state"), sr.sm_config["state"], Status));
                 *  }
                 *  if (sr.sm_config.ContainsKey("LUN0-status"))
                 *  {
                 *
                 *      if (sr.sm_config["LUN0-status"].Contains("removed"))
                 *      {
                 *          List<ToolStripMenuItem> ctxMenuItems = new List<ToolStripMenuItem>();
                 *          ToolStripMenuItem itm = MainWindow.NewToolStripMenuItem("Add", Resources._000_StorageBroken_h32bit_16, delegate(object sender, EventArgs e)
                 *          {
                 *              List<FibreChannelDevice> devices;
                 *              var success = LVMoBond.FiberChannelScan(this, sr.Connection, out devices);
                 *              Program.MainWindow.ShowPerConnectionWizard(this.xenModelObject.Connection, new AddLUNDialog(sr, devices));
                 *          });
                 *
                 *          ctxMenuItems.Add(itm);
                 *          GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN1"), sr.sm_config["LUN0-status"], Status, Color.Red, ctxMenuItems));
                 *      }
                 *      else
                 *      {
                 *          String iscsiid = sr.sm_config["LUN0-scsiid"];
                 *          String mpath_enable = sr.sm_config["multipathable"];
                 *          String boundsr_dev = sr.sm_config["md_device"];
                 *          Dictionary<String, String> args = new Dictionary<string, string>();
                 *          args.Add("scsiid", iscsiid);
                 *          args.Add("mpath_enable", mpath_enable);
                 *          args.Add("boundsr_dev", boundsr_dev);
                 *          List<ToolStripMenuItem> ctxMenuItems = new List<ToolStripMenuItem>();
                 *          ToolStripMenuItem itm = MainWindow.NewToolStripMenuItem("remove", Resources._000_StorageBroken_h32bit_16, delegate(object sender, EventArgs e)
                 *          {
                 *              try
                 *              {
                 *                  AsyncAction Action = new SrRemoveLUNAction(sr.Connection, sr, args, false);
                 *                  Action.RunAsync();
                 *              }
                 *              catch (Exception ex)
                 *              {
                 *              }
                 *          });
                 *          ctxMenuItems.Add(itm);
                 *          GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN1"), sr.sm_config["LUN0-status"], Status, ctxMenuItems));
                 *      }
                 *  }
                 *  if (sr.sm_config.ContainsKey("LUN1-status"))
                 *  {
                 *      if (sr.sm_config["LUN1-status"].Contains("removed"))
                 *      {
                 *          List<ToolStripMenuItem> ctxMenuItems = new List<ToolStripMenuItem>();
                 *          ToolStripMenuItem itm = MainWindow.NewToolStripMenuItem("Add", Resources._000_StorageBroken_h32bit_16, delegate(object sender, EventArgs e)
                 *          {
                 *              List<FibreChannelDevice> devices;
                 *              var success = LVMoBond.FiberChannelScan(this, sr.Connection, out devices);
                 *              Program.MainWindow.ShowPerConnectionWizard(this.xenModelObject.Connection, new AddLUNDialog(sr, devices));
                 *          });
                 *
                 *          ctxMenuItems.Add(itm);
                 *          GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN2"), sr.sm_config["LUN1-status"], Status, Color.Red, ctxMenuItems));
                 *      }
                 *      else
                 *      {
                 *          String iscsiid = sr.sm_config["LUN1-scsiid"];
                 *          String mpath_enable = sr.sm_config["multipathable"];
                 *          String boundsr_dev = sr.sm_config["md_device"];
                 *          Dictionary<String, String> args = new Dictionary<string, string>();
                 *          args.Add("scsiid", iscsiid);
                 *          args.Add("mpath_enable", mpath_enable);
                 *          args.Add("boundsr_dev", boundsr_dev);
                 *          List<ToolStripMenuItem> ctxMenuItems = new List<ToolStripMenuItem>();
                 *          ToolStripMenuItem itm = MainWindow.NewToolStripMenuItem("remove", Resources._000_StorageBroken_h32bit_16, delegate(object sender, EventArgs e)
                 *          {
                 *              try
                 *              {
                 *                  AsyncAction Action = new SrRemoveLUNAction(sr.Connection, sr, args, false);
                 *                  Action.RunAsync();
                 *
                 *              }
                 *              catch(Exception ex)
                 *              {
                 *              }
                 *          });
                 *          ctxMenuItems.Add(itm);
                 *          GeneralDataList.Add(new GeneralDataStructure(FriendlyName("LUN2"), sr.sm_config["LUN1-status"], Status, ctxMenuItems));
                 *      }
                 *  }
                 * }**/
            }
        }