diff --git a/XenAdmin/TabPages/DockerDetailsPage.Designer.cs b/XenAdmin/TabPages/DockerDetailsPage.Designer.cs index 2b3120fea..20ec72727 100755 --- a/XenAdmin/TabPages/DockerDetailsPage.Designer.cs +++ b/XenAdmin/TabPages/DockerDetailsPage.Designer.cs @@ -34,11 +34,14 @@ namespace XenAdmin.TabPages this.ButtonPanel = new System.Windows.Forms.Panel(); this.RefreshTime = new System.Windows.Forms.Label(); this.TreePanel = new System.Windows.Forms.Panel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.DetailtreeView = new System.Windows.Forms.TreeView(); + this.label1 = new System.Windows.Forms.Label(); this.RefreshTimer = new System.Windows.Forms.Timer(this.components); this.pageContainerPanel.SuspendLayout(); this.ButtonPanel.SuspendLayout(); this.TreePanel.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); this.SuspendLayout(); // // pageContainerPanel @@ -68,15 +71,27 @@ namespace XenAdmin.TabPages // TreePanel // resources.ApplyResources(this.TreePanel, "TreePanel"); - this.TreePanel.Controls.Add(this.DetailtreeView); + this.TreePanel.Controls.Add(this.tableLayoutPanel2); this.TreePanel.Controls.Add(this.ButtonPanel); this.TreePanel.Name = "TreePanel"; // + // tableLayoutPanel2 + // + resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2"); + this.tableLayoutPanel2.Controls.Add(this.DetailtreeView, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + // // DetailtreeView // resources.ApplyResources(this.DetailtreeView, "DetailtreeView"); this.DetailtreeView.Name = "DetailtreeView"; // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // // RefreshTimer // this.RefreshTimer.Tick += new System.EventHandler(this.RefreshTimer_Tick); @@ -91,6 +106,8 @@ namespace XenAdmin.TabPages this.ButtonPanel.ResumeLayout(false); this.ButtonPanel.PerformLayout(); this.TreePanel.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -101,8 +118,10 @@ namespace XenAdmin.TabPages private System.Windows.Forms.Panel TreePanel; private System.Windows.Forms.Panel ButtonPanel; private System.Windows.Forms.Label RefreshTime; - private System.Windows.Forms.TreeView DetailtreeView; private System.Windows.Forms.Timer RefreshTimer; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.TreeView DetailtreeView; + private System.Windows.Forms.Label label1; } } diff --git a/XenAdmin/TabPages/DockerDetailsPage.cs b/XenAdmin/TabPages/DockerDetailsPage.cs index 94f49bacc..13caea6e4 100755 --- a/XenAdmin/TabPages/DockerDetailsPage.cs +++ b/XenAdmin/TabPages/DockerDetailsPage.cs @@ -145,21 +145,34 @@ namespace XenAdmin.TabPages { if (cachedResult == currentResult) return; + cachedResult = currentResult; DetailtreeView.Nodes.Clear(); XmlDocument doc = new XmlDocument(); doc.LoadXml(currentResult); - IEnumerator ienum = doc.GetEnumerator(); - XmlNode docker_inspect; - while (ienum.MoveNext()) + + IEnumerator firstEnum = doc.GetEnumerator(); + XmlNode node; + while (firstEnum.MoveNext()) { - docker_inspect = (XmlNode) ienum.Current; - if (docker_inspect.NodeType != XmlNodeType.XmlDeclaration) + node = (XmlNode)firstEnum.Current; + + if (node.NodeType != XmlNodeType.XmlDeclaration) { - TreeNode rootNode = new TreeNode(); - CreateTree(docker_inspect, rootNode); - DetailtreeView.Nodes.Add(rootNode); + //we are on the root element now (docker_inspect) + //using the following enumerator to iterate through the children nodes and to build related sub-trees + //note that we are intentionally not adding the root node to the tree (UX decision) + var secondEnum = node.GetEnumerator(); + while (secondEnum.MoveNext()) + { + //recursively building the tree + TreeNode rootNode = new TreeNode(); + CreateTree((XmlNode)secondEnum.Current, rootNode); + + //adding the current sub-tree to the TreeView + DetailtreeView.Nodes.Add(rootNode); + } } } } diff --git a/XenAdmin/TabPages/DockerDetailsPage.resx b/XenAdmin/TabPages/DockerDetailsPage.resx index 9b6774bcd..14cb5789c 100755 --- a/XenAdmin/TabPages/DockerDetailsPage.resx +++ b/XenAdmin/TabPages/DockerDetailsPage.resx @@ -125,18 +125,24 @@ True + + 1 + Fill - 0, 0 + 7, 31 + + + 7, 3, 9, 3 - 816, 333 + 803, 299 - 0 + 1 DetailtreeView @@ -145,11 +151,80 @@ System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - TreePanel + tableLayoutPanel2 0 + + True + + + Segoe UI, 11.25pt + + + 3, 0 + + + 3, 0, 0, 2 + + + 0, 6, 10, 0 + + + 65, 26 + + + 2 + + + Details + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 1 + + + Fill + + + 0, 0 + + + 0, 0, 0, 0 + + + 2 + + + 819, 333 + + + 3 + + + tableLayoutPanel2 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + TreePanel + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="DetailtreeView" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,Percent,100" /></TableLayoutSettings> + True @@ -180,6 +255,9 @@ 4, 7 + + 9, 3, 3, 3 + 74, 23 @@ -208,7 +286,7 @@ 0, 333 - 816, 42 + 819, 42 2 @@ -229,7 +307,7 @@ 3, 3 - 816, 375 + 819, 375 3 diff --git a/XenAdmin/TabPages/DockerProcessPage.resx b/XenAdmin/TabPages/DockerProcessPage.resx index 6b42e185f..9aae72e1b 100644 --- a/XenAdmin/TabPages/DockerProcessPage.resx +++ b/XenAdmin/TabPages/DockerProcessPage.resx @@ -448,7 +448,7 @@ 27 - Docker Processes + Container Processes MiddleLeft diff --git a/XenAdmin/TabPages/GeneralTabPage.cs b/XenAdmin/TabPages/GeneralTabPage.cs index bb7390e69..8e005732f 100644 --- a/XenAdmin/TabPages/GeneralTabPage.cs +++ b/XenAdmin/TabPages/GeneralTabPage.cs @@ -383,7 +383,10 @@ namespace XenAdmin.TabPages public void EnableDisableEdit() { buttonProperties.Enabled = xenObject != null && !xenObject.Locked && xenObject.Connection != null && xenObject.Connection.IsConnected; - buttonProperties.Visible = !(xenObject is DockerContainer); + + //keeping it seperate + if (xenObject is DockerContainer) + buttonProperties.Enabled = false; } public void BuildList() @@ -468,7 +471,6 @@ namespace XenAdmin.TabPages generateMultipathBootBox(); generateVCPUsBox(); generateDockerInfoBox(); - generateDockerVersionBox(); generateReadCachingBox(); } @@ -1554,50 +1556,19 @@ namespace XenAdmin.TabPages if (info == null) return; - PDSection s = pdSectionDockerInfo; - addStringEntry(s, Messages.DOCKER_INFO_NGOROUTINES, info.NGoroutines); - addStringEntry(s, Messages.DOCKER_INFO_ROOT_DIR, info.DockerRootDir); - addStringEntry(s, Messages.DOCKER_INFO_DRIVER_STATUS, info.DriverStatus); - addStringEntry(s, Messages.OPERATING_SYSTEM, info.OperatingSystem); ; - addStringEntry(s, Messages.CONTAINER, info.Containers); - addStringEntry(s, Messages.MEMORY, Util.MemorySizeString(Convert.ToDouble(info.MemTotal))); - addStringEntry(s, Messages.DOCKER_INFO_DRIVER, info.Driver); - addStringEntry(s, Messages.DOCKER_INFO_INDEX_SERVER_ADDRESS, info.IndexServerAddress); - addStringEntry(s, Messages.DOCKER_INFO_INITIATE_PATH, info.InitPath); - addStringEntry(s, Messages.DOCKER_INFO_EXECUTION_DRIVER, info.ExecutionDriver); - addStringEntry(s, Messages.NAME, info.Name); - addStringEntry(s, Messages.DOCKER_INFO_NCPU, info.NCPU); - addStringEntry(s, Messages.DOCKER_INFO_DEBUG, info.Debug); - addStringEntry(s, Messages.ID, info.ID); - addStringEntry(s, Messages.DOCKER_INFO_IPV4_FORWARDING, info.IPv4Forwarding); - addStringEntry(s, Messages.DOCKER_INFO_KERNEL_VERSION, info.KernelVersion); - addStringEntry(s, Messages.DOCKER_INFO_NFD, info.NFd); - addStringEntry(s, Messages.DOCKER_INFO_INITIATE_SHA1, info.InitSha1); - addStringEntry(s, Messages.DOCKER_INFO_LABELS, info.Labels); - addStringEntry(s, Messages.DOCKER_INFO_MEMORY_LIMIT, Util.MemorySizeString(Convert.ToDouble(info.MemoryLimit))); - addStringEntry(s, Messages.DOCKER_INFO_SWAP_LIMIT, info.SwapLimit); - addStringEntry(s, Messages.CONTAINER_IMAGE, info.Images); - addStringEntry(s, Messages.DOCKER_INFO_NEVENT_LISTENER, info.NEventsListener); - } - - private void generateDockerVersionBox() - { - VM vm = xenObject as VM; - if (vm == null) - return; - VM_Docker_Version version = vm.DockerVersion; if (version == null) return; - PDSection s = pdSectionDockerVersion; - addStringEntry(s, Messages.DOCKER_INFO_KERNEL_VERSION, version.KernelVersion); - addStringEntry(s, Messages.DOCKER_INFO_ARCH, version.Arch); + PDSection s = pdSectionDockerInfo; + addStringEntry(s, Messages.DOCKER_INFO_API_VERSION, version.ApiVersion); addStringEntry(s, Messages.DOCKER_INFO_VERSION, version.Version); addStringEntry(s, Messages.DOCKER_INFO_GIT_COMMIT, version.GitCommit); - addStringEntry(s, Messages.OPERATING_SYSTEM, version.Os); - addStringEntry(s, Messages.DOCKER_INFO_GO_VERSION, version.GoVersion); + addStringEntry(s, Messages.DOCKER_INFO_DRIVER, info.Driver); + addStringEntry(s, Messages.DOCKER_INFO_INDEX_SERVER_ADDRESS, info.IndexServerAddress); + addStringEntry(s, Messages.DOCKER_INFO_EXECUTION_DRIVER, info.ExecutionDriver); + addStringEntry(s, Messages.DOCKER_INFO_IPV4_FORWARDING, info.IPv4Forwarding); } private bool CPUsIdentical(IEnumerable cpus) diff --git a/XenAdmin/TabPages/GeneralTabPage.resx b/XenAdmin/TabPages/GeneralTabPage.resx index 7ba555a7c..0497648c2 100644 --- a/XenAdmin/TabPages/GeneralTabPage.resx +++ b/XenAdmin/TabPages/GeneralTabPage.resx @@ -211,7 +211,7 @@ 1, 1, 1, 1 - Docker Information + Container Management - Docker Status 712, 34 diff --git a/XenModel/Messages.Designer.cs b/XenModel/Messages.Designer.cs index e082fa499..dd50c1dbb 100644 --- a/XenModel/Messages.Designer.cs +++ b/XenModel/Messages.Designer.cs @@ -10491,7 +10491,7 @@ namespace XenAdmin { } /// - /// Looks up a localized string similar to Docker Detail. + /// Looks up a localized string similar to Container Details. /// public static string DOCKER_DETAIL_TAB_TITLE { get { @@ -10698,7 +10698,7 @@ namespace XenAdmin { } /// - /// Looks up a localized string similar to Docker Processes. + /// Looks up a localized string similar to Container Processes. /// public static string DOCKER_PROCESS_TAB_TITLE { get { diff --git a/XenModel/Messages.resx b/XenModel/Messages.resx index ede2a15cd..dac4b7403 100755 --- a/XenModel/Messages.resx +++ b/XenModel/Messages.resx @@ -3731,10 +3731,10 @@ This will also delete its subfolders. does not use - Docker Detail + Container Details - Docker Processes + Container Processes Api Version