using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace Vestris.VMWareLib
{
///
/// VMWare job timeout metadata.
///
public class VMWareTimeoutAttribute : Attribute
{
private int _multiplier = 1;
///
/// A default base timeout multiplier.
///
public int Multiplier
{
get
{
return _multiplier;
}
set
{
_multiplier = value;
}
}
}
///
/// A collection of default timeouts used in VMWareTasks functions exposed without a timeout parameter.
///
public class VMWareTimeouts
{
///
/// Maximum time, in seconds, to establish a connection to a VMWare host.
///
[VMWareTimeoutAttribute]
public int ConnectTimeout;
///
/// Maximum time, in seconds, to open a virtual machine.
///
[VMWareTimeoutAttribute]
public int OpenVMTimeout;
///
/// Maximum time, in seconds, to register or unregister a virtual machine.
///
[VMWareTimeoutAttribute]
public int RegisterVMTimeout;
///
/// Maximum time, in seconds, to revert a snapshot.
///
[VMWareTimeoutAttribute]
public int RevertToSnapshotTimeout;
///
/// Maximum time, in seconds, to remove (delete) a snapshot.
///
[VMWareTimeoutAttribute(Multiplier = 10)]
public int RemoveSnapshotTimeout;
///
/// Maximum time, in seconds, to create a snapshot.
///
[VMWareTimeoutAttribute(Multiplier = 10)]
public int CreateSnapshotTimeout;
///
/// The maximum operational time, in seconds, to bring the power to/from the vm, not to boot it
///
[VMWareTimeoutAttribute]
public int PowerOnTimeout;
///
/// The maximum time, in seconds, to power off a virtual machine.
///
[VMWareTimeoutAttribute]
public int PowerOffTimeout;
///
/// The maximum time, in seconds, to reset a virtual machine.
///
[VMWareTimeoutAttribute]
public int ResetTimeout;
///
/// The maximum time, in seconds, to suspend a virtual machine.
///
[VMWareTimeoutAttribute]
public int SuspendTimeout;
///
/// The maximum time, in seconds, to pause a virtual machine.
///
[VMWareTimeoutAttribute]
public int PauseTimeout;
///
/// The maximum time, in seconds, to unpause (continue execution of) a virtual machine.
///
[VMWareTimeoutAttribute]
public int UnpauseTimeout;
///
/// The maximum time, in seconds, to wait for tools in a guest operating system.
///
[VMWareTimeoutAttribute(Multiplier = 5)]
public int WaitForToolsTimeout;
///
/// The maximum time, in seconds, to wait for a log-in to a guest operating system.
///
[VMWareTimeoutAttribute]
public int LoginTimeout;
///
/// Maximum time, in seconds, to copy a file from guest to host and from host to guest.
///
/// Copy is very slow, see http://communities.vmware.com/thread/184489.
///
///
[VMWareTimeoutAttribute(Multiplier = 20)]
public int CopyFileTimeout;
///
/// Maximum time, in seconds, to wait for a file to be deleted in the guest operating system.
///
[VMWareTimeoutAttribute]
public int DeleteFileTimeout;
///
/// Maximum time, in seconds, to wait for a directory to be deleted in the guest operating system.
///
[VMWareTimeoutAttribute]
public int DeleteDirectoryTimeout;
///
/// Maximum time, in seconds, to wait for a program to run in the guest operating system.
///
[VMWareTimeoutAttribute(Multiplier = 5)]
public int RunProgramTimeout;
///
/// Maximum time, in seconds, to wait for a script to run in the guest operating system.
///
[VMWareTimeoutAttribute(Multiplier = 5)]
public int RunScriptTimeout;
///
/// Maximum time, in seconds, to wait for an url to open in a browser on the guest operating system.
///
[VMWareTimeoutAttribute(Multiplier = 5)]
public int OpenUrlTimeout;
///
/// Maximum time, in seconds, to wait to check whether a file exists in the guest operating system.
///
[VMWareTimeoutAttribute]
public int FileExistsTimeout;
///
/// Maximum time, in seconds, to wait to check whether a directory exists in the guest operating system.
///
[VMWareTimeoutAttribute]
public int DirectoryExistsTimeout;
///
/// Maximum time, in seconds, to wait for a logout from a guest operating system to complete.
///
[VMWareTimeoutAttribute]
public int LogoutTimeout;
///
/// Maximum time, in seconds, to list the contents of a directory in the guest operating system.
///
[VMWareTimeoutAttribute]
public int ListDirectoryTimeout;
///
/// Maximum time, in seconds, to wait to read a remote variable.
///
[VMWareTimeoutAttribute]
public int ReadVariableTimeout;
///
/// Maximum time, in seconds, to wait to write a remote variable.
///
[VMWareTimeoutAttribute]
public int WriteVariableTimeout;
///
/// Maximum time, in seconds, to wait to enable or disable shared folders.
///
[VMWareTimeoutAttribute]
public int EnableSharedFoldersTimeout;
///
/// Maximum time, in seconds, to wait to fetch the list of shared folders.
///
[VMWareTimeoutAttribute]
public int GetSharedFoldersTimeout;
///
/// Maximum time, in seconds, to add/remove a shared folder.
///
[VMWareTimeoutAttribute]
public int AddRemoveSharedFolderTimeout;
///
/// Maximum time, in seconds, to capture a screen image.
///
[VMWareTimeoutAttribute]
public int CaptureScreenImageTimeout;
///
/// Maximum time, in seconds, to create a directory in the guest operating system.
///
[VMWareTimeoutAttribute]
public int CreateDirectoryTimeout;
///
/// Maximum time, in seconds, to create a temporary file in the guest operating system.
///
[VMWareTimeoutAttribute]
public int CreateTempFileTimeout;
///
/// Maximum time, in seconds, to list processes in the guest operating system.
///
[VMWareTimeoutAttribute]
public int ListProcessesTimeout;
///
/// Maximum time, in seconds, to fetch a collection of items in find operations.
///
[VMWareTimeoutAttribute]
public int FindItemsTimeout;
///
/// Maximum time, in seconds, to kill a process in the guest operating system.
///
[VMWareTimeoutAttribute]
public int KillProcessTimeout;
///
/// Maximum time, in seconds, to begin and end a recording.
///
[VMWareTimeoutAttribute(Multiplier = 10)]
public int RecordingTimeout;
///
/// Maximum time, in seconds, to replay a snapshot.
///
[VMWareTimeoutAttribute(Multiplier = 10)]
public int ReplayTimeout;
///
/// Maximum time, in seconds, to wait for an upgrade for the virtual hardware.
///
[VMWareTimeoutAttribute(Multiplier = 5)]
public int UpgradeVirtualHardwareTimeout;
///
/// Maximum time, in seconds, to clone a virtual machine.
///
[VMWareTimeoutAttribute(Multiplier = 5)]
public int CloneTimeout;
///
/// Maximum time, in seconds, to delete a virtual machine.
///
[VMWareTimeoutAttribute]
public int DeleteTimeout;
///
/// Maximum time, in seconds, to get file information from a guest operating system.
///
[VMWareTimeoutAttribute]
public int GetFileInfoTimeout;
///
/// Maximum time, in seconds, to prepare to install or upgrade VMWare Tools.
///
[VMWareTimeoutAttribute]
public int InstallToolsTimeout;
///
/// A collection of timeouts based on a default 60-seconds base timeout.
///
public VMWareTimeouts()
: this(60)
{
}
///
/// A collection of timeouts based on a configurable base timeout.
///
/// a base timeout
public VMWareTimeouts(int baseTimeout)
{
FieldInfo[] timeouts = GetType().GetFields();
foreach (FieldInfo timeout in timeouts)
{
object[] timeoutAttributes = timeout.GetCustomAttributes(typeof(VMWareTimeoutAttribute), false);
if (timeoutAttributes == null || timeoutAttributes.Length == 0)
continue;
VMWareTimeoutAttribute timeoutAttribute = timeoutAttributes[0] as VMWareTimeoutAttribute;
timeout.SetValue(this, baseTimeout * timeoutAttribute.Multiplier);
}
}
}
}