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());
        }
Esempio n. 2
0
 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);
        }
Esempio n. 5
0
        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());
        }
Esempio n. 6
0
        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();
        }
Esempio n. 10
0
        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);
        }
Esempio n. 13
0
        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);
        }