public ClusterEditViewModel GetNew(ApiCall call) { var user = call.Context.User; if (user == null) { return(null); } ClusterEditViewModel viewmodel = new ClusterEditViewModel(); Dictionary <string, string> para = new Dictionary <string, string>(); para.Add("SiteId", call.GetValue("SiteId")); para.Add("OrganizationId", user.CurrentOrgId.ToString()); var datacenterlist = Lib.Helper.HttpHelper.Get <List <DataCenter> >(Kooboo.Data.Account.Url.Cluster.GetDataCenter, para, user.UserName, user.PasswordHash.ToString()); viewmodel.DataCenter = datacenterlist; viewmodel.EnableCluster = datacenterlist.Where(o => o.IsSelected).Count() >= 2; viewmodel.EnableLocationRedirect = datacenterlist.Where(o => !string.IsNullOrWhiteSpace(o.PrimaryDomain)).Any(); if (viewmodel.EnableLocationRedirect) { foreach (var item in datacenterlist.Where(o => !string.IsNullOrWhiteSpace(o.PrimaryDomain))) { var domainresult = Kooboo.Data.Helper.DomainHelper.Parse(item.PrimaryDomain); if (domainresult != null) { viewmodel.LocationRedirect.Add(new ClusterLocationRedirect() { Name = item.Name, SubDomain = domainresult.SubDomain, RootDomain = domainresult.Domain }); } } } return(viewmodel); }
public ClusterEditViewModel Get(ApiCall call) { var sitedb = call.Context.WebSite.SiteDb(); ClusterEditViewModel viewmodel = new ClusterEditViewModel() { EnableCluster = call.WebSite.EnableCluster }; bool IsSlave = false; //if (!Kooboo.Data.AppSettings.Global.IsOnlineServer) //{ foreach (var item in sitedb.SiteCluster.All()) { if (item.IsRoot) { IsSlave = true; } DataCenter dc = new DataCenter(); dc.Name = item.DataCenter; dc.DisplayName = item.Name; dc.Ip = item.ServerIp; dc.Port = item.Port; dc.IsSelected = item.IsSelected; viewmodel.DataCenter.Add(dc); } if (!viewmodel.DataCenter.Any(o => o.IsRoot)) { DataCenter dc = new DataCenter(); dc.Name = Data.Language.Hardcoded.GetValue("Root", call.Context); dc.DisplayName = Data.Language.Hardcoded.GetValue("Root", call.Context); dc.Ip = "127.0.0.1"; dc.Port = Data.AppSettings.CurrentUsedPort; dc.IsSelected = true; dc.IsRoot = true; viewmodel.DataCenter.Add(dc); } viewmodel.IsSlave = IsSlave; return(viewmodel); //} //else //{ // // online server must have the setting from online database, in order to load balancing.. // var site = call.Context.WebSite; // var user = call.Context.User; // if (user == null) // { // return null; // } // viewmodel.DataCenter.Add(new DataCenter() { Name = "CN", DisplayName = "China", IsCompleted = true, IsSelected = true, IsRoot = true }); // viewmodel.DataCenter.Add(new DataCenter() { Name = "HK", DisplayName = "HongKong", IsCompleted = false, IsSelected = false }); // viewmodel.DataCenter.Add(new DataCenter() { Name = "US", DisplayName = "America", IsCompleted = false, IsSelected = false }); // viewmodel.LocationRedirect.Add(new ClusterLocationRedirect() { Name = "CN", SubDomain = "xub", RootDomain = "kooboo.cn" }); // return viewmodel; //} }
public void Post(ClusterEditViewModel model, ApiCall call) { ValidatePort(call); var sitedb = call.Context.WebSite.SiteDb(); Data.GlobalDb.WebSites.UpdateBoolColumn(call.Context.WebSite.Id, o => o.EnableCluster, model.EnableCluster); if (Data.AppSettings.Global.IsOnlineServer) { // check and update the SiteInfo of EnableCluster. var siteid = call.GetValue <Guid>("SiteId"); var user = call.Context.User; if (user == null) { throw new Exception(Data.Language.Hardcoded.GetValue("user required", call.Context)); } // Set the website doamins and send to Account for update... // Get a list of ServerId back for sync purpose... string url = Kooboo.Data.Account.Url.Cluster.SaveSetting + "?SiteId=" + siteid.ToString() + "&OrganizatioinId=" + user.CurrentOrgId.ToString(); var result = Lib.Helper.HttpHelper.Post <List <SiteClusterViewModel> >(url, Lib.Helper.JsonHelper.Serialize(model)); if (result != null) { } /// var errro; } else { // local server, no need for location redirect. // local server does not support location redirect.. List <SiteCluster> updates = new List <SiteCluster>(); foreach (var item in model.DataCenter) { if (!item.IsRoot) { // can not contains itself... SiteCluster cluster = new SiteCluster(); cluster.ServerIp = item.Ip; cluster.Port = item.Port; cluster.Name = item.DisplayName; cluster.DataCenter = item.Name; cluster.IsRoot = item.IsRoot; cluster.IsSelected = item.IsSelected; updates.Add(cluster); } } // do the delection. HashSet <Guid> deleteIds = new HashSet <Guid>(); foreach (var item in sitedb.SiteCluster.All()) { var find = updates.Find(o => o.Id == item.Id); if (find == null) { deleteIds.Add(item.Id); } } foreach (var item in deleteIds) { sitedb.SiteCluster.Delete(item); } foreach (var item in updates) { sitedb.SiteCluster.AddOrUpdate(item); } } }