websitepanel/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/VpsDetailsGeneral.ascx.cs

299 lines
No EOL
12 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) 2012, Outercurve Foundation.
// 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.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// 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 WebsitePanel.Providers.Common;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.Virtualization;
using System.Collections.Generic;
namespace WebsitePanel.Portal.VPS
{
public partial class VpsDetailsGeneral : WebsitePanelModuleBase
{
private class ActionButton
{
public string Text { get; set; }
public string Command { get; set; }
public string Style { get; set; }
public string OnClientClick { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
BindGeneralDetails();
}
private void BindGeneralDetails()
{
VirtualMachine item = VirtualMachinesHelper.GetCachedVirtualMachine(PanelRequest.ItemID);
if (!String.IsNullOrEmpty(item.CurrentTaskId)
|| item.ProvisioningStatus == VirtualMachineProvisioningStatus.Error)
{
DetailsTable.Visible = false;
return;
}
VirtualMachine vm = null;
try
{
vm = ES.Services.VPS.GetVirtualMachineGeneralDetails(PanelRequest.ItemID);
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("VPS_ERROR_GET_VM_DETAILS", ex);
}
if (vm != null)
{
bool displayRDP = (Request.Browser.Browser == "IE"
&& Request.Browser.ActiveXControls
&& Request.Browser.VBScript
&& vm.State != VirtualMachineState.Off
&& vm.State != VirtualMachineState.Paused
&& vm.State != VirtualMachineState.Saved
&& item.RemoteDesktopEnabled);
lnkHostname.Text = item.Hostname.ToUpper();
lnkHostname.Visible = displayRDP;
litHostname.Text = item.Hostname.ToUpper();
litHostname.Visible = !displayRDP;
litDomain.Text = item.Domain;
if (!IsPostBack)
{
// set host name change form
txtHostname.Text = item.Hostname;
txtDomain.Text = item.Domain;
}
litRdpPageUrl.Text = Page.ResolveUrl("~/DesktopModules/WebsitePanel/VPS/RemoteDesktop/Connect.aspx?ItemID=" + PanelRequest.ItemID + "&Resolution=");
TimeSpan uptime = TimeSpan.FromMilliseconds(vm.Uptime);
uptime = uptime.Subtract(TimeSpan.FromMilliseconds(uptime.Milliseconds));
litUptime.Text = uptime.ToString();
litStatus.Text = GetLocalizedString("State." + vm.State.ToString());
litCreated.Text = vm.CreatedDate.ToString();
litHeartbeat.Text = GetLocalizedString("Heartbeat." + vm.Heartbeat.ToString());
// CPU
cpuGauge.Progress = vm.CpuUsage;
litCpuPercentage.Text = String.Format(GetLocalizedString("CpuPercentage.Text"), vm.CpuUsage);
// RAM
if (vm.RamSize > 0)
{
int ramPercent = Convert.ToInt32((float)vm.RamUsage / (float)vm.RamSize * 100);
ramGauge.Total = vm.RamSize;
ramGauge.Progress = vm.RamUsage;
litRamPercentage.Text = String.Format(GetLocalizedString("MemoryPercentage.Text"), ramPercent);
litRamUsage.Text = String.Format(GetLocalizedString("MemoryUsage.Text"), vm.RamUsage, vm.RamSize);
}
// HDD
if (vm.HddLogicalDisks != null && vm.HddLogicalDisks.Length > 0)
{
HddRow.Visible = true;
int freeHdd = 0;
int sizeHdd = 0;
foreach (LogicalDisk disk in vm.HddLogicalDisks)
{
freeHdd += disk.FreeSpace;
sizeHdd += disk.Size;
}
int usedHdd = sizeHdd - freeHdd;
int hddPercent = Convert.ToInt32((float)usedHdd / (float)sizeHdd * 100);
hddGauge.Total = sizeHdd;
hddGauge.Progress = usedHdd;
litHddPercentage.Text = String.Format(GetLocalizedString("HddPercentage.Text"), hddPercent);
litHddUsage.Text = String.Format(GetLocalizedString("HddUsage.Text"), freeHdd, sizeHdd, vm.HddLogicalDisks.Length);
}
// update image
imgThumbnail.ImageUrl =
String.Format("~/DesktopModules/WebsitePanel/VPS/VirtualMachineImage.ashx?ItemID={0}&rnd={1}",
PanelRequest.ItemID, DateTime.Now.Ticks);
// load virtual machine meta item
VirtualMachine vmi = VirtualMachinesHelper.GetCachedVirtualMachine(PanelRequest.ItemID);
// draw buttons
List<ActionButton> buttons = new List<ActionButton>();
if (vmi.StartTurnOffAllowed
&& (vm.State == VirtualMachineState.Off
|| vm.State == VirtualMachineState.Saved))
buttons.Add(CreateActionButton("Start", "start.png"));
if (vm.State == VirtualMachineState.Started)
{
if(vmi.RebootAllowed)
buttons.Add(CreateActionButton("Reboot", "reboot.png"));
if(vmi.StartTurnOffAllowed)
buttons.Add(CreateActionButton("ShutDown", "shutdown.png"));
}
if (vmi.StartTurnOffAllowed
&& (vm.State == VirtualMachineState.Started
|| vm.State == VirtualMachineState.Paused))
buttons.Add(CreateActionButton("TurnOff", "turnoff.png"));
if (vmi.PauseResumeAllowed
&& vm.State == VirtualMachineState.Started)
buttons.Add(CreateActionButton("Pause", "pause.png"));
if (vmi.PauseResumeAllowed
&& vm.State == VirtualMachineState.Paused)
buttons.Add(CreateActionButton("Resume", "start2.png"));
if (vmi.ResetAllowed
&& (vm.State == VirtualMachineState.Started
|| vm.State == VirtualMachineState.Paused))
buttons.Add(CreateActionButton("Reset", "reset2.png"));
repButtons.DataSource = buttons;
repButtons.DataBind();
// other actions
bool manageAllowed = VirtualMachinesHelper.IsVirtualMachineManagementAllowed(PanelSecurity.PackageId);
btnChangeHostnamePopup.Visible = manageAllowed;
}
else
{
DetailsTable.Visible = false;
messageBox.ShowErrorMessage("VPS_LOAD_VM_ITEM");
}
}
private ActionButton CreateActionButton(string command, string icon)
{
ActionButton btn = new ActionButton();
btn.Command = command;
btn.Style = String.Format(
"background: transparent url({0}) left center no-repeat;",
PortalUtils.GetThemedImage(String.Format("VPS/{0}", icon)));
string localizedText = GetLocalizedString("Command." + command);
btn.Text = localizedText != null ? localizedText : command;
btn.OnClientClick = GetLocalizedString("OnClientClick." + command);
return btn;
}
protected void repButtons_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
{
try
{
ResultObject res = null;
string command = e.CommandName;
if (command == "Snapshot")
{
res = ES.Services.VPS.CreateSnapshot(PanelRequest.ItemID);
}
else
{
// parse command
VirtualMachineRequestedState state = (VirtualMachineRequestedState)Enum.Parse(
typeof(VirtualMachineRequestedState), command, true);
// call services
res = ES.Services.VPS.ChangeVirtualMachineState(PanelRequest.ItemID, state);
}
// check results
if (res.IsSuccess)
{
if (command == "Snapshot")
{
// go to snapshots screen
Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "vps_snapshots",
"SpaceID=" + PanelSecurity.PackageId.ToString()));
}
else
{
// return
BindGeneralDetails();
return;
}
}
else
{
// show error
messageBox.ShowMessage(res, "VPS_ERROR_CHANGE_VM_STATE", "VPS");
}
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("VPS_ERROR_CHANGE_VM_STATE", ex);
}
}
protected void btnChangeHostname_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
return;
try
{
string hostname = String.Format("{0}.{1}", txtHostname.Text.Trim(), txtDomain.Text.Trim());
ResultObject res = ES.Services.VPS.UpdateVirtualMachineHostName(PanelRequest.ItemID,
hostname, chkUpdateComputerName.Checked);
if (res.IsSuccess)
{
// show success message
messageBox.ShowSuccessMessage("VPS_CHANGE_VM_HOSTNAME");
BindGeneralDetails();
// clear fields
//txtHostname.Text = "";
//txtDomain.Text = "";
chkUpdateComputerName.Checked = false;
}
else
{
// show error
messageBox.ShowMessage(res, "VPS_CHANGE_VM_HOSTNAME", "VPS");
}
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("VPS_CHANGE_VM_HOSTNAME", ex);
}
}
}
}