Resolve NRPE code review comments from Tina.

This commit is contained in:
Bengang Yuan 2023-10-23 17:05:03 +08:00 committed by Konstantina Chremmou
parent 7dfe809c66
commit 2ad5fd8792
10 changed files with 293 additions and 343 deletions

View File

@ -0,0 +1,213 @@
/* Copyright (c) Cloud Software Group, Inc.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
using System.Drawing;
using System.Windows.Forms;
namespace XenAdmin.SettingsPanels
{
public partial class NRPEEditPage
{
public class CheckGroup
{
private const decimal THRESHOLD_MINIMUM = 0.01M;
private const decimal THRESHOLD_MAXIMUM = 100M;
public string Name { get; }
public DataGridViewRow CheckThresholdRow { get; }
public DataGridViewTextBoxCell NameCell { get; }
public DataGridViewTextBoxCell WarningThresholdCell { get; }
public DataGridViewTextBoxCell CriticalThresholdCell { get; }
public CheckGroup(string name, string labelName)
{
Name = name;
NameCell = new DataGridViewTextBoxCell { Value = labelName };
WarningThresholdCell = new DataGridViewTextBoxCell();
CriticalThresholdCell = new DataGridViewTextBoxCell();
CheckThresholdRow = new DataGridViewRow();
CheckThresholdRow.Cells.AddRange(NameCell, WarningThresholdCell, CriticalThresholdCell);
CheckThresholdRow.DefaultCellStyle.Format = "N2";
CheckThresholdRow.DefaultCellStyle.NullValue = 0;
WarningThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlDark);
CriticalThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlDark);
}
public void UpdateThreshold(string warningThreshold, string criticalThreshold)
{
WarningThresholdCell.Value = warningThreshold;
CriticalThresholdCell.Value = criticalThreshold;
WarningThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
CriticalThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
}
public virtual bool CheckValue()
{
WarningThresholdCell.ErrorText = "";
CriticalThresholdCell.ErrorText = "";
return CheckEachValue(WarningThresholdCell) &&
CheckEachValue(CriticalThresholdCell) &&
CompareWarningAndCritical();
}
protected virtual bool CheckEachValue(DataGridViewTextBoxCell cell)
{
string thresholdStr = cell.Value.ToString().Trim();
if (thresholdStr.Equals(""))
{
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_NOT_BE_EMPTY);
return false;
}
if (!decimal.TryParse(thresholdStr, out decimal threshold))
{
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_BE_NUMBER);
return false;
}
if (threshold < THRESHOLD_MINIMUM || threshold > THRESHOLD_MAXIMUM)
{
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_RANGE_ERROR, THRESHOLD_MINIMUM,
THRESHOLD_MAXIMUM);
return false;
}
cell.ErrorText = "";
return true;
}
protected virtual bool CompareWarningAndCritical()
{
decimal.TryParse(WarningThresholdCell.Value.ToString().Trim(), out decimal warningDecimal);
decimal.TryParse(CriticalThresholdCell.Value.ToString().Trim(), out decimal criticalDecimal);
if (warningDecimal < criticalDecimal)
{
WarningThresholdCell.ErrorText = "";
return true;
}
else
{
WarningThresholdCell.ErrorText =
string.Format(Messages.NRPE_THRESHOLD_WARNING_SHOULD_LESS_THAN_CRITICAL);
return false;
}
}
}
public class FreeCheckGroup : CheckGroup
{
public FreeCheckGroup(string name, string labelName)
: base(name, labelName)
{
}
protected override bool CompareWarningAndCritical()
{
decimal.TryParse(WarningThresholdCell.Value.ToString().Trim(), out decimal warningDecimal);
decimal.TryParse(CriticalThresholdCell.Value.ToString().Trim(), out decimal criticalDecimal);
if (warningDecimal > criticalDecimal)
{
WarningThresholdCell.ErrorText = "";
return true;
}
else
{
WarningThresholdCell.ErrorText =
string.Format(Messages.NRPE_THRESHOLD_WARNING_SHOULD_BIGGER_THAN_CRITICAL);
return false;
}
}
}
public class HostLoadCheckGroup : CheckGroup
{
public HostLoadCheckGroup(string name, string labelName)
: base(name, labelName)
{
}
}
public class Dom0LoadCheckGroup : CheckGroup
{
public Dom0LoadCheckGroup(string name, string labelName)
: base(name, labelName)
{
}
protected override bool CompareWarningAndCritical()
{
string[] warningArray = WarningThresholdCell.Value.ToString().Split(',');
string[] criticalArray = CriticalThresholdCell.Value.ToString().Split(',');
for (int i = 0; i < 3; i++)
{
decimal.TryParse(warningArray[i].Trim(), out decimal warningDecimal);
decimal.TryParse(criticalArray[i].Trim(), out decimal criticalDecimal);
if (warningDecimal > criticalDecimal)
{
WarningThresholdCell.ErrorText =
string.Format(Messages.NRPE_THRESHOLD_WARNING_SHOULD_LESS_THAN_CRITICAL);
return false;
}
}
WarningThresholdCell.ErrorText = "";
return true;
}
protected override bool CheckEachValue(DataGridViewTextBoxCell cell)
{
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_BE_3_NUMBERS);
string[] loadArray = cell.Value.ToString().Split(',');
if (loadArray.Length != 3)
{
return false;
}
foreach (string load in loadArray)
{
bool isDecimal = decimal.TryParse(load, out _);
if (!isDecimal)
{
return false;
}
}
cell.ErrorText = "";
return true;
}
}
}
}

View File

@ -40,12 +40,12 @@ namespace XenAdmin.SettingsPanels
this.DebugLogCheckBox = new System.Windows.Forms.CheckBox(); this.DebugLogCheckBox = new System.Windows.Forms.CheckBox();
this.SslDebugLogCheckBox = new System.Windows.Forms.CheckBox(); this.SslDebugLogCheckBox = new System.Windows.Forms.CheckBox();
this.CheckDataGridView = new XenAdmin.Controls.DataGridViewEx.DataGridViewEx(); this.CheckDataGridView = new XenAdmin.Controls.DataGridViewEx.DataGridViewEx();
this.RetrieveNRPEPanel = new System.Windows.Forms.TableLayoutPanel();
this.RetrieveNRPELabel = new System.Windows.Forms.Label();
this.RetrieveNRPEPicture = new System.Windows.Forms.PictureBox();
this.CheckColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.CheckColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.WarningThresholdColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.WarningThresholdColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.CriticalThresholdColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.CriticalThresholdColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.RetrieveNRPEPanel = new System.Windows.Forms.TableLayoutPanel();
this.RetrieveNRPELabel = new System.Windows.Forms.Label();
this.RetrieveNRPEPicture = new System.Windows.Forms.PictureBox();
this.NRPETableLayoutPanel.SuspendLayout(); this.NRPETableLayoutPanel.SuspendLayout();
this.GeneralConfigureGroupBox.SuspendLayout(); this.GeneralConfigureGroupBox.SuspendLayout();
this.GeneralConfigTableLayoutPanel.SuspendLayout(); this.GeneralConfigTableLayoutPanel.SuspendLayout();
@ -136,24 +136,8 @@ namespace XenAdmin.SettingsPanels
this.CheckDataGridView.Name = "CheckDataGridView"; this.CheckDataGridView.Name = "CheckDataGridView";
this.CheckDataGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; this.CheckDataGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
this.CheckDataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.CheckDataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
// this.CheckDataGridView.ShowCellErrors = true;
// RetrieveNRPEPanel this.CheckDataGridView.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.CheckDataGridView_EndEdit);
//
resources.ApplyResources(this.RetrieveNRPEPanel, "RetrieveNRPEPanel");
this.RetrieveNRPEPanel.Controls.Add(this.RetrieveNRPELabel, 1, 0);
this.RetrieveNRPEPanel.Controls.Add(this.RetrieveNRPEPicture, 0, 0);
this.RetrieveNRPEPanel.Name = "RetrieveNRPEPanel";
//
// RetrieveNRPELabel
//
resources.ApplyResources(this.RetrieveNRPELabel, "RetrieveNRPELabel");
this.RetrieveNRPELabel.Name = "RetrieveNRPELabel";
//
// RetrieveNRPEPicture
//
resources.ApplyResources(this.RetrieveNRPEPicture, "RetrieveNRPEPicture");
this.RetrieveNRPEPicture.Name = "RetrieveNRPEPicture";
this.RetrieveNRPEPicture.TabStop = false;
// //
// CheckColumn // CheckColumn
// //
@ -174,6 +158,24 @@ namespace XenAdmin.SettingsPanels
resources.ApplyResources(this.CriticalThresholdColumn, "CriticalThresholdColumn"); resources.ApplyResources(this.CriticalThresholdColumn, "CriticalThresholdColumn");
this.CriticalThresholdColumn.Name = "CriticalThresholdColumn"; this.CriticalThresholdColumn.Name = "CriticalThresholdColumn";
// //
// RetrieveNRPEPanel
//
resources.ApplyResources(this.RetrieveNRPEPanel, "RetrieveNRPEPanel");
this.RetrieveNRPEPanel.Controls.Add(this.RetrieveNRPELabel, 1, 0);
this.RetrieveNRPEPanel.Controls.Add(this.RetrieveNRPEPicture, 0, 0);
this.RetrieveNRPEPanel.Name = "RetrieveNRPEPanel";
//
// RetrieveNRPELabel
//
resources.ApplyResources(this.RetrieveNRPELabel, "RetrieveNRPELabel");
this.RetrieveNRPELabel.Name = "RetrieveNRPELabel";
//
// RetrieveNRPEPicture
//
resources.ApplyResources(this.RetrieveNRPEPicture, "RetrieveNRPEPicture");
this.RetrieveNRPEPicture.Name = "RetrieveNRPEPicture";
this.RetrieveNRPEPicture.TabStop = false;
//
// NRPEEditPage // NRPEEditPage
// //
resources.ApplyResources(this, "$this"); resources.ApplyResources(this, "$this");

View File

@ -37,15 +37,11 @@ using XenAdmin.Actions;
using XenAdmin.Core; using XenAdmin.Core;
using XenAdmin.Actions.NRPE; using XenAdmin.Actions.NRPE;
using XenAPI; using XenAPI;
using System.Linq;
using XenAdmin.Network;
namespace XenAdmin.SettingsPanels namespace XenAdmin.SettingsPanels
{ {
public partial class NRPEEditPage : UserControl, IEditPage public partial class NRPEEditPage : UserControl, IEditPage
{ {
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static readonly Regex REGEX_IPV4 = new Regex("^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)"); private static readonly Regex REGEX_IPV4 = new Regex("^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)");
private static readonly Regex REGEX_IPV4_CIDR = new Regex("^([0-9]{1,3}\\.){3}[0-9]{1,3}(\\/([0-9]|[1-2][0-9]|3[0-2]))?$"); private static readonly Regex REGEX_IPV4_CIDR = new Regex("^([0-9]{1,3}\\.){3}[0-9]{1,3}(\\/([0-9]|[1-2][0-9]|3[0-2]))?$");
private static readonly Regex REGEX_DOMAIN = new Regex("^(((?!-))(xn--|_)?[a-z0-9-]{0,61}[a-z0-9]{1,1}\\.)*(xn--)?([a-z0-9][a-z0-9\\-]{0,60}|[a-z0-9-]{1,30}\\.[a-z]{2,})$"); private static readonly Regex REGEX_DOMAIN = new Regex("^(((?!-))(xn--|_)?[a-z0-9-]{0,61}[a-z0-9]{1,1}\\.)*(xn--)?([a-z0-9][a-z0-9\\-]{0,60}|[a-z0-9-]{1,30}\\.[a-z]{2,})$");
@ -119,8 +115,6 @@ namespace XenAdmin.SettingsPanels
{ {
_invalidParamToolTipText = ""; _invalidParamToolTipText = "";
_invalidParamToolTip.ToolTipTitle = ""; _invalidParamToolTip.ToolTipTitle = "";
CheckDataGridView.ShowCellToolTips = false;
CheckDataGridView.ShowCellErrors = false;
if (!EnableNRPECheckBox.Checked) if (!EnableNRPECheckBox.Checked)
{ {
@ -129,15 +123,23 @@ namespace XenAdmin.SettingsPanels
bool valid = IsAllowHostsValid(); bool valid = IsAllowHostsValid();
DataGridViewTextBoxCell focusCellWhenErrorOccurs = null;
foreach (CheckGroup checkGroup in _checkGroupList) foreach (CheckGroup checkGroup in _checkGroupList)
{ {
if (!checkGroup.CheckValue()) if (!checkGroup.CheckValue())
{ {
CheckDataGridView.ShowCellToolTips = true;
CheckDataGridView.ShowCellErrors = true;
valid = false; valid = false;
if (focusCellWhenErrorOccurs == null)
{
focusCellWhenErrorOccurs = checkGroup.NameCell;
}
} }
} }
if (focusCellWhenErrorOccurs != null)
{
CheckDataGridView.CurrentCell = CheckDataGridView.Rows[0].Cells[0];
CheckDataGridView.CurrentCell = focusCellWhenErrorOccurs;
}
return valid; return valid;
} }
} }
@ -190,7 +192,7 @@ namespace XenAdmin.SettingsPanels
UpdateRetrievingNRPETip(NRPEHostConfiguration.RetrieveNRPEStatus.Retrieving); UpdateRetrievingNRPETip(NRPEHostConfiguration.RetrieveNRPEStatus.Retrieving);
DisableAllComponent(); DisableAllComponent();
NRPERetrieveAction action = new NRPERetrieveAction(_clone, _nrpeOriginalConfig, _checkGroupDictByName, true); NRPERetrieveAction action = new NRPERetrieveAction(_clone, _nrpeOriginalConfig, true);
action.Completed += ActionCompleted; action.Completed += ActionCompleted;
action.RunAsync(); action.RunAsync();
} }
@ -250,6 +252,12 @@ namespace XenAdmin.SettingsPanels
Color.FromKnownColor(KnownColor.ControlDark) : AllowHostsTextBox.ForeColor = Color.FromKnownColor(KnownColor.ControlText); Color.FromKnownColor(KnownColor.ControlDark) : AllowHostsTextBox.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
DebugLogCheckBox.Checked = _nrpeOriginalConfig.Debug; DebugLogCheckBox.Checked = _nrpeOriginalConfig.Debug;
SslDebugLogCheckBox.Checked = _nrpeOriginalConfig.SslLogging; SslDebugLogCheckBox.Checked = _nrpeOriginalConfig.SslLogging;
foreach (KeyValuePair<string, NRPEHostConfiguration.Check> check in _nrpeOriginalConfig.CheckDict)
{
_checkGroupDictByName.TryGetValue(check.Key, out CheckGroup cg);
cg?.UpdateThreshold(check.Value.WarningThreshold, check.Value.CriticalThreshold);
}
} }
private void UpdateComponentStatusBasedEnableNRPECheckBox() private void UpdateComponentStatusBasedEnableNRPECheckBox()
@ -272,13 +280,14 @@ namespace XenAdmin.SettingsPanels
checkGroup.CriticalThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlDark); checkGroup.CriticalThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlDark);
} }
} }
CheckDataGridView.ShowCellToolTips = EnableNRPECheckBox.Checked;
CheckDataGridView.ShowCellErrors = EnableNRPECheckBox.Checked;
} }
private bool IsAllowHostsValid() private bool IsAllowHostsValid()
{ {
_invalidParamToolTip.ToolTipTitle = Messages.NRPE_ALLOW_HOSTS_ERROR_TITLE; _invalidParamToolTip.ToolTipTitle = Messages.NRPE_ALLOW_HOSTS_ERROR_TITLE;
_invalidParamToolTip.Tag = AllowHostsTextBox; _invalidParamToolTip.Tag = AllowHostsTextBox;
CheckDataGridView.ShowCellToolTips = true;
string str = AllowHostsTextBox.Text; string str = AllowHostsTextBox.Text;
if (str.Trim().Length == 0 || str.Trim().Equals(NRPEHostConfiguration.ALLOW_HOSTS_PLACE_HOLDER)) if (str.Trim().Length == 0 || str.Trim().Equals(NRPEHostConfiguration.ALLOW_HOSTS_PLACE_HOLDER))
@ -316,7 +325,6 @@ namespace XenAdmin.SettingsPanels
return false; return false;
} }
} }
CheckDataGridView.ShowCellToolTips = false;
return true; return true;
} }
@ -341,14 +349,14 @@ namespace XenAdmin.SettingsPanels
_nrpeCurrentConfig = new NRPEHostConfiguration _nrpeCurrentConfig = new NRPEHostConfiguration
{ {
EnableNRPE = EnableNRPECheckBox.Checked, EnableNRPE = EnableNRPECheckBox.Checked,
AllowHosts = AllowHostsTextBox.Text, AllowHosts = AllowHostsTextBox.Text.Replace(" ", string.Empty),
Debug = DebugLogCheckBox.Checked, Debug = DebugLogCheckBox.Checked,
SslLogging = SslDebugLogCheckBox.Checked SslLogging = SslDebugLogCheckBox.Checked
}; };
foreach (KeyValuePair<string, CheckGroup> item in _checkGroupDictByName) foreach (KeyValuePair<string, CheckGroup> item in _checkGroupDictByName)
{ {
_nrpeCurrentConfig.AddNRPECheck(new NRPEHostConfiguration.Check(item.Key, _nrpeCurrentConfig.AddNRPECheck(new NRPEHostConfiguration.Check(item.Key,
item.Value.WarningThresholdCell.Value.ToString(), item.Value.CriticalThresholdCell.Value.ToString())); item.Value.WarningThresholdCell.Value.ToString().Trim(), item.Value.CriticalThresholdCell.Value.ToString().Trim()));
} }
} }
@ -374,5 +382,13 @@ namespace XenAdmin.SettingsPanels
AllowHostsTextBox.ForeColor = Color.FromKnownColor(KnownColor.ControlDark); AllowHostsTextBox.ForeColor = Color.FromKnownColor(KnownColor.ControlDark);
} }
} }
private void CheckDataGridView_EndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (CheckGroup checkGroup in _checkGroupList)
{
checkGroup.CheckValue();
}
}
} }
} }

View File

@ -9,7 +9,7 @@
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>XenAdmin</RootNamespace> <RootNamespace>XenAdmin</RootNamespace>
<AssemblyName>XenCenter</AssemblyName> <AssemblyName>[XenCenter]</AssemblyName>
<ApplicationIcon>..\Branding\Images\AppIcon.ico</ApplicationIcon> <ApplicationIcon>..\Branding\Images\AppIcon.ico</ApplicationIcon>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl> <PublishUrl>publish\</PublishUrl>
@ -483,6 +483,10 @@
<Compile Include="SettingsPanels\NRPEEditPage.Designer.cs"> <Compile Include="SettingsPanels\NRPEEditPage.Designer.cs">
<DependentUpon>NRPEEditPage.cs</DependentUpon> <DependentUpon>NRPEEditPage.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="SettingsPanels\NRPEEditPage.CheckGroup.cs">
<DependentUpon>NRPEEditPage.cs</DependentUpon>
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SettingsPanels\PoolAdvancedEditPage.cs"> <Compile Include="SettingsPanels\PoolAdvancedEditPage.cs">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
@ -6808,4 +6812,4 @@
<PropertyGroup> <PropertyGroup>
<PostBuildEvent>copy "$(ProjectDir)\ReportViewer\resource_report.rdlc" "$(TargetDir)"</PostBuildEvent> <PostBuildEvent>copy "$(ProjectDir)\ReportViewer\resource_report.rdlc" "$(TargetDir)"</PostBuildEvent>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -1,267 +0,0 @@
/* Copyright (c) Cloud Software Group, Inc.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
using System.Drawing;
using System.Windows.Forms;
namespace XenAdmin.Actions.NRPE
{
public class CheckGroup
{
private static readonly string DEFAULT_CHECK_WARNING_THRESHOLD = "80";
private static readonly string DEFAULT_CHECK_CRITICAL_THRESHOLD = "90";
private readonly decimal THRESHOLD_MINIMUM = 0.01M;
private readonly decimal THRESHOLD_MAXIMUM = 100M;
private string name;
private string warningThresholdDefault;
private string criticalThresholdDefault;
private bool changed;
protected DataGridViewRow checkThresholdRow;
protected DataGridViewTextBoxCell nameCell;
protected DataGridViewTextBoxCell warningThresholdCell;
protected DataGridViewTextBoxCell criticalThresholdCell;
public string Name { get => name; set => name = value; }
public string WarningThresholdDefault { get => warningThresholdDefault; set => warningThresholdDefault = value; }
public string CriticalThresholdDefault { get => criticalThresholdDefault; set => criticalThresholdDefault = value; }
public bool Changed { get => changed; set => changed = value; }
public DataGridViewRow CheckThresholdRow { get => checkThresholdRow; set => checkThresholdRow = value; }
public DataGridViewTextBoxCell NameCell { get => nameCell; set => nameCell = value; }
public DataGridViewTextBoxCell WarningThresholdCell { get => warningThresholdCell; set => warningThresholdCell = value; }
public DataGridViewTextBoxCell CriticalThresholdCell { get => criticalThresholdCell; set => criticalThresholdCell = value; }
public CheckGroup(string name, string labelName, string warningThresholdDefaultValue, string criticalThresholdDefaultValue)
{
InitCheckGroup(name, labelName, warningThresholdDefaultValue, criticalThresholdDefaultValue);
}
public CheckGroup(string name, string labelName)
{
InitCheckGroup(name, labelName, DEFAULT_CHECK_WARNING_THRESHOLD, DEFAULT_CHECK_CRITICAL_THRESHOLD);
}
private void InitCheckGroup(string name, string labelName, string warningThresholdDefaultValue, string criticalThresholdDefaultValue)
{
Name = name;
nameCell = new DataGridViewTextBoxCell { Value = labelName };
warningThresholdDefault = warningThresholdDefaultValue;
criticalThresholdDefault = criticalThresholdDefaultValue;
warningThresholdCell = new DataGridViewTextBoxCell { Value = warningThresholdDefaultValue };
criticalThresholdCell = new DataGridViewTextBoxCell { Value = criticalThresholdDefaultValue };
checkThresholdRow = new DataGridViewRow();
checkThresholdRow.Cells.AddRange(nameCell, warningThresholdCell, criticalThresholdCell);
checkThresholdRow.DefaultCellStyle.Format = "N2";
checkThresholdRow.DefaultCellStyle.NullValue = 0;
warningThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlDark);
criticalThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlDark);
}
public void UpdateThreshold(string warningThreshold, string criticalThreshold)
{
warningThresholdCell.Value = warningThreshold;
criticalThresholdCell.Value = criticalThreshold;
warningThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
criticalThresholdCell.Style.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
}
public virtual bool CheckValue()
{
warningThresholdCell.ErrorText = "";
criticalThresholdCell.ErrorText = "";
if (IsEmptyForPool())
{
return true;
}
if (CheckEachValue(warningThresholdCell) &&
CheckEachValue(criticalThresholdCell) &&
CompareWarningAndCritical() &&
CheckModifyAllForPool())
{
return true;
}
return false;
}
private bool IsEmptyForPool()
{
return warningThresholdCell.Style.ForeColor.Equals(Color.FromKnownColor(KnownColor.ControlDark))
&& criticalThresholdCell.Style.ForeColor.Equals(Color.FromKnownColor(KnownColor.ControlDark));
}
protected virtual bool CheckEachValue(DataGridViewTextBoxCell cell)
{
string thresholdStr = cell.Value.ToString().Trim();
if (thresholdStr.Equals(""))
{
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_NOT_BE_EMPTY);
return false;
}
if (!decimal.TryParse(thresholdStr, out decimal threshold))
{
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_BE_NUMBER);
return false;
}
if (threshold < THRESHOLD_MINIMUM || threshold > THRESHOLD_MAXIMUM)
{
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_RANGE_ERROR, THRESHOLD_MINIMUM, THRESHOLD_MAXIMUM);
return false;
}
cell.ErrorText = "";
return true;
}
protected virtual bool CompareWarningAndCritical()
{
decimal.TryParse(warningThresholdCell.Value.ToString().Trim(), out decimal warningDecimal);
decimal.TryParse(criticalThresholdCell.Value.ToString().Trim(), out decimal criticalDecimal);
if (warningDecimal < criticalDecimal)
{
warningThresholdCell.ErrorText = "";
return true;
}
else
{
warningThresholdCell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_WARNING_SHOULD_LESS_THAN_CRITICAL);
return false;
}
}
private bool CheckModifyAllForPool()
{
if (warningThresholdCell.Style.ForeColor.Equals(Color.FromKnownColor(KnownColor.ControlText))
&& criticalThresholdCell.Style.ForeColor.Equals(Color.FromKnownColor(KnownColor.ControlDark)))
{
criticalThresholdCell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_NOT_BE_EMPTY);
return false;
}
else if (warningThresholdCell.Style.ForeColor.Equals(Color.FromKnownColor(KnownColor.ControlDark))
&& criticalThresholdCell.Style.ForeColor.Equals(Color.FromKnownColor(KnownColor.ControlText)))
{
warningThresholdCell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_NOT_BE_EMPTY);
return false;
}
return true;
}
}
public class FreeCheckGroup : CheckGroup
{
private static readonly string DEFAULT_CHECK_WARNING_THRESHOLD = "20";
private static readonly string DEFAULT_CHECK_CRITICAL_THRESHOLD = "10";
public FreeCheckGroup(string name, string labelName)
: base(name, labelName, DEFAULT_CHECK_WARNING_THRESHOLD, DEFAULT_CHECK_CRITICAL_THRESHOLD)
{
}
protected override bool CompareWarningAndCritical()
{
decimal.TryParse(warningThresholdCell.Value.ToString().Trim(), out decimal warningDecimal);
decimal.TryParse(criticalThresholdCell.Value.ToString().Trim(), out decimal criticalDecimal);
if (warningDecimal > criticalDecimal)
{
warningThresholdCell.ErrorText = "";
return true;
}
else
{
warningThresholdCell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_WARNING_SHOULD_BIGGER_THAN_CRITICAL);
return false;
}
}
}
public class HostLoadCheckGroup : CheckGroup
{
private static readonly string DEFAULT_CHECK_WARNING_THRESHOLD = "3";
private static readonly string DEFAULT_CHECK_CRITICAL_THRESHOLD = "4";
public HostLoadCheckGroup(string name, string labelName)
: base(name, labelName, DEFAULT_CHECK_WARNING_THRESHOLD, DEFAULT_CHECK_CRITICAL_THRESHOLD)
{
}
}
public class Dom0LoadCheckGroup : CheckGroup
{
private static readonly string DEFAULT_CHECK_WARNING_THRESHOLD = "2.7,2.6,2.5";
private static readonly string DEFAULT_CHECK_CRITICAL_THRESHOLD = "3.2,3.1,3";
public Dom0LoadCheckGroup(string name, string labelName)
: base(name, labelName, DEFAULT_CHECK_WARNING_THRESHOLD, DEFAULT_CHECK_CRITICAL_THRESHOLD)
{
}
protected override bool CompareWarningAndCritical()
{
string[] warningArray = warningThresholdCell.Value.ToString().Split(',');
string[] criticalArray = criticalThresholdCell.Value.ToString().Split(',');
for (int i = 0; i < 3; i++)
{
decimal.TryParse(warningArray[i].Trim(), out decimal warningDecimal);
decimal.TryParse(criticalArray[i].Trim(), out decimal criticalDecimal);
if (warningDecimal > criticalDecimal)
{
warningThresholdCell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_WARNING_SHOULD_LESS_THAN_CRITICAL);
return false;
}
}
warningThresholdCell.ErrorText = "";
return true;
}
protected override bool CheckEachValue(DataGridViewTextBoxCell cell)
{
checkThresholdRow.DataGridView.ShowCellToolTips = true;
cell.ErrorText = string.Format(Messages.NRPE_THRESHOLD_SHOULD_BE_3_NUMBERS);
string[] loadArray = cell.Value.ToString().Split(',');
if (loadArray.Length != 3)
{
return false;
}
foreach (string load in loadArray)
{
bool isDecimal = decimal.TryParse(load, out _);
if (!isDecimal)
{
return false;
}
}
cell.ErrorText = "";
return true;
}
}
}

View File

@ -29,7 +29,6 @@
*/ */
using System; using System;
using System.Collections.Generic;
using XenAdmin.Core; using XenAdmin.Core;
using XenAPI; using XenAPI;
@ -41,16 +40,14 @@ namespace XenAdmin.Actions.NRPE
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private readonly NRPEHostConfiguration _nrpeCurrentConfig; private readonly NRPEHostConfiguration _nrpeCurrentConfig;
private readonly Dictionary<string, CheckGroup> _checkGroupDictByName;
private readonly IXenObject _clone; private readonly IXenObject _clone;
public NRPERetrieveAction(IXenObject host, NRPEHostConfiguration nrpeHostConfiguration, Dictionary<string, CheckGroup> checkGroupDictByName, bool suppressHistory) public NRPERetrieveAction(IXenObject host, NRPEHostConfiguration nrpeHostConfiguration, bool suppressHistory)
: base(host.Connection, Messages.NRPE_ACTION_RETRIEVING, Messages.NRPE_ACTION_RETRIEVING, suppressHistory) : base(host.Connection, Messages.NRPE_ACTION_RETRIEVING, Messages.NRPE_ACTION_RETRIEVING, suppressHistory)
{ {
_clone = host; _clone = host;
_nrpeCurrentConfig = nrpeHostConfiguration; _nrpeCurrentConfig = nrpeHostConfiguration;
_checkGroupDictByName = checkGroupDictByName;
} }
protected override void Run() protected override void Run()
@ -65,7 +62,7 @@ namespace XenAdmin.Actions.NRPE
} }
catch (Exception e) catch (Exception e)
{ {
log.ErrorFormat("Execute NRPE plugin failed, failed reason: {0}", e.Message); log.ErrorFormat("Run NRPE plugin failed, failed reason: {0}", e.Message);
_nrpeCurrentConfig.Status = NRPEHostConfiguration.RetrieveNRPEStatus.Failed; _nrpeCurrentConfig.Status = NRPEHostConfiguration.RetrieveNRPEStatus.Failed;
} }
} }
@ -74,12 +71,12 @@ namespace XenAdmin.Actions.NRPE
{ {
string status = Host.call_plugin(o.Connection.Session, o.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME, string status = Host.call_plugin(o.Connection.Session, o.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME,
NRPEHostConfiguration.XAPI_NRPE_STATUS, null); NRPEHostConfiguration.XAPI_NRPE_STATUS, null);
log.InfoFormat("Execute nrpe {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_STATUS, status); log.InfoFormat("Run NRPE {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_STATUS, status);
_nrpeCurrentConfig.EnableNRPE = status.Trim().Equals("active enabled"); _nrpeCurrentConfig.EnableNRPE = status.Trim().Equals("active enabled");
string nrpeConfig = Host.call_plugin(o.Connection.Session, o.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME, string nrpeConfig = Host.call_plugin(o.Connection.Session, o.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME,
NRPEHostConfiguration.XAPI_NRPE_GET_CONFIG, null); NRPEHostConfiguration.XAPI_NRPE_GET_CONFIG, null);
log.InfoFormat("Execute nrpe {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_GET_CONFIG, nrpeConfig); log.InfoFormat("Run NRPE {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_GET_CONFIG, nrpeConfig);
string[] nrpeConfigArray = nrpeConfig.Split('\n'); string[] nrpeConfigArray = nrpeConfig.Split('\n');
foreach (string nrpeConfigItem in nrpeConfigArray) foreach (string nrpeConfigItem in nrpeConfigArray)
@ -106,21 +103,15 @@ namespace XenAdmin.Actions.NRPE
{ {
string nrpeThreshold = Host.call_plugin(o.Connection.Session, o.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME, string nrpeThreshold = Host.call_plugin(o.Connection.Session, o.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME,
NRPEHostConfiguration.XAPI_NRPE_GET_THRESHOLD, null); NRPEHostConfiguration.XAPI_NRPE_GET_THRESHOLD, null);
log.InfoFormat("Execute nrpe {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_GET_THRESHOLD, nrpeThreshold); log.InfoFormat("Run NRPE {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_GET_THRESHOLD, nrpeThreshold);
string[] nrpeThresholdArray = nrpeThreshold.Split('\n'); string[] nrpeThresholdArray = nrpeThreshold.Split('\n');
foreach (string nrpeThresholdItem in nrpeThresholdArray) foreach (string nrpeThresholdItem in nrpeThresholdArray)
{ {
// Return string format for each line: check_cpu warning threshold - 50 critical threshold - 80 // Return string format for each line: check_cpu warning threshold - 50 critical threshold - 80
string[] thresholdRtnArray = nrpeThresholdItem.Split(' '); string[] thresholdRtnArray = nrpeThresholdItem.Split(' ');
string checkName = thresholdRtnArray[0]; _nrpeCurrentConfig.AddNRPECheck(new NRPEHostConfiguration.Check(thresholdRtnArray[0],
if (_checkGroupDictByName.TryGetValue(thresholdRtnArray[0], out CheckGroup thresholdCheck)) thresholdRtnArray[4], thresholdRtnArray[8]));
{
string warningThreshold = thresholdRtnArray[4];
string criticalThreshold = thresholdRtnArray[8];
thresholdCheck.UpdateThreshold(warningThreshold, criticalThreshold);
_nrpeCurrentConfig.AddNRPECheck(new NRPEHostConfiguration.Check(checkName, warningThreshold, criticalThreshold));
}
} }
} }

View File

@ -30,6 +30,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
using XenAPI; using XenAPI;
@ -60,7 +61,8 @@ namespace XenAdmin.Actions.NRPE
} }
else else
{ {
SetNRPEConfigureForPool(); List<Host> hostList = ((Pool) _clone).Connection.Cache.Hosts.ToList();
hostList.ForEach(SetNRPEConfigureForHost);
} }
} }
@ -88,10 +90,10 @@ namespace XenAdmin.Actions.NRPE
foreach (KeyValuePair<string, NRPEHostConfiguration.Check> kvp in _nrpeHostConfiguration.CheckDict) foreach (KeyValuePair<string, NRPEHostConfiguration.Check> kvp in _nrpeHostConfiguration.CheckDict)
{ {
NRPEHostConfiguration.Check currentCheck = kvp.Value; NRPEHostConfiguration.Check currentCheck = kvp.Value;
_nrpeOriginalConfig.GetNRPECheck(kvp.Key, out NRPEHostConfiguration.Check OriginalCheck); _nrpeOriginalConfig.GetNRPECheck(kvp.Key, out NRPEHostConfiguration.Check originalCheck);
if (currentCheck != null && OriginalCheck != null if (currentCheck != null && originalCheck != null
&& (!currentCheck.WarningThreshold.Equals(OriginalCheck.WarningThreshold) && (!currentCheck.WarningThreshold.Equals(originalCheck.WarningThreshold)
|| !currentCheck.CriticalThreshold.Equals(OriginalCheck.CriticalThreshold))) || !currentCheck.CriticalThreshold.Equals(originalCheck.CriticalThreshold)))
{ {
SetNRPEThreshold(o, currentCheck.Name, currentCheck.WarningThreshold, currentCheck.CriticalThreshold); SetNRPEThreshold(o, currentCheck.Name, currentCheck.WarningThreshold, currentCheck.CriticalThreshold);
} }
@ -100,22 +102,13 @@ namespace XenAdmin.Actions.NRPE
RestartNRPE(o); RestartNRPE(o);
} }
private void SetNRPEConfigureForPool()
{
List<Host> hostList = ((Pool) _clone).Connection.Cache.Hosts.ToList();
hostList.ForEach(host =>
{
SetNRPEConfigureForHost(host);
});
}
private void SetNRPEStatus(IXenObject host, bool enableNRPE) private void SetNRPEStatus(IXenObject host, bool enableNRPE)
{ {
string nrpeUpdateStatusMethod = enableNRPE ? string nrpeUpdateStatusMethod = enableNRPE ?
NRPEHostConfiguration.XAPI_NRPE_ENABLE : NRPEHostConfiguration.XAPI_NRPE_DISABLE; NRPEHostConfiguration.XAPI_NRPE_ENABLE : NRPEHostConfiguration.XAPI_NRPE_DISABLE;
string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME, string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME,
nrpeUpdateStatusMethod, null); nrpeUpdateStatusMethod, null);
log.InfoFormat("Execute nrpe {0}, return: {1}", nrpeUpdateStatusMethod, result); log.InfoFormat("Run NRPE {0}, return: {1}", nrpeUpdateStatusMethod, result);
} }
private void SetNRPEGeneralConfiguration(IXenObject host, string allowHosts, bool debug, bool sslLogging) private void SetNRPEGeneralConfiguration(IXenObject host, string allowHosts, bool debug, bool sslLogging)
@ -128,7 +121,7 @@ namespace XenAdmin.Actions.NRPE
}; };
string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME, string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME,
NRPEHostConfiguration.XAPI_NRPE_SET_CONFIG, configArgDict); NRPEHostConfiguration.XAPI_NRPE_SET_CONFIG, configArgDict);
log.InfoFormat("Execute nrpe {0}, allowed_hosts={1}, debug={2}, ssl_logging={3}, return: {4}", log.InfoFormat("Run NRPE {0}, allowed_hosts={1}, debug={2}, ssl_logging={3}, return: {4}",
NRPEHostConfiguration.XAPI_NRPE_SET_CONFIG, NRPEHostConfiguration.XAPI_NRPE_SET_CONFIG,
_nrpeHostConfiguration.AllowHosts, _nrpeHostConfiguration.AllowHosts,
_nrpeHostConfiguration.Debug, _nrpeHostConfiguration.Debug,
@ -146,7 +139,7 @@ namespace XenAdmin.Actions.NRPE
}; };
string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME, string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME,
NRPEHostConfiguration.XAPI_NRPE_SET_THRESHOLD, thresholdArgDict); NRPEHostConfiguration.XAPI_NRPE_SET_THRESHOLD, thresholdArgDict);
log.InfoFormat("Execute nrpe {0}, check={1}, w={2}, c={3}, return: {4}", log.InfoFormat("Run NRPE {0}, check={1}, w={2}, c={3}, return: {4}",
NRPEHostConfiguration.XAPI_NRPE_SET_THRESHOLD, NRPEHostConfiguration.XAPI_NRPE_SET_THRESHOLD,
checkName, checkName,
warningThreshold, warningThreshold,
@ -159,7 +152,7 @@ namespace XenAdmin.Actions.NRPE
{ {
string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME, string result = Host.call_plugin(host.Connection.Session, host.opaque_ref, NRPEHostConfiguration.XAPI_NRPE_PLUGIN_NAME,
NRPEHostConfiguration.XAPI_NRPE_RESTART, null); NRPEHostConfiguration.XAPI_NRPE_RESTART, null);
log.InfoFormat("Execute nrpe {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_RESTART, result); log.InfoFormat("Run NRPE {0}, return: {1}", NRPEHostConfiguration.XAPI_NRPE_RESTART, result);
} }
} }
} }

View File

@ -29151,7 +29151,7 @@ namespace XenAdmin {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Please remove duplicated address. /// Looks up a localized string similar to Please remove duplicate addresses.
/// </summary> /// </summary>
public static string NRPE_ALLOW_HOSTS_SAME_ADDRESS { public static string NRPE_ALLOW_HOSTS_SAME_ADDRESS {
get { get {
@ -29286,7 +29286,7 @@ namespace XenAdmin {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Retrieve NRPE configuration failed, please check XenCenter logs.. /// Looks up a localized string similar to Failed to retrieve NRPE configuration, please check XenCenter logs..
/// </summary> /// </summary>
public static string NRPE_RETRIEVE_FAILED { public static string NRPE_RETRIEVE_FAILED {
get { get {

View File

@ -10117,7 +10117,7 @@ When you configure an NFS storage repository, you simply provide the host name o
<value>Comma separated IP address or domain list, e.g. 192.168.1.1, test.domain.com</value> <value>Comma separated IP address or domain list, e.g. 192.168.1.1, test.domain.com</value>
</data> </data>
<data name="NRPE_ALLOW_HOSTS_SAME_ADDRESS" xml:space="preserve"> <data name="NRPE_ALLOW_HOSTS_SAME_ADDRESS" xml:space="preserve">
<value>Please remove duplicated address</value> <value>Please remove duplicate addresses</value>
</data> </data>
<data name="NRPE_BATCH_CONFIGURATION" xml:space="preserve"> <data name="NRPE_BATCH_CONFIGURATION" xml:space="preserve">
<value>NRPE batch configuration</value> <value>NRPE batch configuration</value>
@ -10162,7 +10162,7 @@ When you configure an NFS storage repository, you simply provide the host name o
<value>NRPE service is inactive</value> <value>NRPE service is inactive</value>
</data> </data>
<data name="NRPE_RETRIEVE_FAILED" xml:space="preserve"> <data name="NRPE_RETRIEVE_FAILED" xml:space="preserve">
<value>Retrieve NRPE configuration failed, please check XenCenter logs.</value> <value>Failed to retrieve NRPE configuration, please check XenCenter logs.</value>
</data> </data>
<data name="NRPE_RETRIEVING_CONFIGURATION" xml:space="preserve"> <data name="NRPE_RETRIEVING_CONFIGURATION" xml:space="preserve">
<value>Retrieving NRPE configuration...</value> <value>Retrieving NRPE configuration...</value>

View File

@ -57,7 +57,6 @@
<Reference Include="System.ServiceProcess" /> <Reference Include="System.ServiceProcess" />
<Reference Include="System.Web" /> <Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" /> <Reference Include="System.Web.Extensions" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -89,7 +88,6 @@
<Compile Include="Actions\Host\HostAbstractAction.cs" /> <Compile Include="Actions\Host\HostAbstractAction.cs" />
<Compile Include="Actions\Host\RebootHostAction.cs" /> <Compile Include="Actions\Host\RebootHostAction.cs" />
<Compile Include="Actions\Host\RestartToolstackAction.cs" /> <Compile Include="Actions\Host\RestartToolstackAction.cs" />
<Compile Include="Actions\NRPE\CheckGroup.cs" />
<Compile Include="Actions\NRPE\NRPERetrieveAction.cs" /> <Compile Include="Actions\NRPE\NRPERetrieveAction.cs" />
<Compile Include="Actions\NRPE\NRPEUpdateAction.cs" /> <Compile Include="Actions\NRPE\NRPEUpdateAction.cs" />
<Compile Include="Actions\Host\ShutdownHostAction.cs" /> <Compile Include="Actions\Host\ShutdownHostAction.cs" />