2013-06-24 13:41:48 +02:00
|
|
|
|
/* Copyright (c) Citrix Systems Inc.
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* 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;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using XenAdmin.Alerts;
|
|
|
|
|
using XenAPI;
|
|
|
|
|
using XenAdmin.Properties;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using XenAdmin.Actions;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using XenAdmin.Core;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace XenAdmin.Dialogs.VMProtectionRecovery
|
|
|
|
|
{
|
|
|
|
|
public partial class PolicyHistory : UserControl
|
|
|
|
|
{
|
|
|
|
|
public PolicyHistory()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
|
|
|
|
|
ColumnExpand.DefaultCellStyle.NullValue = null;
|
|
|
|
|
comboBox1.SelectedIndex = 0;
|
|
|
|
|
dataGridView1.Columns[2].ValueType = typeof(DateTime);
|
|
|
|
|
dataGridView1.Columns[2].DefaultCellStyle.Format = Messages.DATEFORMAT_DMY_HM;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.RowIndex >= 0)
|
|
|
|
|
{
|
|
|
|
|
HistoryRow row = (HistoryRow)dataGridView1.Rows[e.RowIndex];
|
|
|
|
|
if (row.Alert.Type != "info")
|
|
|
|
|
{
|
|
|
|
|
row.Expanded = !row.Expanded;
|
|
|
|
|
row.RefreshRow();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private VMPP _vmpp;
|
|
|
|
|
public void RefreshTab(VMPP vmpp)
|
|
|
|
|
{
|
|
|
|
|
_vmpp = vmpp;
|
|
|
|
|
if (_vmpp == null)
|
|
|
|
|
{
|
|
|
|
|
labelHistory.Text = "";
|
|
|
|
|
comboBox1.Enabled = false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
comboBox1.Enabled = true;
|
|
|
|
|
RefreshGrid(_vmpp.RecentAlerts);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RefreshGrid(List<PolicyAlert> alerts)
|
|
|
|
|
{
|
|
|
|
|
if (_vmpp != null)
|
|
|
|
|
{
|
|
|
|
|
ReloadHistoryLabel();
|
|
|
|
|
dataGridView1.Rows.Clear();
|
|
|
|
|
var readOnlyAlerts = alerts.AsReadOnly();
|
|
|
|
|
foreach (var alert in readOnlyAlerts)
|
|
|
|
|
{
|
|
|
|
|
dataGridView1.Rows.Add(new HistoryRow(alert));
|
|
|
|
|
}
|
|
|
|
|
dataGridView1.Sort(ColumnDateTime, System.ComponentModel.ListSortDirection.Descending);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class HistoryRow : DataGridViewRow
|
|
|
|
|
{
|
|
|
|
|
private DataGridViewImageCell _expand = new DataGridViewImageCell();
|
|
|
|
|
private DataGridViewTextAndImageCell _result = new DataGridViewTextAndImageCell();
|
|
|
|
|
private DataGridViewTextBoxCell _dateTime = new DataGridViewTextBoxCell();
|
|
|
|
|
private DataGridViewTextBoxCell _description = new DataGridViewTextBoxCell();
|
|
|
|
|
public readonly PolicyAlert Alert;
|
|
|
|
|
|
|
|
|
|
public HistoryRow(PolicyAlert alert)
|
|
|
|
|
{
|
|
|
|
|
Alert = alert;
|
|
|
|
|
Cells.Add(_expand);
|
|
|
|
|
_expand.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
|
|
|
|
|
Cells.Add(_result);
|
|
|
|
|
Cells.Add(_dateTime);
|
|
|
|
|
Cells.Add(_description);
|
|
|
|
|
|
|
|
|
|
RefreshRow();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
[DefaultValue(false)]
|
|
|
|
|
public bool Expanded { get; set; }
|
|
|
|
|
public void RefreshRow()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
_expand.Value = Expanded ? Resources.expanded_triangle : Resources.contracted_triangle;
|
|
|
|
|
if (Alert.Type == "info")
|
|
|
|
|
_expand.Value = null;
|
|
|
|
|
|
|
|
|
|
if (Alert.Type == "error")
|
|
|
|
|
{
|
|
|
|
|
_result.Image = Properties.Resources._075_WarningRound_h32bit_16;
|
|
|
|
|
_result.Value = Messages.ERROR;
|
|
|
|
|
}
|
|
|
|
|
else if (Alert.Type == "warn")
|
|
|
|
|
{
|
|
|
|
|
_result.Image = Properties.Resources._075_WarningRound_h32bit_16;
|
|
|
|
|
_result.Value = Messages.WARNING;
|
|
|
|
|
}
|
|
|
|
|
else if (Alert.Type == "info")
|
|
|
|
|
{
|
|
|
|
|
_result.Image = Properties.Resources._075_TickRound_h32bit_16;
|
|
|
|
|
_result.Value = Messages.INFORMATION;
|
|
|
|
|
}
|
|
|
|
|
_dateTime.Value = Alert.Time;
|
|
|
|
|
if (Alert.Type == "error")
|
|
|
|
|
_description.Value = Expanded ? string.Format("{0}\r\n{1}", Alert.ShortFormatBody, Alert.Text) : Alert.ShortFormatBody.Ellipsise(80);
|
|
|
|
|
else
|
|
|
|
|
_description.Value = Expanded ? Alert.Text : Alert.ShortFormatBody.Ellipsise(90);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Clear()
|
|
|
|
|
{
|
|
|
|
|
dataGridView1.Rows.Clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (_vmpp != null)
|
|
|
|
|
{
|
|
|
|
|
if (comboBox1.SelectedIndex == 0)
|
|
|
|
|
RefreshGrid(_vmpp.RecentAlerts);
|
|
|
|
|
else if (comboBox1.SelectedIndex == 1)
|
|
|
|
|
{
|
|
|
|
|
dataGridView1.Rows.Clear();
|
|
|
|
|
panelLoading.Visible = true;
|
|
|
|
|
GetVMPPAlertsAction action = new GetVMPPAlertsAction(_vmpp, 24);
|
2013-08-05 15:28:21 +02:00
|
|
|
|
action.Completed += action_Completed;
|
2013-06-24 13:41:48 +02:00
|
|
|
|
action.RunAsync();
|
|
|
|
|
}
|
|
|
|
|
else if (comboBox1.SelectedIndex == 2)
|
|
|
|
|
{
|
|
|
|
|
dataGridView1.Rows.Clear();
|
|
|
|
|
panelLoading.Visible = true;
|
|
|
|
|
GetVMPPAlertsAction action = new GetVMPPAlertsAction(_vmpp, 7 * 24);
|
2013-08-05 15:28:21 +02:00
|
|
|
|
action.Completed += action_Completed;
|
2013-06-24 13:41:48 +02:00
|
|
|
|
action.RunAsync();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-08-05 15:28:21 +02:00
|
|
|
|
void action_Completed(ActionBase sender)
|
2013-06-24 13:41:48 +02:00
|
|
|
|
{
|
|
|
|
|
var action = (GetVMPPAlertsAction)sender;
|
|
|
|
|
Program.Invoke(Program.MainWindow, () =>
|
|
|
|
|
{
|
|
|
|
|
panelLoading.Visible = false;
|
|
|
|
|
RefreshGrid(action.VMPP.Alerts);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ReloadHistoryLabel()
|
|
|
|
|
{
|
|
|
|
|
string vmppName = _vmpp.Name;
|
|
|
|
|
// ellipsise if necessary
|
|
|
|
|
using (System.Drawing.Graphics g = labelHistory.CreateGraphics())
|
|
|
|
|
{
|
|
|
|
|
int maxWidth = label1.Left - labelHistory.Left;
|
|
|
|
|
int availableWidth = maxWidth - (int)g.MeasureString(string.Format(Messages.HISTORY_FOR_POLICY, ""), labelHistory.Font).Width;
|
2013-09-26 15:35:57 +02:00
|
|
|
|
vmppName = vmppName.Ellipsise(new System.Drawing.Rectangle(0, 0, availableWidth, labelHistory.Height), labelHistory.Font);
|
2013-06-24 13:41:48 +02:00
|
|
|
|
}
|
|
|
|
|
labelHistory.Text = string.Format(Messages.HISTORY_FOR_POLICY, vmppName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|