public void WhenAllInstancesAreFromFleet_ThenSetsContainRightNodes() { var instances = new[] { new InstanceHistory( 1, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, null, new [] { new InstancePlacement( new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc)) }) }; var fleetOnly = NodeSetHistory.FromInstancyHistory(instances, Tenancies.Fleet); var soleTenantOnly = NodeSetHistory.FromInstancyHistory(instances, Tenancies.SoleTenant); var all = NodeSetHistory.FromInstancyHistory(instances, Tenancies.Fleet | Tenancies.SoleTenant); var none = NodeSetHistory.FromInstancyHistory(instances, Tenancies.Unknown); Assert.AreEqual(1, fleetOnly.Nodes.Count()); Assert.AreEqual(1, all.Nodes.Count()); Assert.IsFalse(soleTenantOnly.Nodes.Any()); Assert.IsFalse(none.Nodes.Any()); }
internal NodeSetHistory GetNodes() { // Derive the set of nodes that were used by those instances. return(NodeSetHistory.FromInstancyHistory( GetInstancesMatchingCurrentFilters(), this.tenancies)); }
internal override void Repopulate() { // Get nodes with Windows/BYOL placements. var nodeSet = NodeSetHistory.FromInstancyHistory( this.parent.Model.GetInstances(OperatingSystemTypes.Windows, LicenseTypes.Byol), Tenancies.SoleTenant); // Create histogram, disregarding the date selection. this.Histogram = nodeSet.MaxPhysicalCoresByDay( nodeType => NodeAnnotation.FromNodeType(nodeType).PhysicalCores); }
public void WhenInstanceHasOverlappingPlacements_ThenPlacementReturnsInstances() { var instances = new[] { new InstanceHistory( 1, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, new ImageLocator("project-1", "image-1"), new [] { new InstancePlacement( "server-1", null, new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc)) }), new InstanceHistory( 2, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, new ImageLocator("project-1", "image-1"), new [] { new InstancePlacement( "server-1", null, new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 3, 0, 0, 0, DateTimeKind.Utc)) }) }; var nodes = NodeSetHistory.FromInstancyHistory(instances, Tenancies.SoleTenant); Assert.AreEqual(1, nodes.Nodes.Count()); var server1 = nodes.Nodes.First(n => n.ServerId == "server-1"); Assert.AreEqual(2, server1.Placements.Count()); var placement1 = server1.Placements.First(p => p.Instance.InstanceId == 1); Assert.AreEqual(new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), placement1.From); Assert.AreEqual(new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc), placement1.To); var placement2 = server1.Placements.First(p => p.Instance.InstanceId == 2); Assert.AreEqual(new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc), placement2.From); Assert.AreEqual(new DateTime(2019, 12, 3, 0, 0, 0, DateTimeKind.Utc), placement2.To); }
public void WhenInstanceHasNoPlacement_ThenSetIsEmpty() { var instances = new[] { new InstanceHistory( 1, new VmInstanceReference("project-1", "zone-1", "instance-1"), InstanceHistoryState.Complete, new GlobalResourceReference("project-1", "images", "image-1"), null) }; var nodes = NodeSetHistory.FromInstancyHistory(instances, false); Assert.IsFalse(nodes.Nodes.Any()); }
internal override void Repopulate() { // Get nodes with Windows/BYOL placements. var nodeSet = NodeSetHistory.FromInstancyHistory( this.parent.Model.GetInstances(OperatingSystemTypes.Windows, LicenseTypes.Byol), Tenancies.SoleTenant); // Create histogram, disregarding the date selection. this.Histogram = nodeSet.MaxNodesByDay .Select(dp => new DataPoint() { Timestamp = dp.Timestamp, // XXX: This is only accurate as long as all nodes use the // same node type. Value = dp.Value * NodeAnnotation.Default.PhysicalCores }); }
public void WhenInstanceHasSubsequentPlacements_ThenFirstAndLastUseAreExtremes() { var instances = new[] { new InstanceHistory( 1, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, new ImageLocator("project-1", "image-1"), new [] { new InstancePlacement( "server-1", null, new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc)), new InstancePlacement( "server-1", null, new DateTime(2019, 12, 13, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 14, 0, 0, 0, DateTimeKind.Utc)), new InstancePlacement( "server-2", null, new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 5, 0, 0, 0, DateTimeKind.Utc)), }) }; var nodes = NodeSetHistory.FromInstancyHistory(instances, Tenancies.SoleTenant); Assert.AreEqual(2, nodes.Nodes.Count()); var server1 = nodes.Nodes.First(n => n.ServerId == "server-1"); Assert.AreEqual(new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), server1.FirstUse); Assert.AreEqual(new DateTime(2019, 12, 14, 0, 0, 0, DateTimeKind.Utc), server1.LastUse); var server2 = nodes.Nodes.First(n => n.ServerId == "server-2"); Assert.AreEqual(new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc), server2.FirstUse); Assert.AreEqual(new DateTime(2019, 12, 5, 0, 0, 0, DateTimeKind.Utc), server2.LastUse); }
public void WhenInstanceHasOverlappingPlacements_ThenPeakConcurrentPlacementsIsTwo() { var instances = new[] { new InstanceHistory( 1, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, new ImageLocator("project-1", "image-1"), new [] { new InstancePlacement( "server-1", null, new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc)) }), new InstanceHistory( 2, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, new ImageLocator("project-1", "image-1"), new [] { new InstancePlacement( "server-1", null, new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 3, 0, 0, 0, DateTimeKind.Utc)) }) }; var nodes = NodeSetHistory.FromInstancyHistory(instances, Tenancies.SoleTenant); Assert.AreEqual(1, nodes.Nodes.Count()); var server1 = nodes.Nodes.First(n => n.ServerId == "server-1"); Assert.AreEqual(2, server1.PeakConcurrentPlacements); Assert.AreEqual(new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), server1.FirstUse); Assert.AreEqual(new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc), server1.LastUse); }
internal override void Repopulate() { // Get instances, filtered by whatever filter applies, // then derive sole tenant nodes (ignoring fleet). this.currentNodeSet = NodeSetHistory.FromInstancyHistory( this.parent.GetInstancesMatchingCurrentFilters(), Tenancies.SoleTenant); // Create histogram, disregarding the date selection. this.Histogram = this.currentNodeSet.MaxNodesByDay; Debug.Assert(this.currentNodeSet.Nodes.All(n => n.ServerId != null)); // For the list of nodes, apply the date selection. this.Nodes.Clear(); this.Nodes.AddRange(this.currentNodeSet.Nodes .Where(n => n.FirstUse <= this.Selection.EndDate && n.LastUse >= this.Selection.StartDate)); this.selectedNode = null; RepopulateNodePlacements(); }
public void WhenInstancesAreFromFleet_ThenSetIsEmpty() { var instances = new[] { new InstanceHistory( 1, new VmInstanceReference("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, null, new [] { new InstancePlacement( new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc)) }) }; var nodes = NodeSetHistory.FromInstancyHistory(instances, false); Assert.IsFalse(nodes.Nodes.Any()); }
public void WhenInstanceHasNoPlacement_ThenSetIsEmpty() { var instances = new[] { new InstanceHistory( 1, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.Complete, new ImageLocator("project-1", "image-1"), null) }; var fleetOnly = NodeSetHistory.FromInstancyHistory(instances, Tenancies.Fleet); var soleTenantOnly = NodeSetHistory.FromInstancyHistory(instances, Tenancies.SoleTenant); var all = NodeSetHistory.FromInstancyHistory(instances, Tenancies.Fleet | Tenancies.SoleTenant); var none = NodeSetHistory.FromInstancyHistory(instances, Tenancies.Unknown); Assert.IsFalse(fleetOnly.Nodes.Any()); Assert.IsFalse(soleTenantOnly.Nodes.Any()); Assert.IsFalse(all.Nodes.Any()); Assert.IsFalse(none.Nodes.Any()); }
public void WhenInstancesAreFromFleetAndIncludeFleetIsTrue_ThenSetIncludesNodeForFleet() { var instances = new[] { new InstanceHistory( 1, new InstanceLocator("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, null, new [] { new InstancePlacement( new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc)) }) }; var nodes = NodeSetHistory.FromInstancyHistory(instances, Tenancies.Fleet); Assert.IsTrue(nodes.Nodes.Any()); Assert.IsNull(nodes.Nodes.First().ServerId); }
public void WhenInstanceHasNonOverlappingPlacements_ThenPeakConcurrentPlacementsIsOne() { var instances = new[] { new InstanceHistory( 1, new VmInstanceReference("project-1", "zone-1", "instance-1"), InstanceHistoryState.MissingTenancy, new GlobalResourceReference("project-1", "images", "image-1"), new [] { new InstancePlacement( "server-1", new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 2, 0, 0, 0, DateTimeKind.Utc)), new InstancePlacement( "server-1", new DateTime(2019, 12, 3, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc)), new InstancePlacement( "server-2", new DateTime(2019, 12, 4, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 5, 0, 0, 0, DateTimeKind.Utc)), }) }; var nodes = NodeSetHistory.FromInstancyHistory(instances, false); Assert.AreEqual(2, nodes.Nodes.Count()); var server1 = nodes.Nodes.First(n => n.ServerId == "server-1"); Assert.AreEqual(1, server1.PeakConcurrentPlacements); var server2 = nodes.Nodes.First(n => n.ServerId == "server-2"); Assert.AreEqual(1, server2.PeakConcurrentPlacements); }