Compare commits
	
		
			2 Commits
		
	
	
		
			77adaea793
			...
			78608da00a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					78608da00a | ||
| 
						 | 
					f29f18eb26 | 
@@ -169,7 +169,7 @@ const updateMetricsHistory = (timestamp, status) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (!metricsHistory.value.nodes[nodeName]) {
 | 
					    if (!metricsHistory.value.nodes[nodeName]) {
 | 
				
			||||||
      metricsHistory.value.nodes[nodeName] = {
 | 
					      metricsHistory.value.nodes[nodeName] = {
 | 
				
			||||||
        health: { labels: [], data: [] },
 | 
					        health: { labels: [], data: [], maintenance: [] },
 | 
				
			||||||
        cpu: { labels: [], data: [] },
 | 
					        cpu: { labels: [], data: [] },
 | 
				
			||||||
        memory: { labels: [], data: [] },
 | 
					        memory: { labels: [], data: [] },
 | 
				
			||||||
        allocated: { labels: [], data: [] }
 | 
					        allocated: { labels: [], data: [] }
 | 
				
			||||||
@@ -197,8 +197,14 @@ const updateMetricsHistory = (timestamp, status) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      metricsHistory.value.nodes[nodeName][metric] = {
 | 
					      metricsHistory.value.nodes[nodeName][metric] = {
 | 
				
			||||||
        labels: nodeLabels,
 | 
					        labels: nodeLabels,
 | 
				
			||||||
        data: nodeData
 | 
					        data: nodeData,
 | 
				
			||||||
 | 
					        ...(metric === 'health' ? { maintenance: [...(metricsHistory.value.nodes[nodeName][metric].maintenance || []), isInMaintenance] } : {})
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      // Trim maintenance array if needed
 | 
				
			||||||
 | 
					      if (metric === 'health' && metricsHistory.value.nodes[nodeName][metric].maintenance.length > 180) {
 | 
				
			||||||
 | 
					        metricsHistory.value.nodes[nodeName][metric].maintenance.shift();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										368
									
								
								pvc-vue/src/assets/styles.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										368
									
								
								pvc-vue/src/assets/styles.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,368 @@
 | 
				
			|||||||
 | 
					/* Global spacing adjustments */
 | 
				
			||||||
 | 
					.content-grid {
 | 
				
			||||||
 | 
					  gap: 0.25rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.main-content {
 | 
				
			||||||
 | 
					  padding-top: 0.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Reduce space between page title and content */
 | 
				
			||||||
 | 
					.content-grid > *:first-child + * {
 | 
				
			||||||
 | 
					  margin-top: 0.375rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the specific space between title underline and first card */
 | 
				
			||||||
 | 
					.content-grid > div:first-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0.375rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Reduce space after PageTitle component */
 | 
				
			||||||
 | 
					.page-title {
 | 
				
			||||||
 | 
					  margin-bottom: 0.25rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove left padding from node tabs */
 | 
				
			||||||
 | 
					.nav-tabs {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Ensure node content aligns with left edge */
 | 
				
			||||||
 | 
					.node-content, .tab-content {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the specific element causing the padding */
 | 
				
			||||||
 | 
					div.node-tabs {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  padding-right: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* More aggressive targeting for node tabs */
 | 
				
			||||||
 | 
					.node-overview .nav,
 | 
				
			||||||
 | 
					.node-overview .nav-tabs,
 | 
				
			||||||
 | 
					.node-overview ul.nav,
 | 
				
			||||||
 | 
					.node-overview ul.nav-tabs {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					  border-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the first tab item specifically */
 | 
				
			||||||
 | 
					.node-overview .nav-item:first-child,
 | 
				
			||||||
 | 
					.node-overview .nav-link:first-child {
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target any container that might be wrapping the tabs */
 | 
				
			||||||
 | 
					.node-overview > div,
 | 
				
			||||||
 | 
					.node-overview > ul {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Style VM search bar section like node tabs */
 | 
				
			||||||
 | 
					.vm-search-container,
 | 
				
			||||||
 | 
					.vm-list-header,
 | 
				
			||||||
 | 
					.vm-controls {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  border-bottom: 1px solid rgba(0, 0, 0, 0.125) !important;
 | 
				
			||||||
 | 
					  border-radius: 0 !important;
 | 
				
			||||||
 | 
					  background-color: transparent !important;
 | 
				
			||||||
 | 
					  padding: 0.5rem 0 !important;
 | 
				
			||||||
 | 
					  margin-bottom: 1rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove any box shadow from VM search elements */
 | 
				
			||||||
 | 
					.vm-search-container *,
 | 
				
			||||||
 | 
					.vm-list-header *,
 | 
				
			||||||
 | 
					.vm-controls * {
 | 
				
			||||||
 | 
					  box-shadow: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Ensure search input has proper styling */
 | 
				
			||||||
 | 
					.vm-search-input {
 | 
				
			||||||
 | 
					  border: 1px solid rgba(0, 0, 0, 0.2) !important;
 | 
				
			||||||
 | 
					  border-radius: 0.25rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the specific VM list controls more directly */
 | 
				
			||||||
 | 
					.vm-overview .list-vms-container,
 | 
				
			||||||
 | 
					.vm-overview .vm-controls-container {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  box-shadow: none !important;
 | 
				
			||||||
 | 
					  background: transparent !important;
 | 
				
			||||||
 | 
					  border-bottom: 1px solid rgba(0, 0, 0, 0.125) !important;
 | 
				
			||||||
 | 
					  border-radius: 0 !important;
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the buttons and inputs directly */
 | 
				
			||||||
 | 
					.vm-overview .btn-group,
 | 
				
			||||||
 | 
					.vm-overview .input-group {
 | 
				
			||||||
 | 
					  margin: 0 !important;
 | 
				
			||||||
 | 
					  background: transparent !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the List VMs button specifically */
 | 
				
			||||||
 | 
					.vm-overview .btn-secondary,
 | 
				
			||||||
 | 
					.vm-overview button[type="button"] {
 | 
				
			||||||
 | 
					  background-color: #6c757d !important;
 | 
				
			||||||
 | 
					  border-color: #6c757d !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Super aggressive targeting for VM search container */
 | 
				
			||||||
 | 
					.vm-list-container > div:first-child,
 | 
				
			||||||
 | 
					.vm-overview > div:first-child,
 | 
				
			||||||
 | 
					div[class*="vm-"] > div:first-child {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  background: transparent !important;
 | 
				
			||||||
 | 
					  box-shadow: none !important;
 | 
				
			||||||
 | 
					  border-radius: 0 !important;
 | 
				
			||||||
 | 
					  border-bottom: 1px solid rgba(0, 0, 0, 0.125) !important;
 | 
				
			||||||
 | 
					  padding: 0.5rem 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the actual search box and buttons */
 | 
				
			||||||
 | 
					.input-group,
 | 
				
			||||||
 | 
					.btn-group {
 | 
				
			||||||
 | 
					  margin-bottom: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target any card or container in the VM list header */
 | 
				
			||||||
 | 
					.card,
 | 
				
			||||||
 | 
					.card-header,
 | 
				
			||||||
 | 
					.card-body {
 | 
				
			||||||
 | 
					  /* Target only VM list cards, not ValueCards */
 | 
				
			||||||
 | 
					  .vm-list-container .card,
 | 
				
			||||||
 | 
					  .vm-list-container .card-header,
 | 
				
			||||||
 | 
					  .vm-list-container .card-body,
 | 
				
			||||||
 | 
					  .vm-controls-container .card,
 | 
				
			||||||
 | 
					  .vm-controls-container .card-header,
 | 
				
			||||||
 | 
					  .vm-controls-container .card-body {
 | 
				
			||||||
 | 
					    border: none !important;
 | 
				
			||||||
 | 
					    background: transparent !important;
 | 
				
			||||||
 | 
					    box-shadow: none !important;
 | 
				
			||||||
 | 
					    padding: 0.5rem 0 !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the specific vm-controls-container element */
 | 
				
			||||||
 | 
					div.vm-controls-container {
 | 
				
			||||||
 | 
					  background-color: transparent !important;
 | 
				
			||||||
 | 
					  border-radius: 0 !important;
 | 
				
			||||||
 | 
					  box-shadow: none !important;
 | 
				
			||||||
 | 
					  padding: 0.5rem 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the light blue background */
 | 
				
			||||||
 | 
					div.vm-controls-container[data-v-8e678963] {
 | 
				
			||||||
 | 
					  background-color: transparent !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Adjust spacing after page title on VM page */
 | 
				
			||||||
 | 
					.vm-overview .page-title,
 | 
				
			||||||
 | 
					.vm-overview .page-title-container {
 | 
				
			||||||
 | 
					  margin-bottom: 0.05rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Ensure consistent spacing between title and controls */
 | 
				
			||||||
 | 
					.vm-overview .content-grid > *:first-child + * {
 | 
				
			||||||
 | 
					  margin-top: 0.05rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove lines under VM names */
 | 
				
			||||||
 | 
					.vm-list-item,
 | 
				
			||||||
 | 
					.vm-item {
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Ensure only the controls container has the bottom border */
 | 
				
			||||||
 | 
					.vm-list-container > div:not(:first-child),
 | 
				
			||||||
 | 
					.vm-overview > div:not(:first-child) {
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Further reduce spacing between title and controls */
 | 
				
			||||||
 | 
					.content-grid > div:first-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0.05rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Extremely aggressive spacing reduction */
 | 
				
			||||||
 | 
					.page-title + *,
 | 
				
			||||||
 | 
					.page-title-container + * {
 | 
				
			||||||
 | 
					  margin-top: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Specifically target VM list items to remove bottom borders */
 | 
				
			||||||
 | 
					.vm-list > div,
 | 
				
			||||||
 | 
					.vm-list-item,
 | 
				
			||||||
 | 
					.vm-item,
 | 
				
			||||||
 | 
					div[class*="vm-list"] > div {
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the VM list container to remove any borders from its children except the first */
 | 
				
			||||||
 | 
					.vm-list-container > div:not(:first-child) *,
 | 
				
			||||||
 | 
					.vm-overview > div:not(:first-child) * {
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Zero out all margins between title and controls */
 | 
				
			||||||
 | 
					.page-title,
 | 
				
			||||||
 | 
					.page-title-container,
 | 
				
			||||||
 | 
					.content-grid > div:first-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Reduce padding above the VM controls container */
 | 
				
			||||||
 | 
					div.vm-controls-container,
 | 
				
			||||||
 | 
					.vm-list-container > div:first-child {
 | 
				
			||||||
 | 
					  margin-top: 0.05rem !important;
 | 
				
			||||||
 | 
					  padding-top: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Fix double border issue - ensure only one border appears below search */
 | 
				
			||||||
 | 
					.vm-list-container > div:first-child,
 | 
				
			||||||
 | 
					.vm-overview > div:first-child,
 | 
				
			||||||
 | 
					div[class*="vm-"] > div:first-child {
 | 
				
			||||||
 | 
					  border-bottom: 1px solid rgba(0, 0, 0, 0.125) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove ALL borders from VM list items - extremely aggressive */
 | 
				
			||||||
 | 
					.vm-list-container .vm-list-item,
 | 
				
			||||||
 | 
					.vm-list-container .vm-item,
 | 
				
			||||||
 | 
					.vm-list-container li,
 | 
				
			||||||
 | 
					.vm-list-container tr,
 | 
				
			||||||
 | 
					.vm-list-container div[class*="vm-"],
 | 
				
			||||||
 | 
					.vm-list > div,
 | 
				
			||||||
 | 
					.vm-list > li,
 | 
				
			||||||
 | 
					.vm-list > tr,
 | 
				
			||||||
 | 
					.vm-list-item,
 | 
				
			||||||
 | 
					.vm-item,
 | 
				
			||||||
 | 
					div[class*="vm-list"] > div,
 | 
				
			||||||
 | 
					div[class*="vm-list"] div {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					  border-top: none !important;
 | 
				
			||||||
 | 
					  border-left: none !important;
 | 
				
			||||||
 | 
					  border-right: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Ensure VM list container itself doesn't have a border */
 | 
				
			||||||
 | 
					.vm-list-container {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the actual VM list to remove borders */
 | 
				
			||||||
 | 
					.vm-list {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Override any hr elements that might be creating lines */
 | 
				
			||||||
 | 
					.vm-list-container hr,
 | 
				
			||||||
 | 
					.vm-list hr,
 | 
				
			||||||
 | 
					.vm-item + hr,
 | 
				
			||||||
 | 
					.vm-list-item + hr {
 | 
				
			||||||
 | 
					  display: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Single border under search bar */
 | 
				
			||||||
 | 
					.vm-controls-container {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  background: transparent !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target VM list items specifically */
 | 
				
			||||||
 | 
					.vm-list-container .vm-list-item {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  background: transparent !important;
 | 
				
			||||||
 | 
					  padding-top: 0.25rem !important;
 | 
				
			||||||
 | 
					  padding-bottom: 0.25rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the VM item content to reduce spacing */
 | 
				
			||||||
 | 
					.vm-item-content,
 | 
				
			||||||
 | 
					.vm-list-item > div,
 | 
				
			||||||
 | 
					button.vm-list-item {
 | 
				
			||||||
 | 
					  padding-top: 0.25rem !important;
 | 
				
			||||||
 | 
					  padding-bottom: 0.25rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Also target any nested content */
 | 
				
			||||||
 | 
					.vm-name,
 | 
				
			||||||
 | 
					.vm-status {
 | 
				
			||||||
 | 
					  padding-top: 0.25rem !important;
 | 
				
			||||||
 | 
					  padding-bottom: 0.25rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove any dividers between VM items */
 | 
				
			||||||
 | 
					.vm-list-container .divider,
 | 
				
			||||||
 | 
					.vm-list-container hr,
 | 
				
			||||||
 | 
					.vm-list-item::after,
 | 
				
			||||||
 | 
					.vm-list-item::before {
 | 
				
			||||||
 | 
					  display: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Adjust spacing between title and search */
 | 
				
			||||||
 | 
					.page-title + .vm-controls-container {
 | 
				
			||||||
 | 
					  margin-top: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Let's also clean up any duplicate rules */
 | 
				
			||||||
 | 
					.controls-row {
 | 
				
			||||||
 | 
					  border-bottom: 1px solid rgba(0, 0, 0, 0.125) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove border from vm-name elements */
 | 
				
			||||||
 | 
					.vm-name {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target both instances of the border */
 | 
				
			||||||
 | 
					div[class*="vm-"] > div:first-child div[class*="vm-"] > div:first-child,
 | 
				
			||||||
 | 
					.vm-list-container > div:first-child div[class*="vm-"] > div:first-child {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Super specific targeting for the border issue */
 | 
				
			||||||
 | 
					div[class*="vm-"] > div:first-child H {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  border-bottom: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Keep node tabs close to title but adjust content below tabs */
 | 
				
			||||||
 | 
					.node-overview .node-tabs-wrapper {
 | 
				
			||||||
 | 
					  margin-top: 0.25rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Adjust spacing below tabs to match overview spacing */
 | 
				
			||||||
 | 
					.node-overview .node-tabs-wrapper + * {
 | 
				
			||||||
 | 
					  margin-top: 0.375rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Ensure consistent spacing in overview page */
 | 
				
			||||||
 | 
					.overview-container > *:first-child {
 | 
				
			||||||
 | 
					  margin-top: 0.375rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Override spacing specifically for node tabs - keep tight to title */
 | 
				
			||||||
 | 
					.node-overview .content-grid > *:first-child + * {
 | 
				
			||||||
 | 
					  margin-top: 0.25rem !important;  /* Keep tabs close to title */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Adjust spacing between tabs and content below */
 | 
				
			||||||
 | 
					.node-overview .node-tabs-wrapper {
 | 
				
			||||||
 | 
					  margin-bottom: 0.375rem !important;  /* Match overview spacing */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove any extra spacing that might be added by other elements */
 | 
				
			||||||
 | 
					.node-overview .node-details {
 | 
				
			||||||
 | 
					  margin-top: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -115,6 +115,7 @@
 | 
				
			|||||||
                title="Node Health"
 | 
					                title="Node Health"
 | 
				
			||||||
                :value="selectedNodeData.health || 0"
 | 
					                :value="selectedNodeData.health || 0"
 | 
				
			||||||
                :chart-data="nodeHealthChartData"
 | 
					                :chart-data="nodeHealthChartData"
 | 
				
			||||||
 | 
					                :maintenance="isMaintenanceMode"
 | 
				
			||||||
              />
 | 
					              />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              <!-- CPU Utilization Chart -->
 | 
					              <!-- CPU Utilization Chart -->
 | 
				
			||||||
@@ -452,7 +453,12 @@ const formatMemory = (memoryMB) => {
 | 
				
			|||||||
  return Math.round(memoryMB / 1024) + ' GB';
 | 
					  return Math.round(memoryMB / 1024) + ' GB';
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Prepare chart data for the node
 | 
					// Check if the cluster is in maintenance mode
 | 
				
			||||||
 | 
					const isMaintenanceMode = computed(() => {
 | 
				
			||||||
 | 
					  return props.clusterData.maintenance === "true";
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Update the nodeHealthChartData computed property to include maintenance data
 | 
				
			||||||
const nodeHealthChartData = computed(() => {
 | 
					const nodeHealthChartData = computed(() => {
 | 
				
			||||||
  // Get node metrics history if available
 | 
					  // Get node metrics history if available
 | 
				
			||||||
  const nodeMetrics = props.metricsData.nodes?.[selectedNodeData.value?.name];
 | 
					  const nodeMetrics = props.metricsData.nodes?.[selectedNodeData.value?.name];
 | 
				
			||||||
@@ -460,14 +466,16 @@ const nodeHealthChartData = computed(() => {
 | 
				
			|||||||
  if (nodeMetrics && nodeMetrics.health && nodeMetrics.health.data.length > 0) {
 | 
					  if (nodeMetrics && nodeMetrics.health && nodeMetrics.health.data.length > 0) {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      labels: nodeMetrics.health.labels,
 | 
					      labels: nodeMetrics.health.labels,
 | 
				
			||||||
      data: nodeMetrics.health.data
 | 
					      data: nodeMetrics.health.data,
 | 
				
			||||||
 | 
					      maintenance: nodeMetrics.health.maintenance || []
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Fallback to current value only
 | 
					  // Fallback to current value only
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    labels: ['Health'],
 | 
					    labels: ['Health'],
 | 
				
			||||||
    data: [selectedNodeData.value?.health || 0]
 | 
					    data: [selectedNodeData.value?.health || 0],
 | 
				
			||||||
 | 
					    maintenance: [isMaintenanceMode.value]
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1040,4 +1048,40 @@ onUnmounted(() => {
 | 
				
			|||||||
.section-container.collapsed .section-content-wrapper {
 | 
					.section-container.collapsed .section-content-wrapper {
 | 
				
			||||||
  margin-bottom: 0;
 | 
					  margin-bottom: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the specific element causing the padding */
 | 
				
			||||||
 | 
					ul.nav.nav-tabs {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target Bootstrap's default tab styling */
 | 
				
			||||||
 | 
					.nav-tabs {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target any list items in the tabs */
 | 
				
			||||||
 | 
					.nav-tabs > li {
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the tab container */
 | 
				
			||||||
 | 
					.tab-container {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target the content grid in nodes view */
 | 
				
			||||||
 | 
					.nodes-view .content-grid {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Target all direct children of content-grid in nodes view */
 | 
				
			||||||
 | 
					.nodes-view .content-grid > * {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  margin-left: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
</style> 
 | 
					</style> 
 | 
				
			||||||
@@ -3,6 +3,9 @@ import { createPinia } from 'pinia';
 | 
				
			|||||||
import App from './App.vue';
 | 
					import App from './App.vue';
 | 
				
			||||||
import router from './router';
 | 
					import router from './router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Add global styles
 | 
				
			||||||
 | 
					import './assets/styles.css';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Create the app
 | 
					// Create the app
 | 
				
			||||||
const app = createApp(App);
 | 
					const app = createApp(App);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user