This commit is contained in:
Virtuworks 2015-02-16 21:57:07 -05:00
commit 3786fe1b19
17 changed files with 1503 additions and 19 deletions

View file

@ -43,7 +43,7 @@ namespace WebsitePanel.Portal.RDS
{
if (!IsPostBack)
{
servers.HideRefreshButton();
}
}

View file

@ -26,6 +26,7 @@
// (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 AjaxControlToolkit;
using System;
using System.Collections.Generic;
using System.Linq;
@ -40,14 +41,31 @@ namespace WebsitePanel.Portal.RDS
{
protected void Page_Load(object sender, EventArgs e)
{
servers.Module = Module;
servers.OnRefreshClicked -= OnRefreshClicked;
servers.OnRefreshClicked += OnRefreshClicked;
if (!Page.IsPostBack)
{
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
litCollectionName.Text = collection.DisplayName;
litCollectionName.Text = collection.DisplayName;
}
}
private bool SaveRdsServers()
private void OnRefreshClicked(object sender, EventArgs e)
{
var rdsServers = (List<RdsServer>)sender;
foreach (var rdsServer in rdsServers)
{
rdsServer.Status = ES.Services.RDS.GetRdsServerStatus(PanelRequest.ItemID, rdsServer.FqdName);
}
servers.BindServers(rdsServers.ToArray());
((ModalPopupExtender)asyncTasks.FindControl("ModalPopupProperties")).Hide();
}
private bool SaveRdsServers(bool exit = false)
{
try
{
@ -62,6 +80,15 @@ namespace WebsitePanel.Portal.RDS
ES.Services.RDS.EditRdsCollection(PanelRequest.ItemID, collection);
if (!exit)
{
foreach(var rdsServer in collection.Servers)
{
rdsServer.Status = ES.Services.RDS.GetRdsServerStatus(PanelRequest.ItemID, rdsServer.FqdName);
}
servers.BindServers(collection.Servers.ToArray());
}
}
catch(Exception ex)
{

View file

@ -138,12 +138,21 @@
<data name="btnDelete.Text" xml:space="preserve">
<value>Delete</value>
</data>
<data name="btnServerInfoCancel.OnClientClick" xml:space="preserve">
<value>CloseProgressDialog();</value>
</data>
<data name="btnServerInfoCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="gvPopupServerName.HeaderText" xml:space="preserve">
<value>Server Name</value>
</data>
<data name="gvPopupServers.EmptyDataText" xml:space="preserve">
<value>No servers found.</value>
</data>
<data name="gvPopupStatus.HeaderText" xml:space="preserve">
<value>Status</value>
</data>
<data name="gvServerName.HeaderText" xml:space="preserve">
<value>Server Name</value>
</data>
@ -153,4 +162,28 @@
<data name="headerAddServers.Text" xml:space="preserve">
<value>Enabled Servers</value>
</data>
<data name="headerServerInfo.Text" xml:space="preserve">
<value>Server Info</value>
</data>
<data name="lbRestart.Text" xml:space="preserve">
<value>Restart</value>
</data>
<data name="lbShutdown.Text" xml:space="preserve">
<value>Shut Down</value>
</data>
<data name="lbViewInfo.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Getting Server Info ...');</value>
</data>
<data name="lbViewInfo.Text" xml:space="preserve">
<value>View Info</value>
</data>
<data name="locFreeSpace" xml:space="preserve">
<value>Free Space:</value>
</data>
<data name="locSize" xml:space="preserve">
<value>Size:</value>
</data>
<data name="locVolumeName.Text" xml:space="preserve">
<value>Volume Name:</value>
</data>
</root>

View file

@ -1,15 +1,17 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RDSCollectionServers.ascx.cs" Inherits="WebsitePanel.Portal.RDS.UserControls.RDSCollectionServers" %>
<%@ Register Src="../../UserControls/PopupHeader.ascx" TagName="PopupHeader" TagPrefix="wsp" %>
<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../../UserControls/CollapsiblePanel.ascx" %>
<asp:UpdatePanel ID="UsersUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<div class="FormButtonsBarClean">
<asp:Button ID="btnAdd" runat="server" Text="Add..." CssClass="Button1" OnClick="btnAdd_Click" meta:resourcekey="btnAdd" />
<asp:Button ID="btnDelete" runat="server" Text="Delete" CssClass="Button1" OnClick="btnDelete_Click" meta:resourcekey="btnDelete"/>
<asp:Button ID="btnRefresh" runat="server" Text="Refresh" CssClass="Button1" OnClick="btnRefresh_Click" OnClientClick="ShowProgressDialog('Refreshing...'); return true;" meta:resourcekey="btnRefresh" />
</div>
<asp:GridView ID="gvServers" runat="server" meta:resourcekey="gvServers" AutoGenerateColumns="False"
Width="600px" CssSelectorClass="NormalGridView"
DataKeyNames="Id">
DataKeyNames="Id" OnRowCommand="gvServers_RowCommand">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
@ -21,18 +23,139 @@
<ItemStyle Width="10px" />
</asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvServerName" HeaderText="gvServerName">
<ItemStyle Width="60%" Wrap="false">
<ItemStyle Width="30%" Wrap="false">
</ItemStyle>
<ItemTemplate>
<asp:Literal ID="litFqdName" runat="server" Text='<%# Eval("FqdName") %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvPopupStatus">
<ItemStyle Width="30%" HorizontalAlign="Left" />
<ItemTemplate>
<asp:Literal ID="litStatus" runat="server" Text='<%# Eval("Status") %>'></asp:Literal>
<asp:HiddenField ID="hdnRdsCollectionId" runat="server" Value='<%# Eval("RdsCollectionId") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvViewInfo">
<ItemStyle Width="10%" HorizontalAlign="Right"/>
<ItemTemplate>
<asp:LinkButton OnClientClick="ShowProgressDialog('Getting Server Info ...');return true;" Visible='<%# Eval("Status") != null && Eval("Status").ToString().StartsWith("Online") %>' CommandName="ViewInfo" CommandArgument='<%# Eval("FqdName")%>' ID="lbViewInfo" runat="server" Text="View Info"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvRestart">
<ItemStyle Width="10%" HorizontalAlign="Right"/>
<ItemTemplate>
<asp:LinkButton ID="lbRestart" CommandName="Restart" CommandArgument='<%# Eval("FqdName")%>' Visible='<%# Eval("Status") != null && Eval("Status").ToString().StartsWith("Online") %>'
runat="server" Text="Restart" OnClientClick="return confirm('Are you sure you want to restart selected server?')"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvShutdown">
<ItemStyle Width="10%" HorizontalAlign="Right"/>
<ItemTemplate>
<asp:LinkButton ID="lbShutdown" CommandName="ShutDown" CommandArgument='<%# Eval("FqdName")%>' Visible='<%# Eval("Status") != null && Eval("Status").ToString().StartsWith("Online") %>'
runat="server" Text="Shut Down" OnClientClick="return confirm('Are you sure you want to shu down selected server?')"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:Panel ID="AddServersPanel" runat="server" CssClass="Popup" style="display:none">
<asp:Panel ID="ServerInfoPanel" runat="server" CssClass="Popup" style="display:none">
<table class="Popup-Header" cellpadding="0" cellspacing="0">
<tr>
<td class="Popup-HeaderLeft"/>
<td class="Popup-HeaderTitle">
<asp:Localize ID="Localize1" runat="server" meta:resourcekey="headerServerInfo"></asp:Localize>
</td>
<td class="Popup-HeaderRight"/>
</tr>
</table>
<div class="Popup-Content">
<div class="Popup-Body">
<br />
<asp:UpdatePanel ID="serverInfoUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<div class="Popup-Scroll" style="height:auto;">
<wsp:CollapsiblePanel id="secServerInfo" runat="server" TargetControlID="panelHardwareInfo" meta:resourcekey="secRdsApplicationEdit" Text=""/>
<asp:Panel runat="server" ID="panelHardwareInfo">
<table>
<tr>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="locProcessor" runat="server" Text="Processor:"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litProcessor" runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="locLoadPercentage" Text="Load Percentage:" runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litLoadPercentage" runat="server"/>
</td>
</tr>
<tr>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="locMemoryAllocated" runat="server" Text="Allocated Memory:"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litMemoryAllocated" runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="locFreeMemory" Text="Free Memory:" runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litFreeMemory" runat="server"/>
</td>
</tr>
</table>
</asp:Panel>
<wsp:CollapsiblePanel id="secRdsApplicationEdit" runat="server" TargetControlID="panelDiskDrives" meta:resourcekey="secRdsApplicationEdit" Text="Disk Drives"/>
<asp:Panel runat="server" ID="panelDiskDrives">
<table>
<asp:Repeater ID="rpServerDrives" runat="server" EnableViewState="false">
<ItemTemplate>
<tr>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litDeviceId" runat="server" Text='<%# Eval("DeviceId") %>'/>
</td>
<td class="FormLabel150" style="width: 150px;"/>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="locVolumeName" Text="Volume Name:" runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litVolumeName" Text='<%# Eval("VolumeName") %>' runat="server"/>
</td>
</tr>
<tr>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="locSize" Text="Size:" runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litSize" Text='<%# Eval("SizeMb") + " MB" %>' runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="locFreeSpace" Text="Free Space:" runat="server"/>
</td>
<td class="FormLabel150" style="width: 150px;">
<asp:Literal ID="litFreeSpace" Text='<%# Eval("FreeSpaceMb") + " MB" %>' runat="server"/>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</asp:Panel>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<br />
</div>
<div class="FormFooter">
<asp:Button ID="btnCancelServerInfo" runat="server" CssClass="Button1" meta:resourcekey="btnServerInfoCancel" Text="Cancel" CausesValidation="false" />
</div>
</div>
</asp:Panel>
<asp:Panel ID="AddServersPanel" runat="server" CssClass="Popup" style="display:none">
<table class="Popup-Header" cellpadding="0" cellspacing="0">
<tr>
<td class="Popup-HeaderLeft"></td>
@ -71,11 +194,11 @@
<ItemStyle Width="10px" />
</asp:TemplateField>
<asp:TemplateField meta:resourcekey="gvPopupServerName">
<ItemStyle Width="70%"></ItemStyle>
<ItemStyle Width="70%"/>
<ItemTemplate>
<asp:Literal ID="litName" runat="server" Text='<%# Eval("FqdName") %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
@ -91,10 +214,12 @@
</div>
</asp:Panel>
<asp:Button ID="btnAddServersFake" runat="server" style="display:none;" />
<ajaxToolkit:ModalPopupExtender ID="AddServersModal" runat="server"
TargetControlID="btnAddServersFake" PopupControlID="AddServersPanel"
BackgroundCssClass="modalBackground" DropShadow="false" CancelControlID="btnCancelAdd"/>
<asp:Button ID="btnViewInfoFake" runat="server" style="display:none;" />
<ajaxToolkit:ModalPopupExtender ID="ViewInfoModal" runat="server" TargetControlID="btnViewInfoFake" PopupControlID="ServerInfoPanel"
BackgroundCssClass="modalBackground" DropShadow="false" CancelControlID="btnCancelServerInfo"/>
<asp:Button ID="btnAddServersFake" runat="server" style="display:none;" />
<ajaxToolkit:ModalPopupExtender ID="AddServersModal" runat="server" TargetControlID="btnAddServersFake" PopupControlID="AddServersPanel"
BackgroundCssClass="modalBackground" DropShadow="false" CancelControlID="btnCancelAdd"/>
</ContentTemplate>
</asp:UpdatePanel>

View file

@ -35,12 +35,14 @@ using System.Linq;
using WebsitePanel.Providers.Web;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
using WebsitePanel.Providers.RemoteDesktopServices;
using AjaxControlToolkit;
namespace WebsitePanel.Portal.RDS.UserControls
{
public partial class RDSCollectionServers : WebsitePanelControlBase
{
public const string DirectionString = "DirectionString";
public event EventHandler OnRefreshClicked;
protected enum SelectedState
{
@ -53,6 +55,17 @@ namespace WebsitePanel.Portal.RDS.UserControls
{
BindServers(servers, false);
}
public void BindServers(RdsServer[] servers)
{
gvServers.DataSource = servers;
gvServers.DataBind();
}
public void HideRefreshButton()
{
btnRefresh.Visible = false;
}
public List<RdsServer> GetServers()
{
@ -172,6 +185,13 @@ namespace WebsitePanel.Portal.RDS.UserControls
RdsServer server = new RdsServer();
server.Id = (int)gvServers.DataKeys[i][0];
server.FqdName = ((Literal)row.FindControl("litFqdName")).Text;
server.Status = ((Literal)row.FindControl("litStatus")).Text;
var rdsCollectionId = ((HiddenField)row.FindControl("hdnRdsCollectionId")).Value;
if (!string.IsNullOrEmpty(rdsCollectionId))
{
server.RdsCollectionId = Convert.ToInt32(rdsCollectionId);
}
if (state == SelectedState.All ||
(state == SelectedState.Selected && chkSelect.Checked) ||
@ -209,6 +229,12 @@ namespace WebsitePanel.Portal.RDS.UserControls
protected void BindOrganizationServers()
{
RdsServer[] servers = ES.Services.RDS.GetOrganizationRdsServersPaged(PanelRequest.ItemID, PanelRequest.CollectionID, "FqdName", txtSearchValue.Text, null, 0, 1000).Servers;
foreach(var rdsServer in servers)
{
rdsServer.Status = ES.Services.RDS.GetRdsServerStatus(PanelRequest.ItemID, rdsServer.FqdName);
}
Array.Sort(servers, CompareAccount);
if (Direction == SortDirection.Ascending)
@ -240,5 +266,59 @@ namespace WebsitePanel.Portal.RDS.UserControls
{
return string.Compare(server1.FqdName, server2.FqdName);
}
protected void gvServers_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ViewInfo")
{
try
{
ShowInfo(e.CommandArgument.ToString());
}
catch (Exception)
{
}
}
else if (e.CommandName == "Restart")
{
Restart(e.CommandArgument.ToString());
}
else if (e.CommandName == "ShutDown")
{
ShutDown(e.CommandArgument.ToString());
}
}
protected void btnRefresh_Click(object sender, EventArgs e)
{
if (OnRefreshClicked != null)
{
OnRefreshClicked(GetServers(), new EventArgs());
}
}
private void ShowInfo(string serverName)
{
ViewInfoModal.Show();
var serverInfo = ES.Services.RDS.GetRdsServerInfo(PanelRequest.ItemID, serverName);
litProcessor.Text = string.Format("{0}x{1} MHz", serverInfo.NumberOfCores, serverInfo.MaxClockSpeed);
litLoadPercentage.Text = string.Format("{0}%", serverInfo.LoadPercentage);
litMemoryAllocated.Text = string.Format("{0} MB", serverInfo.MemoryAllocatedMb);
litFreeMemory.Text = string.Format("{0} MB", serverInfo.FreeMemoryMb);
rpServerDrives.DataSource = serverInfo.Drives;
rpServerDrives.DataBind();
}
private void Restart(string serverName)
{
ES.Services.RDS.RestartRdsServer(PanelRequest.ItemID, serverName);
Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "rds_edit_collection", "CollectionId=" + PanelRequest.CollectionID, "ItemID=" + PanelRequest.ItemID));
}
private void ShutDown(string serverName)
{
ES.Services.RDS.ShutDownRdsServer(PanelRequest.ItemID, serverName);
Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "rds_edit_collection", "CollectionId=" + PanelRequest.CollectionID, "ItemID=" + PanelRequest.ItemID));
}
}
}

View file

@ -39,6 +39,15 @@ namespace WebsitePanel.Portal.RDS.UserControls {
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnDelete;
/// <summary>
/// btnRefresh control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnRefresh;
/// <summary>
/// gvServers control.
/// </summary>
@ -48,6 +57,159 @@ namespace WebsitePanel.Portal.RDS.UserControls {
/// </remarks>
protected global::System.Web.UI.WebControls.GridView gvServers;
/// <summary>
/// ServerInfoPanel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel ServerInfoPanel;
/// <summary>
/// Localize1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize Localize1;
/// <summary>
/// serverInfoUpdatePanel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.UpdatePanel serverInfoUpdatePanel;
/// <summary>
/// secServerInfo control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secServerInfo;
/// <summary>
/// panelHardwareInfo control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel panelHardwareInfo;
/// <summary>
/// locProcessor control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal locProcessor;
/// <summary>
/// litProcessor control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal litProcessor;
/// <summary>
/// locLoadPercentage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal locLoadPercentage;
/// <summary>
/// litLoadPercentage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal litLoadPercentage;
/// <summary>
/// locMemoryAllocated control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal locMemoryAllocated;
/// <summary>
/// litMemoryAllocated control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal litMemoryAllocated;
/// <summary>
/// locFreeMemory control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal locFreeMemory;
/// <summary>
/// litFreeMemory control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal litFreeMemory;
/// <summary>
/// secRdsApplicationEdit control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secRdsApplicationEdit;
/// <summary>
/// panelDiskDrives control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel panelDiskDrives;
/// <summary>
/// rpServerDrives control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Repeater rpServerDrives;
/// <summary>
/// btnCancelServerInfo control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnCancelServerInfo;
/// <summary>
/// AddServersPanel control.
/// </summary>
@ -129,6 +291,24 @@ namespace WebsitePanel.Portal.RDS.UserControls {
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnCancelAdd;
/// <summary>
/// btnViewInfoFake control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnViewInfoFake;
/// <summary>
/// ViewInfoModal control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::AjaxControlToolkit.ModalPopupExtender ViewInfoModal;
/// <summary>
/// btnAddServersFake control.
/// </summary>