Esempio n. 1
0
        /// <summary>
        /// Creates a cluster
        /// </summary>
        /// <param name="cluster">the cluster definition to insert into the database</param>
        /// <param name="OwnedBy">the ogranisation that has creted this cluster/the owner of the cluster</param>
        /// <returns>The created cluster</returns>
        public static Cluster Create(Monosoft.Auth.DTO.Cluster cluster, Guid OwnedBy)
        {
            // TODO: revisionslog, hvem har opdateret (fra hvad, til hvad og hvornår)
            Cluster dbcluster = new Cluster();

            dbcluster.Name = cluster.Name;
            dbcluster.OwnedByOrganisationId = OwnedBy;
            dbcluster.Endpoints             = cluster.Endpoints.Select(p => p.IP).ToArray();
            DataContext.Instance.Clusters.Add(dbcluster);

            if (cluster.Servers != null)
            {
                foreach (var server in cluster.Servers)
                {
                    Server dbserver = new Server();
                    dbserver.Cluster = dbcluster;
                    dbserver.IP      = server.IP;
                    dbserver.Name    = server.Name;
                    DataContext.Instance.Servers.Add(dbserver);

                    if (server.Services != null)
                    {
                        foreach (var service in server.Services)
                        {
                            MicroService dbservice = new MicroService();
                            dbservice.Name    = service.Name;
                            dbservice.Version = service.Version;
                            dbservice.Server  = dbserver;
                            DataContext.Instance.MicroServices.Add(dbservice);
                        }
                    }
                }
            }

            DataContext.Instance.SaveChanges();
            return(dbcluster);
        }
Esempio n. 2
0
        /// <summary>
        /// Update a cluster
        /// </summary>
        /// <param name="cluster">the cluster definition to updated in the database</param>
        /// <param name="callingOrganisation">the calling organisation - which must be the owner to update</param>
        /// <returns>The updated cluster</returns>
        public static Cluster Update(Monosoft.Auth.DTO.Cluster cluster, Guid callingOrganisation)
        {
            // TODO: revisionslog, hvem har opdateret (fra hvad, til hvad og hvornår)
            var dbcluster = DataContext.Instance.Clusters.Where(p => p.ClusterId == cluster.ClusterId && p.OwnedByOrganisationId == callingOrganisation).FirstOrDefault();

            if (dbcluster != null)
            {
                dbcluster.Name      = cluster.Name;
                dbcluster.Endpoints = cluster.Endpoints.Select(p => p.IP).ToArray();

                var removedServers = dbcluster.Servers.Where(p => cluster.Servers.Select(x => x.Id).Contains(p.Id) == false).ToList();
                var updatedServers = dbcluster.Servers.Where(p => cluster.Servers.Select(x => x.Id).Contains(p.Id) == true).ToList();
                var addedServers   = cluster.Servers.Where(x => dbcluster.Servers.Select(p => p.Id).Contains(x.Id) == false).ToList();

                foreach (var removedserver in removedServers)
                {
                    dbcluster.Servers.Remove(removedserver);
                }

                foreach (var updatedserver in updatedServers)
                {
                    var server = cluster.Servers.Where(p => p.Id == updatedserver.Id).FirstOrDefault();
                    updatedserver.IP   = server.IP;
                    updatedserver.Name = server.Name;
                    updatedserver.MicroServices.Clear();
                    if (server.Services != null)
                    {
                        foreach (var service in server.Services)
                        {
                            MicroService dbservice = new MicroService();
                            dbservice.Name    = service.Name;
                            dbservice.Version = service.Version;
                            updatedserver.MicroServices.Add(dbservice);
                        }
                    }
                }

                foreach (var addedserver in addedServers)
                {
                    Server dbserver = new Server();
                    dbcluster.Servers.Add(dbserver);
                    dbserver.IP   = addedserver.IP;
                    dbserver.Name = addedserver.Name;
                    dbserver.MicroServices.Clear();
                    if (addedserver.Services != null)
                    {
                        foreach (var service in addedserver.Services)
                        {
                            MicroService dbservice = new MicroService();
                            dbservice.Name    = service.Name;
                            dbservice.Version = service.Version;
                            dbserver.MicroServices.Add(dbservice);
                        }
                    }
                }

                DataContext.Instance.SaveChanges();
            }

            return(dbcluster);
        }