/// <summary> /// 初始化(修改) /// </summary> /// <param name="ConnectionName"></param> public frmAddConnection(String ConnectionName) { InitializeComponent(); OldConnectionName = ConnectionName; //Modify Mode ModifyConn = SystemManager.ConfigHelperInstance.ConnectionList[ConnectionName]; OnLoad(); txtConnectionName.Text = ModifyConn.ConnectionName; txtHost.Text = ModifyConn.Host; numPort.Text = ModifyConn.Port.ToString(CultureInfo.InvariantCulture); txtUsername.Text = ModifyConn.UserName; txtPassword.Text = ModifyConn.Password; txtDataBaseName.Text = ModifyConn.DataBaseName; chkFsync.Checked = ModifyConn.fsync; chkJournal.Checked = ModifyConn.journal; NumSocketTimeOut.Value = (decimal) ModifyConn.socketTimeoutMS; NumConnectTimeOut.Value = (decimal) ModifyConn.connectTimeoutMS; txtReplsetName.Text = ModifyConn.ReplSetName; txtConnectionString.Text = ModifyConn.ConnectionString; foreach (string item in ModifyConn.ReplsetList) { lstHost.Items.Add(item); } cmdAdd.Text = SystemManager.IsUseDefaultLanguage ? "Modify" : SystemManager.MStringResource.GetText(StringResource.TextType.Common_Modify); }
/// <summary> /// 根据服务器名称获取配置 /// </summary> /// <param name="mongoSvrKey"></param> /// <returns></returns> public static ConfigHelper.MongoConnectionConfig GetCurrentServerConfig(String mongoSvrKey) { ConfigHelper.MongoConnectionConfig rtnMongoConnectionConfig = new ConfigHelper.MongoConnectionConfig(); if (ConfigHelperInstance.ConnectionList.ContainsKey(mongoSvrKey)) { rtnMongoConnectionConfig = ConfigHelperInstance.ConnectionList[mongoSvrKey]; } return(rtnMongoConnectionConfig); }
/// <summary> /// 通过服务器名称获得服务器配置 /// </summary> /// <param name="SrvName"></param> /// <returns></returns> public static ConfigHelper.MongoConnectionConfig GetSelectedSvrProByName() { string svrName = SelectObjectTag.Split(":".ToCharArray())[1]; svrName = svrName.Split("/".ToCharArray())[0]; ConfigHelper.MongoConnectionConfig rtnMongoConnectionConfig = new ConfigHelper.MongoConnectionConfig(); if (ConfigHelperInstance.ConnectionList.ContainsKey(svrName)) { rtnMongoConnectionConfig = ConfigHelperInstance.ConnectionList[svrName]; } return rtnMongoConnectionConfig; }
/// <summary> /// 获得当前服务器配置 /// </summary> /// <param name="SrvName"></param> /// <returns></returns> public static ConfigHelper.MongoConnectionConfig GetCurrentServerConfig() { String ServerName = SelectObjectTag.Split(":".ToCharArray())[1]; ServerName = ServerName.Split("/".ToCharArray())[(int)MongoDBHelper.PathLv.ConnectionLV]; ConfigHelper.MongoConnectionConfig rtnMongoConnectionConfig = new ConfigHelper.MongoConnectionConfig(); if (ConfigHelperInstance.ConnectionList.ContainsKey(ServerName)) { rtnMongoConnectionConfig = ConfigHelperInstance.ConnectionList[ServerName]; } return(rtnMongoConnectionConfig); }
/// <summary> /// Set ReadPreference And WriteConcern /// </summary> /// <param name="mongoSvrSetting"></param> /// <param name="config"></param> private static void SetReadPreferenceWriteConcern(MongoClientSettings mongoSvrSetting, ConfigHelper.MongoConnectionConfig config) { if (config.ReadPreference == ReadPreference.Primary.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.Primary; } if (config.ReadPreference == ReadPreference.PrimaryPreferred.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.PrimaryPreferred; } if (config.ReadPreference == ReadPreference.Secondary.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.Secondary; } if (config.ReadPreference == ReadPreference.SecondaryPreferred.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.SecondaryPreferred; } if (config.ReadPreference == ReadPreference.Nearest.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.Nearest; } //Default ReadPreference is Primary //安全模式 if (config.WriteConcern == WriteConcern.Unacknowledged.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.Unacknowledged; } if (config.WriteConcern == WriteConcern.Acknowledged.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.Acknowledged; } if (config.WriteConcern == WriteConcern.W2.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.W2; } if (config.WriteConcern == WriteConcern.W3.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.W3; } if (config.WriteConcern == WriteConcern.W4.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.W4; } if (config.WriteConcern == WriteConcern.WMajority.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.WMajority; } //Default WriteConcern is w=0 }
public frmAddConnection(String ConnectionName) { InitializeComponent(); //Modify Mode ModifyConn = SystemManager.ConfigHelperInstance.ConnectionList[ConnectionName]; foreach (ConfigHelper.MongoConnectionConfig item in SystemManager.ConfigHelperInstance.ConnectionList.Values) { if (item.MainReplSetName == ModifyConn.ReplSetName) { lstServerce.Items.Add(item.ConnectionName); if (ModifyConn.ServerType == ConfigHelper.SvrType.ReplsetSvr && ModifyConn.ReplsetList.Contains(item.ConnectionName)) { lstServerce.SetSelected(lstServerce.Items.Count - 1, true); } } } cmdCancel.Click += new EventHandler((x, y) => { this.Close(); }); txtHostName.Text = ModifyConn.ConnectionName; txtHostName.Enabled = false; txtIpAddr.Text = ModifyConn.IpAddr; txtMainReplsetName.Text = ModifyConn.MainReplSetName; txtPort.Text = ModifyConn.Port.ToString(); txtUsername.Text = ModifyConn.UserName; txtPassword.Text = ModifyConn.Password; cmdAdd.Text = "修改"; chkSlaveOk.Checked = ModifyConn.IsSlaveOk; chkSafeMode.Checked = ModifyConn.IsSafeMode; txtReplSet.Text = ModifyConn.ReplSetName; txtDataBaseName.Text = ModifyConn.DataBaseName; numPriority.Value = ModifyConn.Priority; switch (ModifyConn.ServerType) { case ConfigHelper.SvrType.ConfigSvr: radConfigSrv.Checked = true; break; case ConfigHelper.SvrType.RouteSvr: radRouteSrv.Checked = true; break; case ConfigHelper.SvrType.ArbiterSvr: radArbiters.Checked = true; break; case ConfigHelper.SvrType.DataSvr: default: radDataSrv.Checked = true; break; } }
/// <summary> /// 初始化(修改) /// </summary> /// <param name="ConnectionName"></param> public frmAddConnection(String ConnectionName) { InitializeComponent(); OldConnectionName = ConnectionName; //Modify Mode ModifyConn = SystemManager.ConfigHelperInstance.ConnectionList[ConnectionName]; OnLoad(); txtConnectionName.Text = ModifyConn.ConnectionName; txtHost.Text = ModifyConn.Host; numPort.Text = ModifyConn.Port.ToString(); txtUsername.Text = ModifyConn.UserName; txtPassword.Text = ModifyConn.Password; txtDataBaseName.Text = ModifyConn.DataBaseName; if (ModifyConn.ReadPreference != string.Empty) { cmbReadPreference.Text = ModifyConn.ReadPreference; } if (ModifyConn.WriteConcern != string.Empty) { cmbWriteConcern.Text = ModifyConn.WriteConcern; } chkFsync.Checked = ModifyConn.fsync; chkJournal.Checked = ModifyConn.journal; NumWTimeoutMS.Value = (decimal)ModifyConn.wtimeoutMS; NumSocketTimeOut.Value = (decimal)ModifyConn.socketTimeoutMS; NumConnectTimeOut.Value = (decimal)ModifyConn.connectTimeoutMS; NumWaitQueueSize.Value = ModifyConn.WaitQueueSize; txtReplsetName.Text = ModifyConn.ReplSetName; txtConnectionString.Text = ModifyConn.ConnectionString; foreach (string item in ModifyConn.ReplsetList) { lstHost.Items.Add(item); } if (SystemManager.IsUseDefaultLanguage) { cmdAdd.Text = "Modify"; } else { cmdAdd.Text = SystemManager.mStringResource.GetText(StringResource.TextType.Common_Modify); } }
/// <summary> /// 使用字符串连接来填充 /// </summary> /// <remarks>http://www.mongodb.org/display/DOCS/Connections</remarks> /// <param name="config"></param> public static String FillConfigWithConnectionString(ref ConfigHelper.MongoConnectionConfig config) { String connectionString = config.ConnectionString; //mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] try { MongoUrl mongourl = MongoUrl.Create(connectionString); config.DataBaseName = mongourl.DatabaseName; if (mongourl.Username != null) { config.UserName = mongourl.Username; config.Password = mongourl.Password; //config.LoginAsAdmin = mongourl.Admin; } config.Host = mongourl.Server.Host; config.Port = mongourl.Server.Port; config.ReadPreference = mongourl.ReadPreference.ToString(); config.WriteConcern = mongourl.GetWriteConcern(true).ToString(); config.WaitQueueSize = mongourl.WaitQueueSize; config.wtimeoutMS = (int)mongourl.WaitQueueTimeout.TotalMilliseconds; config.IsUseDefaultSetting = false; config.socketTimeoutMS = (int)mongourl.SocketTimeout.TotalMilliseconds; config.connectTimeoutMS = (int)mongourl.ConnectTimeout.TotalMilliseconds; config.ReplSetName = mongourl.ReplicaSetName; foreach (MongoServerAddress item in mongourl.Servers) { config.ReplsetList.Add(item.Host + (item.Port == 0 ? String.Empty : ":" + item.Port)); } return(String.Empty); } catch (FormatException ex) { return(ex.ToString()); } catch (Exception ex) { return(ex.ToString()); } }
/// <summary> /// 增加管理服务器 /// </summary> /// <param name="configLst"></param> /// <returns></returns> public static void AddServer(List <ConfigHelper.MongoConnectionConfig> configLst) { for (int i = 0; i < configLst.Count; i++) { ConfigHelper.MongoConnectionConfig config = configLst[i]; try { if (_mongoConnSvrLst.ContainsKey(config.ConnectionName)) { _mongoConnSvrLst.Remove(config.ConnectionName); } _mongoConnSvrLst.Add(config.ConnectionName, CreateMongoSetting(ref config)); ///更新一些运行时的变量 SystemManager.ConfigHelperInstance.ConnectionList[config.ConnectionName] = config; } catch (Exception ex) { MyMessageBox.ShowMessage("Exception", "Can't Connect to Server:" + config.ConnectionName, ex.ToString(), true); } } }
/// <summary> /// 使用字符串连接来填充 /// </summary> /// <remarks>http://www.mongodb.org/display/DOCS/Connections</remarks> /// <param name="connectionString"></param> /// <param name="config"></param> public static String FillConfigWithConnectionString(ref ConfigHelper.MongoConnectionConfig config) { String connectionString = config.ConnectionString; //mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] try { MongoUrl mongourl = MongoUrl.Create(connectionString); config.DataBaseName = mongourl.DatabaseName; if (mongourl.DefaultCredentials != null) { config.UserName = mongourl.DefaultCredentials.Username; config.Password = mongourl.DefaultCredentials.Password; config.LoginAsAdmin = mongourl.DefaultCredentials.Admin; } config.Host = mongourl.Server.Host; config.Port = mongourl.Server.Port; config.IsSlaveOk = mongourl.SlaveOk; config.IsSafeMode = mongourl.SafeMode.Enabled; config.socketTimeoutMS = (int)mongourl.SocketTimeout.TotalMilliseconds; config.connectTimeoutMS = (int)mongourl.ConnectTimeout.TotalMilliseconds; config.wtimeoutMS = (int)mongourl.WaitQueueTimeout.TotalMilliseconds; config.WaitQueueSize = (int)mongourl.WaitQueueSize; config.ReplSetName = mongourl.ReplicaSetName; foreach (var item in mongourl.Servers) { config.ReplsetList.Add(item.Host + (item.Port == 0 ? String.Empty : ":" + item.Port.ToString())); } return(String.Empty); } catch (FormatException ex) { return(ex.ToString()); } catch (Exception ex) { return(ex.ToString()); } }
/// <summary> /// 根据config获得Server,同时更新一些运行时变量 /// </summary> /// <param name="config"></param> /// <returns></returns> public static MongoServer CreateMongoSetting(ref ConfigHelper.MongoConnectionConfig config) { MongoServerSettings mongoSvrSetting = new MongoServerSettings(); if (String.IsNullOrEmpty(config.ConnectionString)) { mongoSvrSetting.ConnectionMode = ConnectionMode.Direct; //当一个服务器作为从属服务器,副本组中的备用服务器,这里一定要设置为SlaveOK,默认情况下是不可以读取的 mongoSvrSetting.SlaveOk = config.IsSlaveOk; //安全模式 mongoSvrSetting.SafeMode = new SafeMode(config.IsSafeMode); //Replset时候可以不用设置吗? mongoSvrSetting.Server = new MongoServerAddress(config.Host, config.Port); //MapReduce的时候将消耗大量时间。不过这里需要平衡一下,太长容易造成并发问题 //From Driver 1.4 Pay attention to this comment //The default value for SocketTimeout has been changed from 30 seconds to 0, //which is a special value meaning to use the operating system default value, //which in turn is infinity. If you actually want a SocketTimeout you now have to set it yourself. //The SocketTimeout is currently a server level setting, but most likely in a future release it will be possible to set it at other levels, //including for individual operations. if (config.socketTimeoutMS != 0) { mongoSvrSetting.SocketTimeout = new TimeSpan(0, 0, (int)(config.socketTimeoutMS / 1000)); } if (config.connectTimeoutMS != 0) { mongoSvrSetting.ConnectTimeout = new TimeSpan(0, 0, (int)(config.connectTimeoutMS / 1000)); } if (config.wtimeoutMS != 0) { mongoSvrSetting.WaitQueueTimeout = new TimeSpan(0, 0, (int)(config.wtimeoutMS / 1000)); } if (config.WaitQueueSize != 0) { mongoSvrSetting.WaitQueueSize = config.WaitQueueSize; } //运行时LoginAsAdmin的设定 config.LoginAsAdmin = (config.DataBaseName == String.Empty); if (!(String.IsNullOrEmpty(config.UserName) || String.IsNullOrEmpty(config.Password))) { //认证的设定:注意,这里的密码是明文 mongoSvrSetting.DefaultCredentials = new MongoCredentials(config.UserName, config.Password, config.LoginAsAdmin); } if (config.ReplSetName != String.Empty) { mongoSvrSetting.ReplicaSetName = config.ReplSetName; config.ServerRole = ConfigHelper.SvrRoleType.ReplsetSvr; } else { config.ServerRole = ConfigHelper.SvrRoleType.DataSvr; } if (config.ServerRole == ConfigHelper.SvrRoleType.ReplsetSvr) { //ReplsetName不是固有属性,可以设置,不过必须保持与配置文件的一致 mongoSvrSetting.ConnectionMode = ConnectionMode.ReplicaSet; //添加Replset服务器,注意,这里可能需要事先初始化副本 List <MongoServerAddress> ReplsetSvrList = new List <MongoServerAddress>(); foreach (String item in config.ReplsetList) { //如果这里的服务器在启动的时候没有--Replset参数,将会出错,当然作为单体的服务器,启动是没有任何问题的 MongoServerAddress ReplSrv; if (item.Split(":".ToCharArray()).Length == 2) { ReplSrv = new MongoServerAddress( item.Split(":".ToCharArray())[0], Convert.ToInt16(item.Split(":".ToCharArray())[1])); } else { ReplSrv = new MongoServerAddress(item); } ReplsetSvrList.Add(ReplSrv); } mongoSvrSetting.Servers = ReplsetSvrList; } } else { //使用MongoConnectionString建立连接 mongoSvrSetting = MongoUrl.Create(config.ConnectionString).ToServerSettings(); } MongoServer masterMongoSvr = new MongoServer(mongoSvrSetting); return(masterMongoSvr); }
/// <summary> /// 获取实例节点 /// </summary> /// <param name="mongoConnKey"></param> /// <param name="config">由于是结构体,必须ref</param> /// <param name="mongoConn"></param> /// <param name="mMasterServerInstace"></param> /// <param name="mServer"></param> /// <param name="UserList"></param> /// <returns></returns> private static TreeNode GetInstanceNode(String mongoConnKey, ref ConfigHelper.MongoConnectionConfig config, MongoServer mongoConn, MongoServerInstance mMasterServerInstace, MongoServer mServer, EachDatabaseUser UserList) { bool isReplsetMasterServer = mMasterServerInstace == null; //无论如何,都改为主要服务器读优先 var svrInstanceNode = new TreeNode(); String connSvrKey; connSvrKey = isReplsetMasterServer ? mongoConnKey + "/" + mongoConnKey : mongoConnKey + "/" + mMasterServerInstace.Address.ToString().Replace(":", "@"); svrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.Text = isReplsetMasterServer ? "Connection" : "Server[" + mMasterServerInstace.Address + "]"; if (!String.IsNullOrEmpty(config.UserName) & (!String.IsNullOrEmpty(config.Password))) { //是否是认证模式,应该取决于服务器! config.AuthMode = true; } //获取ReadOnly config.IsReadOnly = false; List <string> databaseNameList; if (!String.IsNullOrEmpty(config.DataBaseName)) { //单数据库模式 TreeNode mongoSingleDbNode; mongoSingleDbNode = isReplsetMasterServer ? FillDataBaseInfoToTreeNode(config.DataBaseName, mServer, mongoConnKey + "/" + mongoConnKey) : FillDataBaseInfoToTreeNode(config.DataBaseName, mServer, mongoConnKey + "/" + mMasterServerInstace.Address); mongoSingleDbNode.Tag = MongoDbHelper.SINGLE_DATABASE_TAG + ":" + connSvrKey + "/" + config.DataBaseName; mongoSingleDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoSingleDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoSingleDbNode); svrInstanceNode.Tag = MongoDbHelper.SINGLE_DB_SERVER_TAG + ":" + connSvrKey; //获取User信息 if (config.AuthMode) { try { //尝试添加用户信息 UserList.AddUser(mongoConn.GetDatabase(config.DataBaseName), config.UserName); } catch { //可能出现没有权限的问题,这里就认为无法取得权限 } } } else { MongoServer instantSrv; if (isReplsetMasterServer) { instantSrv = mServer; databaseNameList = mServer.GetDatabaseNames().ToList(); } else { MongoClientSettings setting = MongoDbHelper.CreateMongoClientSettingsByConfig(ref config); setting.ConnectionMode = ConnectionMode.Direct; //When Replset Case,Application need to read admin DB information //if Primary,there will be exception setting.ReadPreference = ReadPreference.PrimaryPreferred; setting.Server = mMasterServerInstace.Address; instantSrv = new MongoClient(setting).GetServer(); databaseNameList = instantSrv.GetDatabaseNames().ToList(); } foreach (String strDbName in databaseNameList) { TreeNode mongoDbNode; try { mongoDbNode = FillDataBaseInfoToTreeNode(strDbName, instantSrv, connSvrKey); mongoDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoDbNode); if (config.AuthMode) { try { //尝试添加用户信息 UserList.AddUser(mongoConn.GetDatabase(strDbName), config.UserName); } catch { //可能出现没有权限的问题,这里就认为无法取得权限 } } } catch (Exception ex) { SystemManager.ExceptionDeal(ex, strDbName + "Exception", strDbName + "Exception"); mongoDbNode = new TreeNode(strDbName + " (Exception)") { ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database, SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database }; svrInstanceNode.Nodes.Add(mongoDbNode); } } if (isReplsetMasterServer) { svrInstanceNode.Tag = MongoDbHelper.SERVER_TAG + ":" + mongoConnKey + "/" + mongoConnKey; } else { if (mongoConn.ReplicaSetName != null) { svrInstanceNode.Tag = MongoDbHelper.SERVER_REPLSET_MEMBER_TAG + ":" + mongoConnKey + "/" + mMasterServerInstace.Address.ToString().Replace(":", "@"); } } } if (MongoDbHelper._mongoInstanceLst.ContainsKey(connSvrKey)) { MongoDbHelper._mongoInstanceLst.Remove(connSvrKey); } if (!isReplsetMasterServer) { MongoDbHelper._mongoInstanceLst.Add(connSvrKey, mMasterServerInstace); } return(svrInstanceNode); }
/// <summary> /// ConnectionList TreeView Node is clicked by mouse /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void trvsrvlst_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { String strNodeType = String.Empty; if (this.trvData.SelectedNode != null) { this.trvData.SelectedNode.ContextMenuStrip = null; } if (e.Node.ImageIndex != -1) { statusStripMain.Items[0].Image = GetSystemIcon.MainTreeImage.Images[e.Node.ImageIndex]; } //First , set Every MenuItem to disable DisableAllOpr(); if (e.Node.Tag != null) { //选中节点的设置 this.trvsrvlst.SelectedNode = e.Node; strNodeType = e.Node.Tag.ToString().Split(":".ToCharArray())[0]; if (!(strNodeType == MongoDBHelper.DOCUMENT_TAG && e.Button == System.Windows.Forms.MouseButtons.Right)) { clearDataShower(); } String mongoSvrKey = e.Node.Tag.ToString().Split(":".ToCharArray())[1].Split("/".ToCharArray())[0]; config = SystemManager.ConfigHelperInstance.ConnectionList[mongoSvrKey]; if (String.IsNullOrEmpty(config.UserName)) { lblUserInfo.Text = "UserInfo:Admin"; } else { lblUserInfo.Text = "UserInfo:" + config.UserName; } if (config.AuthMode) { lblUserInfo.Text += " @AuthMode"; } if (config.IsReadOnly) { lblUserInfo.Text += " [ReadOnly]"; } if (!config.IsReadOnly) { //恢复数据:这个操作可以针对服务器,数据库,数据集,所以可以放在共通 this.RestoreMongoToolStripMenuItem.Enabled = true; } switch (strNodeType) { case MongoDBHelper.SERVICE_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected Server:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Server) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } this.DisconnectToolStripMenuItem.Enabled = true; //解禁 创建数据库,关闭服务器 if (!config.IsReadOnly) { this.CreateMongoDBToolStripMenuItem.Enabled = true; #if !MONO this.ImportDataFromAccessToolStripMenuItem.Enabled = true; #endif this.AddUserToAdminToolStripMenuItem.Enabled = true; if (!(SystemManager.GetCurrentService().Instance.IsPrimary)) { this.slaveResyncToolStripMenuItem.Enabled = true; } } this.ShutDownToolStripMenuItem.Enabled = true; this.SvrPropertyToolStripMenuItem.Enabled = true; if (SystemManager.GetSelectedSvrProByName().ServerRole == ConfigHelper.SvrRoleType.ReplsetSvr) { //副本服务器专用。 //副本初始化的操作 改在连接设置里面完成 if (!config.IsReadOnly) { this.ReplicaSetToolStripMenuItem.Enabled = true; } } if (SystemManager.GetSelectedSvrProByName().ServerRole == ConfigHelper.SvrRoleType.RouteSvr) { //Route用 if (!config.IsReadOnly) { this.ShardingConfigToolStripMenuItem.Enabled = true; } } if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t1 = this.CreateMongoDBToolStripMenuItem.Clone(); t1.Click += new EventHandler(CreateMongoDBToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.AddUserToAdminToolStripMenuItem.Clone(); t2.Click += new EventHandler(AddUserToAdminToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.RestoreMongoToolStripMenuItem.Clone(); t3.Click += new EventHandler(RestoreMongoToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = this.ReplicaSetToolStripMenuItem.Clone(); t4.Click += new EventHandler(ReplicaSetToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = this.ShardingConfigToolStripMenuItem.Clone(); t5.Click += new EventHandler(ShardingConfigToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t51 = this.slaveResyncToolStripMenuItem.Clone(); t51.Click += new EventHandler(slaveResyncToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t51); ToolStripMenuItem t6 = this.DisconnectToolStripMenuItem.Clone(); t6.Click += new EventHandler(DisconnectToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t7 = this.ShutDownToolStripMenuItem.Clone(); t7.Click += new EventHandler(ShutDownToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t7); ToolStripMenuItem t8 = this.SvrPropertyToolStripMenuItem.Clone(); t8.Click += new EventHandler(SvrPropertyToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t8); #else this.contextMenuStripMain.Items.Add(this.CreateMongoDBToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.AddUserToAdminToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ImportDataFromAccessToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RestoreMongoToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ReplicaSetToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ShardingConfigToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.slaveResyncToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.DisconnectToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ShutDownToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.SvrPropertyToolStripMenuItem.Clone()); #endif e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.SINGLE_DB_SERVICE_TAG: //单数据库模式,禁止所有服务器操作 SystemManager.SelectObjectTag = e.Node.Tag.ToString(); this.DisconnectToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t1 = this.DisconnectToolStripMenuItem.Clone(); t1.Click += new EventHandler(DisconnectToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t8 = this.SvrPropertyToolStripMenuItem.Clone(); t8.Click += new EventHandler(SvrPropertyToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t8); #else this.contextMenuStripMain.Items.Add(this.DisconnectToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.SvrPropertyToolStripMenuItem.Clone()); #endif e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected Server[Single Database]:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; break; case MongoDBHelper.SERVICE_TAG_EXCEPTION: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); this.DisconnectToolStripMenuItem.Enabled = true; this.RestoreMongoToolStripMenuItem.Enabled = false; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t1 = this.DisconnectToolStripMenuItem.Clone(); t1.Click += new EventHandler(DisconnectToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); #else this.contextMenuStripMain.Items.Add(this.DisconnectToolStripMenuItem.Clone()); #endif e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected Server[Exception]:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; break; case MongoDBHelper.DATABASE_TAG: case MongoDBHelper.SINGLE_DATABASE_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected DataBase:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_DataBase) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } //解禁 删除数据库 创建数据集 if (!MongoDBHelper.IsSystemDataBase(SystemManager.GetCurrentDataBase())) { if (!config.IsReadOnly) { //系统库不允许修改 this.DelMongoDBToolStripMenuItem.Enabled = true; this.CreateMongoCollectionToolStripMenuItem.Enabled = true; this.AddUserToolStripMenuItem.Enabled = true; this.InitGFSToolStripMenuItem.Enabled = true; //if (config.ServerRole == ConfigHelper.SvrRoleType.SlaveSvr) //{ ///Slave server @ Master-Slave this.RepairDBToolStripMenuItem.Enabled = true; //} } this.evalJSToolStripMenuItem.Enabled = true; this.ConvertSqlToolStripMenuItem.Enabled = true; } //备份数据库 this.DumpDatabaseToolStripMenuItem.Enabled = true; if (strNodeType == MongoDBHelper.SINGLE_DATABASE_TAG) { this.DelMongoDBToolStripMenuItem.Enabled = false; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t0 = this.DelMongoDBToolStripMenuItem.Clone(); t0.Click += new EventHandler(DelMongoDBToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t0); ToolStripMenuItem t1 = this.CreateMongoCollectionToolStripMenuItem.Clone(); t1.Click += new EventHandler(CreateMongoCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.AddUserToolStripMenuItem.Clone(); t2.Click += new EventHandler(AddUserToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.evalJSToolStripMenuItem.Clone(); t3.Click += new EventHandler(evalJSToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t31 = this.RepairDBToolStripMenuItem.Clone(); t31.Click += new EventHandler(RepairDBToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t31); ToolStripMenuItem t4 = this.InitGFSToolStripMenuItem.Clone(); t4.Click += new EventHandler(InitGFSToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = this.DumpDatabaseToolStripMenuItem.Clone(); t5.Click += new EventHandler(DumpDatabaseToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t6 = this.RestoreMongoToolStripMenuItem.Clone(); t6.Click += new EventHandler(RestoreMongoToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t7 = this.ConvertSqlToolStripMenuItem.Clone(); t7.Click += new EventHandler(ConvertSqlToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t7); #else this.contextMenuStripMain.Items.Add(this.DelMongoDBToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.CreateMongoCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.AddUserToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.evalJSToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RepairDBToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.InitGFSToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.DumpDatabaseToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RestoreMongoToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ConvertSqlToolStripMenuItem.Clone()); #endif e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.COLLECTION_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected Collection:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Collection) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } //解禁 删除数据集 if (!MongoDBHelper.IsSystemCollection(SystemManager.GetCurrentCollection())) { //系统数据库无法删除!! if (!config.IsReadOnly) { this.DelMongoCollectionToolStripMenuItem.Enabled = true; this.RenameCollectionToolStripMenuItem.Enabled = true; } } if (!config.IsReadOnly) { this.ImportCollectionToolStripMenuItem.Enabled = true; this.CompactToolStripMenuItem.Enabled = true; } this.DumpCollectionToolStripMenuItem.Enabled = true; this.ExportCollectionToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t1 = this.DelMongoCollectionToolStripMenuItem.Clone(); t1.Click += new EventHandler(DelMongoCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.RenameCollectionToolStripMenuItem.Clone(); t2.Click += new EventHandler(RenameCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.DumpCollectionToolStripMenuItem.Clone(); t3.Click += new EventHandler(DumpCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = this.RestoreMongoToolStripMenuItem.Clone(); t4.Click += new EventHandler(RestoreMongoToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = this.ImportCollectionToolStripMenuItem.Clone(); t5.Click += new EventHandler(ImportCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t6 = this.ExportCollectionToolStripMenuItem.Clone(); t6.Click += new EventHandler(ExportCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t7 = this.CompactToolStripMenuItem.Clone(); t7.Click += new EventHandler(CompactToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t7); #else this.contextMenuStripMain.Items.Add(this.DelMongoCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RenameCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.DumpCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RestoreMongoToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ImportCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ExportCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.CompactToolStripMenuItem.Clone()); #endif contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.DOCUMENT_TAG: //BsonDocument SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected Document:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Data) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } if (!config.IsReadOnly & !MongoDBHelper.IsSystemCollection(SystemManager.GetCurrentCollection())) { this.AddDocumentToolStripMenuItem.Enabled = true; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { SetDataNav(); this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t1 = this.countToolStripMenuItem.Clone(); t1.Click += new EventHandler(countToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.distinctToolStripMenuItem.Clone(); t2.Click += new EventHandler(distinctToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.groupToolStripMenuItem.Clone(); t3.Click += new EventHandler(groupToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = this.mapReduceToolStripMenuItem.Clone(); t4.Click += new EventHandler(mapReduceToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = this.QueryDataToolStripMenuItem.Clone(); t5.Click += new EventHandler(QueryDataToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t6 = this.AddDocumentToolStripMenuItem.Clone(); t6.Click += new EventHandler(AddDocumentToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t6); #else this.contextMenuStripMain.Items.Add(this.countToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.distinctToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.groupToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.mapReduceToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.QueryDataToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.AddDocumentToolStripMenuItem.Clone()); #endif e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } if (e.Button == System.Windows.Forms.MouseButtons.Left) { MongoDBHelper.IsUseFilter = false; this.DataFilterToolStripMenuItem.Checked = MongoDBHelper.IsUseFilter; SystemManager.CurrDataFilter.Clear(); RefreshData(); } break; case MongoDBHelper.INDEX_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected Index:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Index) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } break; case MongoDBHelper.INDEXES_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected Index:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Indexes) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } if (!MongoDBHelper.IsSystemCollection(SystemManager.GetCurrentCollection()) & !config.IsReadOnly) { this.IndexManageToolStripMenuItem.Enabled = true; this.ReIndexToolStripMenuItem.Enabled = true; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t1 = this.IndexManageToolStripMenuItem.Clone(); t1.Click += new EventHandler(IndexManageToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.ReIndexToolStripMenuItem.Clone(); t2.Click += new EventHandler(ReIndexToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); #else this.contextMenuStripMain.Items.Add(this.IndexManageToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ReIndexToolStripMenuItem.Clone()); #endif e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.GRID_FILE_SYSTEM_TAG: //GridFileSystem SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected GFS:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_GFS) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } MongoDBHelper.IsUseFilter = false; this.DataFilterToolStripMenuItem.Checked = MongoDBHelper.IsUseFilter; SystemManager.CurrDataFilter.Clear(); RefreshData(); if (!config.IsReadOnly) { UploadFileToolStripMenuItem.Enabled = true; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); #if MONO //悲催MONO不支持 ToolStripMenuItem t1 = this.UploadFileToolStripMenuItem.Clone(); t1.Click += new EventHandler(UploadFileToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); #else this.contextMenuStripMain.Items.Add(this.UploadFileToolStripMenuItem.Clone()); #endif e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.USER_LIST_TAG: //BsonDocument MongoDBHelper.FillDataToControl(e.Node.Tag.ToString(), _dataShower); SetDataNav(); SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage()) { statusStripMain.Items[0].Text = "Selected UserList:" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_UserList) + ":" + SystemManager.SelectObjectTag.Split(":".ToCharArray())[1]; } break; default: SystemManager.SelectObjectTag = ""; statusStripMain.Items[0].Text = "Selected Object:" + e.Node.Text; break; } } else { statusStripMain.Items[0].Text = "Selected Object:" + e.Node.Text; } //重新Reset工具栏 SetToolBarEnabled(); if (strNodeType != MongoDBHelper.DOCUMENT_TAG) { DataNaviToolStripLabel.Text = String.Empty; } }
/// <summary> /// 初始化(修改) /// </summary> /// <param name="ConnectionName"></param> public frmAddConnection(String ConnectionName) { InitializeComponent(); //Modify Mode ModifyConn = SystemManager.ConfigHelperInstance.ConnectionList[ConnectionName]; foreach (ConfigHelper.MongoConnectionConfig item in SystemManager.ConfigHelperInstance.ConnectionList.Values) { if (item.MainReplSetName == ModifyConn.ReplSetName) { lstServerce.Items.Add(item.ConnectionName); if (ModifyConn.ServerRole == ConfigHelper.SvrRoleType.ReplsetSvr && ModifyConn.ReplsetList.Contains(item.ConnectionName)) { lstServerce.SetSelected(lstServerce.Items.Count - 1, true); } } } OnLoad(); txtConnectionName.Text = ModifyConn.ConnectionName; txtConnectionName.Enabled = false; txtHost.Text = ModifyConn.Host; txtMainReplsetName.Text = ModifyConn.MainReplSetName; numPort.Text = ModifyConn.Port.ToString(); txtUsername.Text = ModifyConn.UserName; txtPassword.Text = ModifyConn.Password; if (SystemManager.IsUseDefaultLanguage()) { cmdAdd.Text = "Modify"; } else { cmdAdd.Text = SystemManager.mStringResource.GetText(StringResource.TextType.Common_Modify); } chkSlaveOk.Checked = ModifyConn.IsSlaveOk; chkSafeMode.Checked = ModifyConn.IsSafeMode; txtReplSetName.Text = ModifyConn.ReplSetName; txtDataBaseName.Text = ModifyConn.DataBaseName; numPriority.Value = ModifyConn.Priority; numTimeOut.Value = ModifyConn.SocketTimeOut; txtConnectionString.Text = ModifyConn.ConnectionString; switch (ModifyConn.ServerRole) { case ConfigHelper.SvrRoleType.ConfigSvr: radConfigSrv.Checked = true; break; case ConfigHelper.SvrRoleType.RouteSvr: radRouteSrv.Checked = true; break; case ConfigHelper.SvrRoleType.ArbiterSvr: radArbiters.Checked = true; break; case ConfigHelper.SvrRoleType.DataSvr: radDataSrv.Checked = true; break; case ConfigHelper.SvrRoleType.MasterSvr: radMaster.Checked = true; break; case ConfigHelper.SvrRoleType.SlaveSvr: radSlave.Checked = true; break; default: radDataSrv.Checked = true; break; } }
/// <summary> /// 将Mongodb的服务器在树形控件中展示 /// </summary> /// <param name="trvMongoDB"></param> public static void FillConnectionToTreeView(TreeView trvMongoDB) { trvMongoDB.Nodes.Clear(); foreach (String mongoConnKey in MongoDbHelper._mongoConnSvrLst.Keys) { MongoServer mongoSrv = MongoDbHelper._mongoConnSvrLst[mongoConnKey]; var ConnectionNode = new TreeNode(); var UserList = new EachDatabaseUser(); try { //ReplSetName只能使用在虚拟的Replset服务器,Sharding体系等无效。虽然一个Sharding可以看做一个ReplSet ConfigHelper.MongoConnectionConfig config = SystemManager.ConfigHelperInstance.ConnectionList[mongoConnKey]; ConnectionNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Connection; ConnectionNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Connection; //ReplSet服务器需要Connect才能连接。可能因为这个是虚拟的服务器,没有Mongod实体。 //不过现在改为全部显示的打开连接 mongoSrv.Connect(); //mongoSvr.ReplicaSetName只有在连接后才有效,但是也可以使用Config.ReplsetName ConnectionNode.Text = mongoConnKey; ConnectionNode.Nodes.Add(GetInstanceNode(mongoConnKey, ref config, mongoSrv, null, mongoSrv, UserList)); if (mongoSrv.ReplicaSetName != null) { ConnectionNode.Tag = MongoDbHelper.CONNECTION_REPLSET_TAG + ":" + config.ConnectionName; var ServerListNode = new TreeNode("Servers") { SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers, ImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers }; foreach (MongoServerInstance ServerInstace in mongoSrv.Instances) { ServerListNode.Nodes.Add(GetInstanceNode(mongoConnKey, ref config, mongoSrv, ServerInstace, null, UserList)); } ConnectionNode.Nodes.Add(ServerListNode); config.ServerRole = ConfigHelper.SvrRoleType.ReplsetSvr; } else { BsonDocument ServerStatusDoc = CommandHelper.ExecuteMongoSvrCommand(CommandHelper.serverStatus_Command, mongoSrv).Response; //ServerStatus可能没有权限打开 if (ServerStatusDoc.Contains("process") && ServerStatusDoc.GetElement("process").Value == MongoDbHelper.ServerStatus_PROCESS_MONGOS) { //Shard的时候,必须将所有服务器的ReadPreferred设成可读 config.ServerRole = ConfigHelper.SvrRoleType.ShardSvr; ConnectionNode.Tag = MongoDbHelper.CONNECTION_CLUSTER_TAG + ":" + config.ConnectionName; var ShardListNode = new TreeNode("Shards") { SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers, ImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers }; foreach (var lst in MongoDbHelper.GetShardInfo(mongoSrv, "host")) { var ShardNode = new TreeNode { Text = lst.Key, SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers, ImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers }; String strHostList = lst.Value; String[] strAddress = strHostList.Split("/".ToCharArray()); String strAddresslst; if (strAddress.Length == 2) { //#1 replset/host:port,host:port ShardNode.Text += "[Replset:" + strAddress[0] + "]"; strAddresslst = strAddress[1]; } else { //#2 host:port,host:port strAddresslst = strHostList; } foreach (String item in strAddresslst.Split(",".ToCharArray())) { var tinySetting = new MongoClientSettings { ConnectionMode = ConnectionMode.Direct, ReadPreference = ReadPreference.PrimaryPreferred, ReplicaSetName = strAddress[0] }; //防止无法读取Sharding状态。Sharding可能是一个Slaver MongoServerAddress SecondaryAddr; if (item.Split(":".ToCharArray()).Length == 2) { SecondaryAddr = new MongoServerAddress(item.Split(":".ToCharArray())[0], Convert.ToInt32(item.Split(":".ToCharArray())[1])); } else { SecondaryAddr = new MongoServerAddress(item.Split(":".ToCharArray())[0]); } tinySetting.Server = SecondaryAddr; MongoServer ReplsetMember = new MongoClient(tinySetting).GetServer(); ShardNode.Nodes.Add(GetInstanceNode(mongoConnKey, ref config, mongoSrv, ReplsetMember.Instance, null, UserList)); } ShardListNode.Nodes.Add(ShardNode); } ConnectionNode.Nodes.Add(ShardListNode); } else { //Server Status mongod //Master - Slave 的判断 BsonElement replElement; ServerStatusDoc.TryGetElement("repl", out replElement); if (replElement == null) { config.ServerRole = ConfigHelper.SvrRoleType.DataSvr; } else { config.ServerRole = replElement.Value.AsBsonDocument.GetElement("ismaster").Value == BsonBoolean.True ? ConfigHelper.SvrRoleType.MasterSvr : ConfigHelper.SvrRoleType.SlaveSvr; } ConnectionNode.Tag = MongoDbHelper.CONNECTION_TAG + ":" + config.ConnectionName; } } //设定是否可用 config.Health = true; //设定版本 if (mongoSrv.BuildInfo != null) { config.MongoDBVersion = mongoSrv.BuildInfo.Version; } SystemManager.ConfigHelperInstance.ConnectionList[mongoConnKey] = config; switch (config.ServerRole) { case ConfigHelper.SvrRoleType.DataSvr: ConnectionNode.Text = "[Data] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.ShardSvr: ConnectionNode.Text = "[Cluster] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.ReplsetSvr: ConnectionNode.Text = "[Replset] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.MasterSvr: ConnectionNode.Text = "[Master] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.SlaveSvr: ConnectionNode.Text = "[Slave] " + ConnectionNode.Text; break; default: break; } trvMongoDB.Nodes.Add(ConnectionNode); if (MongoDbHelper._mongoUserLst.ContainsKey(mongoConnKey)) { MongoDbHelper._mongoUserLst[mongoConnKey] = UserList; } else { MongoDbHelper._mongoUserLst.Add(mongoConnKey, UserList); } } catch (MongoAuthenticationException ex) { //需要验证的数据服务器,没有Admin权限无法获得数据库列表 if (!SystemManager.IsUseDefaultLanguage) { ConnectionNode.Text += "[" + SystemManager.MStringResource.GetText( StringResource.TextType.Exception_AuthenticationException) + "]"; SystemManager.ExceptionDeal(ex, SystemManager.MStringResource.GetText( StringResource.TextType.Exception_AuthenticationException), SystemManager.MStringResource.GetText( StringResource.TextType.Exception_AuthenticationException_Note)); } else { ConnectionNode.Text += "[MongoAuthenticationException]"; SystemManager.ExceptionDeal(ex, "MongoAuthenticationException:", "Please check UserName and Password"); } ConnectionNode.Tag = MongoDbHelper.CONNECTION_EXCEPTION_TAG + ":" + mongoConnKey; trvMongoDB.Nodes.Add(ConnectionNode); } catch (MongoCommandException ex) { //listDatabase命令错误,本质是用户名称错误 if (ex.CommandResult.Response["errmsg"] == "unauthorized") { if (!SystemManager.IsUseDefaultLanguage) { ConnectionNode.Text += "[" + SystemManager.MStringResource.GetText( StringResource.TextType.Exception_AuthenticationException) + "]"; SystemManager.ExceptionDeal(ex, SystemManager.MStringResource.GetText( StringResource.TextType.Exception_AuthenticationException), SystemManager.MStringResource.GetText( StringResource.TextType.Exception_AuthenticationException_Note)); } else { ConnectionNode.Text += "[MongoAuthenticationException]"; SystemManager.ExceptionDeal(ex, "MongoAuthenticationException:", "Please check UserName and Password"); } } else { if (!SystemManager.IsUseDefaultLanguage) { ConnectionNode.Text += "[" + SystemManager.MStringResource.GetText( StringResource.TextType.Exception_NotConnected) + "]"; SystemManager.ExceptionDeal(ex, SystemManager.MStringResource.GetText(StringResource.TextType.Exception_NotConnected), "Unknown Exception"); } else { ConnectionNode.Text += "[Exception]"; SystemManager.ExceptionDeal(ex, "Not Connected", "Unknown Exception"); } } ConnectionNode.Tag = MongoDbHelper.CONNECTION_EXCEPTION_TAG + ":" + mongoConnKey; trvMongoDB.Nodes.Add(ConnectionNode); } catch (MongoConnectionException ex) { //暂时不处理任何异常,简单跳过 //无法连接的理由: //1.服务器没有启动 //2.认证模式不正确 if (!SystemManager.IsUseDefaultLanguage) { ConnectionNode.Text += "[" + SystemManager.MStringResource.GetText( StringResource.TextType.Exception_NotConnected) + "]"; SystemManager.ExceptionDeal(ex, SystemManager.MStringResource.GetText(StringResource.TextType.Exception_NotConnected), SystemManager.MStringResource.GetText(StringResource.TextType.Exception_NotConnected_Note)); } else { ConnectionNode.Text += "[Exception]"; SystemManager.ExceptionDeal(ex, "Not Connected", "Mongo Server may not Startup or Auth Mode is not correct"); } ConnectionNode.Tag = MongoDbHelper.CONNECTION_EXCEPTION_TAG + ":" + mongoConnKey; trvMongoDB.Nodes.Add(ConnectionNode); } catch (Exception ex) { if (!SystemManager.IsUseDefaultLanguage) { ConnectionNode.Text += "[" + SystemManager.MStringResource.GetText( StringResource.TextType.Exception_NotConnected) + "]"; SystemManager.ExceptionDeal(ex, SystemManager.MStringResource.GetText(StringResource.TextType.Exception_NotConnected), "Unknown Exception"); } else { ConnectionNode.Text += "[Exception]"; SystemManager.ExceptionDeal(ex, "Not Connected", "Unknown Exception"); } ConnectionNode.Tag = MongoDbHelper.CONNECTION_EXCEPTION_TAG + ":" + mongoConnKey; trvMongoDB.Nodes.Add(ConnectionNode); } } }
/// <summary> /// 根据config获得MongoClientSettings,同时更新一些运行时变量 /// </summary> /// <param name="config"></param> /// <returns></returns> public static MongoClientSettings CreateMongoClientSettingsByConfig( ref ConfigHelper.MongoConnectionConfig config) { //修改获得数据实例的方法 var mongoClientSetting = new MongoClientSettings(); if (String.IsNullOrEmpty(config.ConnectionString)) { mongoClientSetting.ConnectionMode = ConnectionMode.Direct; SetReadPreferenceWriteConcern(mongoClientSetting, config); //Replset时候可以不用设置吗? mongoClientSetting.Server = new MongoServerAddress(config.Host, config.Port); //MapReduce的时候将消耗大量时间。不过这里需要平衡一下,太长容易造成并发问题 //The default value for SocketTimeout has been changed from 30 seconds to 0, if (config.socketTimeoutMS != 0) { mongoClientSetting.SocketTimeout = new TimeSpan(0, 0, (int)(config.socketTimeoutMS / 1000)); } if (config.connectTimeoutMS != 0) { mongoClientSetting.ConnectTimeout = new TimeSpan(0, 0, (int)(config.connectTimeoutMS / 1000)); } if (SystemManager.ConfigHelperInstance.wtimeoutMS != 0) { mongoClientSetting.WaitQueueTimeout = new TimeSpan(0, 0, (int)(SystemManager.ConfigHelperInstance.wtimeoutMS / 1000)); } if (SystemManager.ConfigHelperInstance.WaitQueueSize != 0) { mongoClientSetting.WaitQueueSize = SystemManager.ConfigHelperInstance.WaitQueueSize; } //运行时LoginAsAdmin的设定 config.LoginAsAdmin = (config.DataBaseName == String.Empty); if (!(String.IsNullOrEmpty(config.UserName) || String.IsNullOrEmpty(config.Password))) { //认证的设定:注意,这里的密码是明文 if (string.IsNullOrEmpty(config.DataBaseName)) { mongoClientSetting.Credentials = new[] { MongoCredential.CreateMongoCRCredential(DATABASE_NAME_ADMIN, config.UserName, config.Password) }; } else { mongoClientSetting.Credentials = new[] { MongoCredential.CreateMongoCRCredential(config.DataBaseName, config.UserName, config.Password) }; } } if (config.ReplSetName != String.Empty) { mongoClientSetting.ReplicaSetName = config.ReplSetName; config.ServerRole = ConfigHelper.SvrRoleType.ReplsetSvr; } else { config.ServerRole = ConfigHelper.SvrRoleType.DataSvr; } if (config.ServerRole == ConfigHelper.SvrRoleType.ReplsetSvr) { //ReplsetName不是固有属性,可以设置,不过必须保持与配置文件的一致 mongoClientSetting.ConnectionMode = ConnectionMode.ReplicaSet; //添加Replset服务器,注意,这里可能需要事先初始化副本 var ReplsetSvrList = new List <MongoServerAddress>(); foreach (String item in config.ReplsetList) { //如果这里的服务器在启动的时候没有--Replset参数,将会出错,当然作为单体的服务器,启动是没有任何问题的 MongoServerAddress ReplSrv; if (item.Split(":".ToCharArray()).Length == 2) { ReplSrv = new MongoServerAddress( item.Split(":".ToCharArray())[0], Convert.ToInt16(item.Split(":".ToCharArray())[1])); } else { ReplSrv = new MongoServerAddress(item); } ReplsetSvrList.Add(ReplSrv); } mongoClientSetting.Servers = ReplsetSvrList; } } else { //使用MongoConnectionString建立连接 mongoClientSetting = MongoClientSettings.FromUrl(MongoUrl.Create(config.ConnectionString)); } //为了避免出现无法读取数据库结构的问题,将读权限都设置为Preferred if (mongoClientSetting.ReadPreference == ReadPreference.Primary) { mongoClientSetting.ReadPreference = ReadPreference.PrimaryPreferred; } if (mongoClientSetting.ReadPreference == ReadPreference.Secondary) { mongoClientSetting.ReadPreference = ReadPreference.SecondaryPreferred; } return(mongoClientSetting); }
public frmReplsetMgr(ref ConfigHelper.MongoConnectionConfig config) { InitializeComponent(); _config = config; }
/// <summary> /// /// </summary> /// <param name="mongoConnKey"></param> /// <param name="config"></param> /// <param name="mongoConn"></param> /// <param name="mServerInstace"></param> /// <param name="mServer"></param> /// <returns></returns> private static TreeNode GetInstanceNode(String mongoConnKey, ConfigHelper.MongoConnectionConfig config, MongoServer mongoConn, MongoServerInstance mServerInstace, MongoServer mServer) { Boolean isServer = false; //无论如何,都改为主要服务器读优先 if (mServerInstace == null) { isServer = true; } TreeNode SvrInstanceNode = new TreeNode(); String ConnSvrKey; if (isServer) { ConnSvrKey = mongoConnKey + "/" + mongoConnKey; } else { ConnSvrKey = mongoConnKey + "/" + mServerInstace.Address.ToString().Replace(":", "@"); } SvrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; SvrInstanceNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; if (isServer) { SvrInstanceNode.Text = "Connection"; } else { SvrInstanceNode.Text = "Server[" + mServerInstace.Address.ToString() + "]"; } if ((!String.IsNullOrEmpty(config.UserName)) & (!String.IsNullOrEmpty(config.Password))) { config.AuthMode = true; } //获取ReadOnly config.IsReadOnly = false; List <String> databaseNameList = new List <String>(); if (!String.IsNullOrEmpty(config.DataBaseName)) { //单数据库模式 TreeNode mongoSingleDBNode; if (isServer) { mongoSingleDBNode = FillDataBaseInfoToTreeNode(config.DataBaseName, mServer, mongoConnKey + "/" + mongoConnKey); } else { mongoSingleDBNode = FillDataBaseInfoToTreeNode(config.DataBaseName, MongoServer.Create(mServerInstace.Settings), mongoConnKey + "/" + mServerInstace.Address.ToString()); } mongoSingleDBNode.Tag = SINGLE_DATABASE_TAG + ":" + ConnSvrKey + "/" + config.DataBaseName; mongoSingleDBNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoSingleDBNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; SvrInstanceNode.Nodes.Add(mongoSingleDBNode); SvrInstanceNode.Tag = SINGLE_DB_SERVER_TAG + ":" + ConnSvrKey; if (config.AuthMode) { config.IsReadOnly = mongoConn.GetDatabase(config.DataBaseName).FindUser(config.UserName).IsReadOnly; } } else { MongoServer InstantSrv; if (isServer) { InstantSrv = mServer; databaseNameList = mServer.GetDatabaseNames().ToList <String>(); } else { MongoServerSettings setting = mongoConn.Settings.Clone(); setting.ConnectionMode = ConnectionMode.Direct; //When Replset Case,Application need to read admin DB information //if Primary,there will be exception setting.ReadPreference = ReadPreference.PrimaryPreferred; setting.Server = mServerInstace.Address; InstantSrv = new MongoServer(setting); databaseNameList = InstantSrv.GetDatabaseNames().ToList <String>(); } foreach (String strDBName in databaseNameList) { TreeNode mongoDBNode; try { mongoDBNode = FillDataBaseInfoToTreeNode(strDBName, InstantSrv, ConnSvrKey); mongoDBNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoDBNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; SvrInstanceNode.Nodes.Add(mongoDBNode); if (strDBName == MongoDBHelper.DATABASE_NAME_ADMIN) { if (config.AuthMode) { config.IsReadOnly = mongoConn.GetDatabase(strDBName).FindUser(config.UserName).IsReadOnly; } } } catch (Exception ex) { SystemManager.ExceptionDeal(ex, strDBName + "Exception", strDBName + "Exception"); mongoDBNode = new TreeNode(strDBName + " (Exception)"); mongoDBNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoDBNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; SvrInstanceNode.Nodes.Add(mongoDBNode); } } if (isServer) { SvrInstanceNode.Tag = SERVER_TAG + ":" + mongoConnKey + "/" + mongoConnKey; } else { if (mongoConn.ReplicaSetName != null) { SvrInstanceNode.Tag = SERVER_REPLSET_MEMBER_TAG + ":" + mongoConnKey + "/" + mServerInstace.Address.ToString().Replace(":", "@"); } } } if (_mongoInstanceLst.ContainsKey(ConnSvrKey)) { _mongoInstanceLst.Remove(ConnSvrKey); } if (!isServer) { _mongoInstanceLst.Add(ConnSvrKey, mServerInstace); } return(SvrInstanceNode); }
/// <summary> /// /// </summary> /// <param name="config"></param> /// <returns></returns> public static MongoServer CreateMongoServer(ref ConfigHelper.MongoConnectionConfig config) { var masterMongoClient = new MongoClient(CreateMongoClientSettingsByConfig(ref config)); return(masterMongoClient.GetServer()); }
/// <summary> /// ConnectionList TreeView Node is clicked by mouse /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void trvsrvlst_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Node.ImageIndex != -1) { statusStripMain.Items[0].Image = GetSystemIcon.MainTreeImage.Images[e.Node.ImageIndex]; } //First , set Every MenuItem to disable DisableAllOpr(); if (e.Node.Tag != null) { //选中节点的设置 trvsrvlst.SelectedNode = e.Node; String strNodeType = SystemManager.GetTagType(e.Node.Tag.ToString()); String mongoSvrKey = SystemManager.GetTagData(e.Node.Tag.ToString()).Split("/".ToCharArray())[0]; _config = SystemManager.ConfigHelperInstance.ConnectionList[mongoSvrKey]; if (String.IsNullOrEmpty(_config.UserName)) { lblUserInfo.Text = "UserInfo:Admin"; } else { lblUserInfo.Text = "UserInfo:" + _config.UserName; } if (_config.AuthMode) { lblUserInfo.Text += " @AuthMode"; } if (_config.IsReadOnly) { lblUserInfo.Text += " [ReadOnly]"; } if (!_config.IsReadOnly) { //恢复数据:这个操作可以针对服务器,数据库,数据集,所以可以放在共通 RestoreMongoToolStripMenuItem.Enabled = true; } SystemManager.SelectObjectTag = String.Empty; if (SystemManager.SelectObjectTag != null) { SystemManager.SelectObjectTag = e.Node.Tag.ToString(); } switch (strNodeType) { case MongoDbHelper.CONNECTION_TAG: case MongoDbHelper.CONNECTION_REPLSET_TAG: case MongoDbHelper.CONNECTION_CLUSTER_TAG: //普通连接 if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Connection:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_Server) + ":" + SystemManager.SelectTagData; } DisconnectToolStripMenuItem.Enabled = true; ShutDownToolStripMenuItem.Enabled = true; ShutDownToolStripButton.Enabled = true; if (strNodeType == MongoDbHelper.CONNECTION_TAG) { InitReplsetToolStripMenuItem.Enabled = true; } if (strNodeType == MongoDbHelper.CONNECTION_REPLSET_TAG) { ReplicaSetToolStripMenuItem.Enabled = true; } if (strNodeType == MongoDbHelper.CONNECTION_CLUSTER_TAG) { ShardingConfigToolStripMenuItem.Enabled = true; } if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { ToolStripMenuItem t1 = DisconnectToolStripMenuItem.Clone(); t1.Click += DisconnectToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = InitReplsetToolStripMenuItem.Clone(); t2.Click += InitReplsetToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = ReplicaSetToolStripMenuItem.Clone(); t3.Click += ReplicaSetToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = ShardingConfigToolStripMenuItem.Clone(); t4.Click += ShardingConfigToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = ShutDownToolStripMenuItem.Clone(); t5.Click += ShutDownToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t5); } else { contextMenuStripMain.Items.Add(DisconnectToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ShutDownToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(InitReplsetToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ReplicaSetToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ShardingConfigToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDbHelper.CONNECTION_EXCEPTION_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); DisconnectToolStripMenuItem.Enabled = true; RestoreMongoToolStripMenuItem.Enabled = false; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { //悲催MONO不支持 ToolStripMenuItem t1 = DisconnectToolStripMenuItem.Clone(); t1.Click += DisconnectToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t1); } else { contextMenuStripMain.Items.Add(DisconnectToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected Server[Exception]:" + SystemManager.SelectTagData; break; case MongoDbHelper.SERVER_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Server:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_Server) + ":" + SystemManager.SelectTagData; } //解禁 创建数据库,关闭服务器 if (!_config.IsReadOnly) { CreateMongoDBToolStripMenuItem.Enabled = true; AddUserToAdminToolStripMenuItem.Enabled = true; if (_config.ServerRole == ConfigHelper.SvrRoleType.MasterSvr || _config.ServerRole == ConfigHelper.SvrRoleType.SlaveSvr) { //Master,Slave都可以执行 slaveResyncToolStripMenuItem.Enabled = true; } } UserInfoStripMenuItem.Enabled = true; ServerStatusToolStripMenuItem.Enabled = true; ServePropertyToolStripMenuItem.Enabled = true; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { //悲催MONO不支持 ToolStripMenuItem t1 = CreateMongoDBToolStripMenuItem.Clone(); t1.Click += CreateMongoDBToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = AddUserToAdminToolStripMenuItem.Clone(); t2.Click += AddUserToAdminToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = RestoreMongoToolStripMenuItem.Clone(); t3.Click += RestoreMongoToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t6 = slaveResyncToolStripMenuItem.Clone(); t6.Click += slaveResyncToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t9 = ServePropertyToolStripMenuItem.Clone(); t9.Click += ServePropertyToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t9); ToolStripMenuItem t10 = ServerStatusToolStripMenuItem.Clone(); t10.Click += SvrStatusToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t10); } else { contextMenuStripMain.Items.Add(CreateMongoDBToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(AddUserToAdminToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(AddAdminCustomeRoleStripMenuItem.Clone()); contextMenuStripMain.Items.Add(UserInfoStripMenuItem.Clone()); contextMenuStripMain.Items.Add(RestoreMongoToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(slaveResyncToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ServePropertyToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ServerStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } //PlugIn foreach (ToolStripMenuItem item in plugInToolStripMenuItem.DropDownItems) { if (PlugIn.PlugInList[item.Tag.ToString()].RunLv == PlugBase.PathLv.ConnectionLV) { item.Enabled = true; } } break; case MongoDbHelper.SINGLE_DB_SERVER_TAG: //单数据库模式,禁止所有服务器操作 SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { //悲催MONO不支持 ToolStripMenuItem t1 = DisconnectToolStripMenuItem.Clone(); t1.Click += DisconnectToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = ServerStatusToolStripMenuItem.Clone(); t2.Click += SvrStatusToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t2); } else { contextMenuStripMain.Items.Add(DisconnectToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ServerStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected Server[Single Database]:" + SystemManager.SelectTagData; break; case MongoDbHelper.DATABASE_TAG: case MongoDbHelper.SINGLE_DATABASE_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); List<String> roles = User.GetCurrentDBRoles(); if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected DataBase:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_DataBase) + ":" + SystemManager.SelectTagData; } //系统库不允许修改 if (!MongoDbHelper.IsSystemDataBase(SystemManager.GetCurrentDataBase().Name)) { if (_config.AuthMode) { //根据Roles确定删除数据库/创建数据集等的权限 DelMongoDBToolStripMenuItem.Enabled = Common.Security.Action.JudgeRightByBuildInRole(roles, Common.Security.Action.ActionType.ServerAdministrationActions_dropDatabase); CreateMongoCollectionToolStripMenuItem.Enabled = Common.Security.Action.JudgeRightByBuildInRole(roles, Common.Security.Action.ActionType.DatabaseManagementActions_createCollection); InitGFSToolStripMenuItem.Enabled = Common.Security.Action.JudgeRightByBuildInRole(roles, Common.Security.Action.ActionType.Misc_InitGFS); AddUserToolStripMenuItem.Enabled = Common.Security.Action.JudgeRightByBuildInRole(roles, Common.Security.Action.ActionType.DatabaseManagementActions_createUser); //If a Slave server can repair database @ Master-Slave is not sure ?? RepairDBToolStripMenuItem.Enabled = Common.Security.Action.JudgeRightByBuildInRole(roles, Common.Security.Action.ActionType.ServerAdministrationActions_repairDatabase); } else { DelMongoDBToolStripMenuItem.Enabled = true; CreateMongoCollectionToolStripMenuItem.Enabled = true; InitGFSToolStripMenuItem.Enabled = true; AddUserToolStripMenuItem.Enabled = true; RepairDBToolStripMenuItem.Enabled = true; } EvalJSToolStripMenuItem.Enabled = Common.Security.Action.JudgeRightByBuildInRole(roles, Common.Security.Action.ActionType.Misc_EvalJS); } //备份数据库 DumpDatabaseToolStripMenuItem.Enabled = true; ProfillingLevelToolStripMenuItem.Enabled = true; if (strNodeType == MongoDbHelper.SINGLE_DATABASE_TAG) { DelMongoDBToolStripMenuItem.Enabled = false; } DBStatusToolStripMenuItem.Enabled = true; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { //悲催MONO不支持 ToolStripMenuItem t1 = DelMongoDBToolStripMenuItem.Clone(); t1.Click += DelMongoDBToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = CreateMongoCollectionToolStripMenuItem.Clone(); t2.Click += CreateMongoCollectionToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = AddUserToolStripMenuItem.Clone(); t3.Click += AddUserToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = EvalJSToolStripMenuItem.Clone(); t4.Click += evalJSToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = RepairDBToolStripMenuItem.Clone(); t5.Click += RepairDBToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t6 = InitGFSToolStripMenuItem.Clone(); t6.Click += InitGFSToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t7 = DumpDatabaseToolStripMenuItem.Clone(); t7.Click += DumpDatabaseToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t7); ToolStripMenuItem t8 = RestoreMongoToolStripMenuItem.Clone(); t8.Click += RestoreMongoToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t8); contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t10 = ProfillingLevelToolStripMenuItem.Clone(); t10.Click += profillingLevelToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t10); ToolStripMenuItem t11 = DBStatusToolStripMenuItem.Clone(); t11.Click += DBStatusToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t11); } else { contextMenuStripMain.Items.Add(DelMongoDBToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(CreateMongoCollectionToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(AddUserToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(AddDBCustomeRoleStripMenuItem.Clone()); contextMenuStripMain.Items.Add(EvalJSToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(RepairDBToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(InitGFSToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(DumpDatabaseToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(RestoreMongoToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(new ToolStripSeparator()); contextMenuStripMain.Items.Add(ProfillingLevelToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(DBStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDbHelper.SYSTEM_COLLECTION_LIST_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); statusStripMain.Items[0].Text = "System Collection List "; break; case MongoDbHelper.COLLECTION_LIST_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); statusStripMain.Items[0].Text = "Collection List "; break; case MongoDbHelper.COLLECTION_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Collection:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_Collection) + ":" + SystemManager.SelectTagData; } //解禁 删除数据集 if (!MongoDbHelper.IsSystemCollection(SystemManager.GetCurrentCollection())) { //系统数据库无法删除!! if (!_config.IsReadOnly) { DelMongoCollectionToolStripMenuItem.Enabled = true; RenameCollectionToolStripMenuItem.Enabled = true; } } if (!_config.IsReadOnly) { ImportCollectionToolStripMenuItem.Enabled = true; CompactToolStripMenuItem.Enabled = true; } if (!MongoDbHelper.IsSystemCollection(SystemManager.GetCurrentCollection()) && !_config.IsReadOnly) { IndexManageToolStripMenuItem.Enabled = true; ReIndexToolStripMenuItem.Enabled = true; } DumpCollectionToolStripMenuItem.Enabled = true; ExportCollectionToolStripMenuItem.Enabled = true; AggregationToolStripMenuItem.Enabled = true; ViewDataToolStripMenuItem.Enabled = true; CollectionStatusToolStripMenuItem.Enabled = true; ValidateToolStripMenuItem.Enabled = true; ExportToFileToolStripMenuItem.Enabled = true; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { //悲催MONO不支持 ToolStripMenuItem t1 = DelMongoCollectionToolStripMenuItem.Clone(); t1.Click += DelMongoCollectionToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = RenameCollectionToolStripMenuItem.Clone(); t2.Click += RenameCollectionToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = DumpCollectionToolStripMenuItem.Clone(); t3.Click += DumpCollectionToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = RestoreMongoToolStripMenuItem.Clone(); t4.Click += RestoreMongoToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = ImportCollectionToolStripMenuItem.Clone(); t5.Click += ImportCollectionToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t6 = ExportCollectionToolStripMenuItem.Clone(); t6.Click += ExportCollectionToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t7 = CompactToolStripMenuItem.Clone(); t7.Click += CompactToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t7); contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t8 = ViewDataToolStripMenuItem.Clone(); t8.Click += (x, y) => ViewDataObj(); contextMenuStripMain.Items.Add(t8); ToolStripMenuItem AggregationMenu = AggregationToolStripMenuItem.Clone(); ToolStripMenuItem t9 = countToolStripMenuItem.Clone(); t9.Click += countToolStripMenuItem_Click; AggregationMenu.DropDownItems.Add(t9); ToolStripMenuItem t10 = distinctToolStripMenuItem.Clone(); t10.Click += distinctToolStripMenuItem_Click; AggregationMenu.DropDownItems.Add(t10); ToolStripMenuItem t11 = groupToolStripMenuItem.Clone(); t11.Click += groupToolStripMenuItem_Click; AggregationMenu.DropDownItems.Add(t11); ToolStripMenuItem t12 = mapReduceToolStripMenuItem.Clone(); t12.Click += mapReduceToolStripMenuItem_Click; AggregationMenu.DropDownItems.Add(t12); contextMenuStripMain.Items.Add(AggregationMenu); contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t13 = IndexManageToolStripMenuItem.Clone(); t13.Click += IndexManageToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t13); ToolStripMenuItem t14 = ReIndexToolStripMenuItem.Clone(); t14.Click += ReIndexToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t14); contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t15 = CollectionStatusToolStripMenuItem.Clone(); t15.Click += CollectionStatusToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t15); } else { contextMenuStripMain.Items.Add(DelMongoCollectionToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(RenameCollectionToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(DumpCollectionToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(RestoreMongoToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ImportCollectionToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ExportCollectionToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ExportToFileToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(CompactToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(new ToolStripSeparator()); contextMenuStripMain.Items.Add(ViewDataToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(AggregationToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(new ToolStripSeparator()); contextMenuStripMain.Items.Add(IndexManageToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ReIndexToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(new ToolStripSeparator()); contextMenuStripMain.Items.Add(CollectionStatusToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(ValidateToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } //PlugIn foreach (ToolStripMenuItem item in plugInToolStripMenuItem.DropDownItems) { if (PlugIn.PlugInList[item.Tag.ToString()].RunLv == PlugBase.PathLv.CollectionLV) { item.Enabled = true; } } break; case MongoDbHelper.INDEX_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Index:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_Index) + ":" + SystemManager.SelectTagData; } break; case MongoDbHelper.INDEXES_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Index:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_Indexes) + ":" + SystemManager.SelectTagData; } break; case MongoDbHelper.USER_LIST_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected UserList:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_UserList) + ":" + SystemManager.SelectTagData; } ViewDataToolStripMenuItem.Enabled = true; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { ToolStripMenuItem t8 = ViewDataToolStripMenuItem.Clone(); t8.Click += (x, y) => ViewDataObj(); contextMenuStripMain.Items.Add(t8); } else { contextMenuStripMain.Items.Add(ViewDataToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDbHelper.GRID_FILE_SYSTEM_TAG: //GridFileSystem SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected GFS:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_GFS) + ":" + SystemManager.SelectTagData; } ViewDataToolStripMenuItem.Enabled = true; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { ToolStripMenuItem t8 = ViewDataToolStripMenuItem.Clone(); t8.Click += (x, y) => ViewDataObj(); contextMenuStripMain.Items.Add(t8); } else { contextMenuStripMain.Items.Add(ViewDataToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDbHelper.JAVASCRIPT_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); ViewDataToolStripMenuItem.Enabled = true; if (!_config.IsReadOnly) { creatJavaScriptToolStripMenuItem.Enabled = true; } if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { ToolStripMenuItem t8 = creatJavaScriptToolStripMenuItem.Clone(); t8.Click += creatJavaScriptToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t8); } else { contextMenuStripMain.Items.Add(creatJavaScriptToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected collection Javascript"; break; case MongoDbHelper.JAVASCRIPT_DOC_TAG: statusStripMain.Items[0].Text = "Selected JavaScript:" + SystemManager.SelectTagData; ViewDataToolStripMenuItem.Enabled = true; dropJavascriptToolStripMenuItem.Enabled = true; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { ToolStripMenuItem t1 = ViewDataToolStripMenuItem.Clone(); t1.Click += (x, y) => ViewDataObj(); contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t8 = dropJavascriptToolStripMenuItem.Clone(); t8.Click += dropJavascriptToolStripMenuItem_Click; contextMenuStripMain.Items.Add(t8); } else { contextMenuStripMain.Items.Add(ViewDataToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(dropJavascriptToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; default: statusStripMain.Items[0].Text = "Selected Object:" + e.Node.Text; break; } } else { statusStripMain.Items[0].Text = "Selected Object:" + e.Node.Text; } //重新Reset工具栏 SetToolBarEnabled(); }
/// <summary> /// 根据config获得MongoClientSettings,同时更新一些运行时变量 /// </summary> /// <param name="config"></param> /// <returns></returns> public static MongoClientSettings CreateMongoClientSettingsByConfig(ref ConfigHelper.MongoConnectionConfig config) { //修改获得数据实例的方法 MongoClientSettings mongoClientSetting = new MongoClientSettings(); if (String.IsNullOrEmpty(config.ConnectionString)) { mongoClientSetting.ConnectionMode = ConnectionMode.Direct; SetReadPreferenceWriteConcern(mongoClientSetting, config); //Replset时候可以不用设置吗? mongoClientSetting.Server = new MongoServerAddress(config.Host, config.Port); //MapReduce的时候将消耗大量时间。不过这里需要平衡一下,太长容易造成并发问题 //From Driver 1.4 Pay attention to this comment //The default value for SocketTimeout has been changed from 30 seconds to 0, //which is a special value meaning to use the operating system default value, //which in turn is infinity. If you actually want a SocketTimeout you now have to set it yourself. //The SocketTimeout is currently a server level setting, but most likely in a future release it will be possible to set it at other levels, //including for individual operations. if (config.socketTimeoutMS != 0) { mongoClientSetting.SocketTimeout = new TimeSpan(0, 0, (int)(config.socketTimeoutMS / 1000)); } if (config.connectTimeoutMS != 0) { mongoClientSetting.ConnectTimeout = new TimeSpan(0, 0, (int)(config.connectTimeoutMS / 1000)); } if (config.wtimeoutMS != 0) { mongoClientSetting.WaitQueueTimeout = new TimeSpan(0, 0, (int)(config.wtimeoutMS / 1000)); } if (config.WaitQueueSize != 0) { mongoClientSetting.WaitQueueSize = config.WaitQueueSize; } //运行时LoginAsAdmin的设定 config.LoginAsAdmin = (config.DataBaseName == String.Empty); if (!(String.IsNullOrEmpty(config.UserName) || String.IsNullOrEmpty(config.Password))) { //认证的设定:注意,这里的密码是明文 if (string.IsNullOrEmpty(config.DataBaseName)) { mongoClientSetting.Credentials = new MongoCredential[] { MongoCredential.CreateMongoCRCredential(DATABASE_NAME_ADMIN, config.UserName, config.Password) }; } else { mongoClientSetting.Credentials = new MongoCredential[] { MongoCredential.CreateMongoCRCredential(config.DataBaseName, config.UserName, config.Password) }; } } if (config.ReplSetName != String.Empty) { mongoClientSetting.ReplicaSetName = config.ReplSetName; config.ServerRole = ConfigHelper.SvrRoleType.ReplsetSvr; } else { config.ServerRole = ConfigHelper.SvrRoleType.DataSvr; } if (config.ServerRole == ConfigHelper.SvrRoleType.ReplsetSvr) { //ReplsetName不是固有属性,可以设置,不过必须保持与配置文件的一致 mongoClientSetting.ConnectionMode = ConnectionMode.ReplicaSet; //添加Replset服务器,注意,这里可能需要事先初始化副本 List <MongoServerAddress> ReplsetSvrList = new List <MongoServerAddress>(); foreach (String item in config.ReplsetList) { //如果这里的服务器在启动的时候没有--Replset参数,将会出错,当然作为单体的服务器,启动是没有任何问题的 MongoServerAddress ReplSrv; if (item.Split(":".ToCharArray()).Length == 2) { ReplSrv = new MongoServerAddress( item.Split(":".ToCharArray())[0], Convert.ToInt16(item.Split(":".ToCharArray())[1])); } else { ReplSrv = new MongoServerAddress(item); } ReplsetSvrList.Add(ReplSrv); } mongoClientSetting.Servers = ReplsetSvrList; } } else { //使用MongoConnectionString建立连接 mongoClientSetting = MongoClientSettings.FromUrl(MongoUrl.Create(config.ConnectionString)); } //为了避免出现无法读取数据库结构的问题,将读权限都设置为Preferred if (mongoClientSetting.ReadPreference == ReadPreference.Primary) { mongoClientSetting.ReadPreference = ReadPreference.PrimaryPreferred; } if (mongoClientSetting.ReadPreference == ReadPreference.Secondary) { mongoClientSetting.ReadPreference = ReadPreference.SecondaryPreferred; } return(mongoClientSetting); }
/// <summary> /// Set ReadPreference And WriteConcern /// </summary> /// <param name="mongoSvrSetting"></param> /// <param name="config"></param> private static void SetReadPreferenceWriteConcern(MongoServerSettings mongoSvrSetting, ConfigHelper.MongoConnectionConfig config) { //---------------------------------------------- // New MongoClient class and default WriteConcern //---------------------------------------------- //The new default WriteConcern is Acknowledged, but we have introduced the new //default in a way that doesn't alter the behavior of existing programs. We //are introducing a new root class called MongoClient that defaults the //WriteConcern to Acknowledged. The existing MongoServer Create methods are //deprecated but when used continue to default to a WriteConcern of Unacknowledged. //In prior releases you would start using the C# driver with code like this: // var connectionString = "mongodb://localhost"; // var server = MongoServer.Create(connectionString); // deprecated // var database = server.GetDatabase("test"); // WriteConcern defaulted to Unacknowledged //The new way to start using the C# driver is: // var connectionString = "mongodb://localhost"; // var client = new MongoClient(connectionString); // var server = client.GetServer(); // var database = server.GetDatabase("test"); // WriteConcern defaulted to Acknowledged //If you use the old way to start using the driver the default WriteConcern will //be Unacknowledged, but if you use the new way (using MongoClient) the default //WriteConcern will be Acknowledged. //当一个服务器作为从属服务器,副本组中的备用服务器,这里一定要设置为SlaveOK,默认情况下是不可以读取的 //SlaveOK 过时,使用ReadPreference if (config.ReadPreference == ReadPreference.Primary.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.Primary; } if (config.ReadPreference == ReadPreference.PrimaryPreferred.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.PrimaryPreferred; } if (config.ReadPreference == ReadPreference.Secondary.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.Secondary; } if (config.ReadPreference == ReadPreference.SecondaryPreferred.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.SecondaryPreferred; } if (config.ReadPreference == ReadPreference.Nearest.ToString()) { mongoSvrSetting.ReadPreference = ReadPreference.Nearest; } //Default ReadPreference is Primary //安全模式 if (config.WriteConcern == WriteConcern.Unacknowledged.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.Unacknowledged; } if (config.WriteConcern == WriteConcern.Acknowledged.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.Acknowledged; } if (config.WriteConcern == WriteConcern.W2.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.W2; } if (config.WriteConcern == WriteConcern.W3.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.W3; } if (config.WriteConcern == WriteConcern.W4.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.W4; } if (config.WriteConcern == WriteConcern.WMajority.ToString()) { mongoSvrSetting.WriteConcern = WriteConcern.WMajority; } //Default WriteConcern is w=0 }
/// <summary> /// 获得当前服务器配置 /// </summary> /// <param name="SrvName"></param> /// <returns></returns> public static ConfigHelper.MongoConnectionConfig GetCurrentServerConfig() { String ServerName = SelectObjectTag.Split(":".ToCharArray())[1]; ServerName = ServerName.Split("/".ToCharArray())[(int)MongoDBHelper.PathLv.ConnectionLV]; ConfigHelper.MongoConnectionConfig rtnMongoConnectionConfig = new ConfigHelper.MongoConnectionConfig(); if (ConfigHelperInstance.ConnectionList.ContainsKey(ServerName)) { rtnMongoConnectionConfig = ConfigHelperInstance.ConnectionList[ServerName]; } return rtnMongoConnectionConfig; }
/// <summary> /// 根据服务器名称获取配置 /// </summary> /// <param name="mongoSvrKey"></param> /// <returns></returns> public static ConfigHelper.MongoConnectionConfig GetCurrentServerConfig(String mongoSvrKey) { ConfigHelper.MongoConnectionConfig rtnMongoConnectionConfig = new ConfigHelper.MongoConnectionConfig(); if (ConfigHelperInstance.ConnectionList.ContainsKey(mongoSvrKey)) { rtnMongoConnectionConfig = ConfigHelperInstance.ConnectionList[mongoSvrKey]; } return rtnMongoConnectionConfig; }
/// <summary> /// ConnectionList TreeView Node is clicked by mouse /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void trvsrvlst_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Node.ImageIndex != -1) { statusStripMain.Items[0].Image = GetSystemIcon.MainTreeImage.Images[e.Node.ImageIndex]; } //First , set Every MenuItem to disable DisableAllOpr(); if (e.Node.Tag != null) { //选中节点的设置 this.trvsrvlst.SelectedNode = e.Node; String strNodeType = SystemManager.GetTagType(e.Node.Tag.ToString()); String mongoSvrKey = SystemManager.GetTagData(e.Node.Tag.ToString()).Split("/".ToCharArray())[0]; config = SystemManager.ConfigHelperInstance.ConnectionList[mongoSvrKey]; if (String.IsNullOrEmpty(config.UserName)) { lblUserInfo.Text = "UserInfo:Admin"; } else { lblUserInfo.Text = "UserInfo:" + config.UserName; } if (config.AuthMode) { lblUserInfo.Text += " @AuthMode"; } if (config.IsReadOnly) { lblUserInfo.Text += " [ReadOnly]"; } if (!config.IsReadOnly) { //恢复数据:这个操作可以针对服务器,数据库,数据集,所以可以放在共通 this.RestoreMongoToolStripMenuItem.Enabled = true; } SystemManager.SelectObjectTag = String.Empty; if (SystemManager.SelectObjectTag != null) { SystemManager.SelectObjectTag = e.Node.Tag.ToString(); } switch (strNodeType) { case MongoDBHelper.CONNECTION_TAG: case MongoDBHelper.CONNECTION_REPLSET_TAG: case MongoDBHelper.CONNECTION_CLUSTER_TAG: //普通连接 statusStripMain.Items[0].Text = "Selected JavaScript:" + SystemManager.SelectTagData; this.DisconnectToolStripMenuItem.Enabled = true; this.ShutDownToolStripMenuItem.Enabled = true; this.ShutDownToolStripButton.Enabled = true; if (strNodeType == MongoDBHelper.CONNECTION_TAG) { this.InitReplsetToolStripMenuItem.Enabled = true; } if (strNodeType == MongoDBHelper.CONNECTION_REPLSET_TAG) { this.ReplicaSetToolStripMenuItem.Enabled = true; } if (strNodeType == MongoDBHelper.CONNECTION_CLUSTER_TAG) { this.ShardingConfigToolStripMenuItem.Enabled = true; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { ToolStripMenuItem t1 = this.DisconnectToolStripMenuItem.Clone(); t1.Click += new EventHandler(DisconnectToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.InitReplsetToolStripMenuItem.Clone(); t2.Click += new EventHandler(InitReplsetToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.ReplicaSetToolStripMenuItem.Clone(); t3.Click += new EventHandler(ReplicaSetToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = this.ShardingConfigToolStripMenuItem.Clone(); t4.Click += new EventHandler(ShardingConfigToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = this.ShutDownToolStripMenuItem.Clone(); t5.Click += new EventHandler(ShutDownToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t5); } else { this.contextMenuStripMain.Items.Add(this.DisconnectToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ShutDownToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.InitReplsetToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ReplicaSetToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ShardingConfigToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.CONNECTION_EXCEPTION_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); this.DisconnectToolStripMenuItem.Enabled = true; this.RestoreMongoToolStripMenuItem.Enabled = false; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { //悲催MONO不支持 ToolStripMenuItem t1 = this.DisconnectToolStripMenuItem.Clone(); t1.Click += new EventHandler(DisconnectToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); } else { this.contextMenuStripMain.Items.Add(this.DisconnectToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected Server[Exception]:" + SystemManager.SelectTagData; break; case MongoDBHelper.SERVER_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Server:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Server) + ":" + SystemManager.SelectTagData; } //解禁 创建数据库,关闭服务器 if (!config.IsReadOnly) { this.CreateMongoDBToolStripMenuItem.Enabled = true; this.AddUserToAdminToolStripMenuItem.Enabled = true; if (!SystemManager.MONO_MODE) { this.ImportDataFromAccessToolStripMenuItem.Enabled = true; } if (config.ServerRole == ConfigHelper.SvrRoleType.MasterSvr || config.ServerRole == ConfigHelper.SvrRoleType.SlaveSvr) { //Master,Slave都可以执行 this.slaveResyncToolStripMenuItem.Enabled = true; } } this.ServerStatusToolStripMenuItem.Enabled = true; this.ServePropertyToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { //悲催MONO不支持 ToolStripMenuItem t1 = this.CreateMongoDBToolStripMenuItem.Clone(); t1.Click += new EventHandler(CreateMongoDBToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.AddUserToAdminToolStripMenuItem.Clone(); t2.Click += new EventHandler(AddUserToAdminToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.RestoreMongoToolStripMenuItem.Clone(); t3.Click += new EventHandler(RestoreMongoToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t6 = this.slaveResyncToolStripMenuItem.Clone(); t6.Click += new EventHandler(slaveResyncToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t9 = this.ServePropertyToolStripMenuItem.Clone(); t9.Click += new EventHandler(ServePropertyToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t9); ToolStripMenuItem t10 = this.ServerStatusToolStripMenuItem.Clone(); t10.Click += new EventHandler(SvrStatusToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t10); } else { this.contextMenuStripMain.Items.Add(this.CreateMongoDBToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.AddUserToAdminToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ImportDataFromAccessToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RestoreMongoToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.slaveResyncToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ServePropertyToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ServerStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.SINGLE_DB_SERVER_TAG: //单数据库模式,禁止所有服务器操作 SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { //悲催MONO不支持 ToolStripMenuItem t1 = this.DisconnectToolStripMenuItem.Clone(); t1.Click += new EventHandler(DisconnectToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.ServerStatusToolStripMenuItem.Clone(); t2.Click += new EventHandler(SvrStatusToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); } else { this.contextMenuStripMain.Items.Add(this.DisconnectToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ServerStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected Server[Single Database]:" + SystemManager.SelectTagData; break; case MongoDBHelper.DATABASE_TAG: case MongoDBHelper.SINGLE_DATABASE_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected DataBase:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_DataBase) + ":" + SystemManager.SelectTagData; } //解禁 删除数据库 创建数据集 if (!MongoDBHelper.IsSystemDataBase(SystemManager.GetCurrentDataBase())) { //系统库不允许修改 if (!config.IsReadOnly) { this.DelMongoDBToolStripMenuItem.Enabled = true; this.CreateMongoCollectionToolStripMenuItem.Enabled = true; this.AddUserToolStripMenuItem.Enabled = true; this.InitGFSToolStripMenuItem.Enabled = true; ///If a Slave server can repair database @ Master-Slave is not sure ?? this.RepairDBToolStripMenuItem.Enabled = true; } this.evalJSToolStripMenuItem.Enabled = true; this.ConvertSqlToolStripMenuItem.Enabled = true; } //备份数据库 this.DumpDatabaseToolStripMenuItem.Enabled = true; this.ProfillingLevelToolStripMenuItem.Enabled = true; if (strNodeType == MongoDBHelper.SINGLE_DATABASE_TAG) { this.DelMongoDBToolStripMenuItem.Enabled = false; } this.DBStatusToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { //悲催MONO不支持 ToolStripMenuItem t1 = this.DelMongoDBToolStripMenuItem.Clone(); t1.Click += new EventHandler(DelMongoDBToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.CreateMongoCollectionToolStripMenuItem.Clone(); t2.Click += new EventHandler(CreateMongoCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.AddUserToolStripMenuItem.Clone(); t3.Click += new EventHandler(AddUserToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = this.evalJSToolStripMenuItem.Clone(); t4.Click += new EventHandler(evalJSToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = this.RepairDBToolStripMenuItem.Clone(); t5.Click += new EventHandler(RepairDBToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t6 = this.InitGFSToolStripMenuItem.Clone(); t6.Click += new EventHandler(InitGFSToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t7 = this.DumpDatabaseToolStripMenuItem.Clone(); t7.Click += new EventHandler(DumpDatabaseToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t7); ToolStripMenuItem t8 = this.RestoreMongoToolStripMenuItem.Clone(); t8.Click += new EventHandler(RestoreMongoToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t8); ToolStripMenuItem t9 = this.ConvertSqlToolStripMenuItem.Clone(); t9.Click += new EventHandler(ConvertSqlToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t9); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t10 = this.ProfillingLevelToolStripMenuItem.Clone(); t10.Click += new EventHandler(profillingLevelToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t10); ToolStripMenuItem t11 = this.DBStatusToolStripMenuItem.Clone(); t11.Click += new EventHandler(DBStatusToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t11); } else { this.contextMenuStripMain.Items.Add(this.DelMongoDBToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.CreateMongoCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.AddUserToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.evalJSToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RepairDBToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.InitGFSToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.DumpDatabaseToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RestoreMongoToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ConvertSqlToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); this.contextMenuStripMain.Items.Add(this.ProfillingLevelToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.DBStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.SYSTEM_COLLECTION_LIST_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); statusStripMain.Items[0].Text = "System Collection List "; break; case MongoDBHelper.COLLECTION_LIST_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); statusStripMain.Items[0].Text = "Collection List "; break; case MongoDBHelper.COLLECTION_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Collection:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Collection) + ":" + SystemManager.SelectTagData; } //解禁 删除数据集 if (!MongoDBHelper.IsSystemCollection(SystemManager.GetCurrentCollection())) { //系统数据库无法删除!! if (!config.IsReadOnly) { this.DelMongoCollectionToolStripMenuItem.Enabled = true; this.RenameCollectionToolStripMenuItem.Enabled = true; } } if (!config.IsReadOnly) { this.ImportCollectionToolStripMenuItem.Enabled = true; this.CompactToolStripMenuItem.Enabled = true; } if (!MongoDBHelper.IsSystemCollection(SystemManager.GetCurrentCollection()) && !config.IsReadOnly) { this.IndexManageToolStripMenuItem.Enabled = true; this.ReIndexToolStripMenuItem.Enabled = true; } this.DumpCollectionToolStripMenuItem.Enabled = true; this.ExportCollectionToolStripMenuItem.Enabled = true; this.AggregationToolStripMenuItem.Enabled = true; this.viewDataToolStripMenuItem.Enabled = true; this.CollectionStatusToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { //悲催MONO不支持 ToolStripMenuItem t1 = this.DelMongoCollectionToolStripMenuItem.Clone(); t1.Click += new EventHandler(DelMongoCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t2 = this.RenameCollectionToolStripMenuItem.Clone(); t2.Click += new EventHandler(RenameCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t2); ToolStripMenuItem t3 = this.DumpCollectionToolStripMenuItem.Clone(); t3.Click += new EventHandler(DumpCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t3); ToolStripMenuItem t4 = this.RestoreMongoToolStripMenuItem.Clone(); t4.Click += new EventHandler(RestoreMongoToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t4); ToolStripMenuItem t5 = this.ImportCollectionToolStripMenuItem.Clone(); t5.Click += new EventHandler(ImportCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t5); ToolStripMenuItem t6 = this.ExportCollectionToolStripMenuItem.Clone(); t6.Click += new EventHandler(ExportCollectionToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t6); ToolStripMenuItem t7 = this.CompactToolStripMenuItem.Clone(); t7.Click += new EventHandler(CompactToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t7); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t8 = this.viewDataToolStripMenuItem.Clone(); t8.Click += new EventHandler( (x, y) => { ViewDataObj(); } ); this.contextMenuStripMain.Items.Add(t8); ToolStripMenuItem AggregationMenu = this.AggregationToolStripMenuItem.Clone(); ToolStripMenuItem t9 = this.countToolStripMenuItem.Clone(); t9.Click += new EventHandler(countToolStripMenuItem_Click); AggregationMenu.DropDownItems.Add(t9); ToolStripMenuItem t10 = this.distinctToolStripMenuItem.Clone(); t10.Click += new EventHandler(distinctToolStripMenuItem_Click); AggregationMenu.DropDownItems.Add(t10); ToolStripMenuItem t11 = this.groupToolStripMenuItem.Clone(); t11.Click += new EventHandler(groupToolStripMenuItem_Click); AggregationMenu.DropDownItems.Add(t11); ToolStripMenuItem t12 = this.mapReduceToolStripMenuItem.Clone(); t12.Click += new EventHandler(mapReduceToolStripMenuItem_Click); AggregationMenu.DropDownItems.Add(t12); this.contextMenuStripMain.Items.Add(AggregationMenu); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t13 = this.IndexManageToolStripMenuItem.Clone(); t13.Click += new EventHandler(IndexManageToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t13); ToolStripMenuItem t14 = this.ReIndexToolStripMenuItem.Clone(); t14.Click += new EventHandler(ReIndexToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t14); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); ToolStripMenuItem t15 = this.CollectionStatusToolStripMenuItem.Clone(); t15.Click += new EventHandler(CollectionStatusToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t15); } else { this.contextMenuStripMain.Items.Add(this.DelMongoCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RenameCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.DumpCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.RestoreMongoToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ImportCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ExportCollectionToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.CompactToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); this.contextMenuStripMain.Items.Add(this.viewDataToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.AggregationToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); this.contextMenuStripMain.Items.Add(this.IndexManageToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.ReIndexToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(new ToolStripSeparator()); this.contextMenuStripMain.Items.Add(this.CollectionStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.INDEX_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Index:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Index) + ":" + SystemManager.SelectTagData; } break; case MongoDBHelper.INDEXES_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected Index:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_Indexes) + ":" + SystemManager.SelectTagData; } break; case MongoDBHelper.USER_LIST_TAG: if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected UserList:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_UserList) + ":" + SystemManager.SelectTagData; } this.viewDataToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { ToolStripMenuItem t8 = this.viewDataToolStripMenuItem.Clone(); t8.Click += new EventHandler( (x, y) => { ViewDataObj(); } ); this.contextMenuStripMain.Items.Add(t8); } else { this.contextMenuStripMain.Items.Add(this.viewDataToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.GRID_FILE_SYSTEM_TAG: //GridFileSystem SystemManager.SelectObjectTag = e.Node.Tag.ToString(); if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected GFS:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.mStringResource.GetText(StringResource.TextType.Selected_GFS) + ":" + SystemManager.SelectTagData; } this.viewDataToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { ToolStripMenuItem t8 = this.viewDataToolStripMenuItem.Clone(); t8.Click += new EventHandler( (x, y) => { ViewDataObj(); } ); this.contextMenuStripMain.Items.Add(t8); } else { this.contextMenuStripMain.Items.Add(this.viewDataToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; case MongoDBHelper.JAVASCRIPT_TAG: SystemManager.SelectObjectTag = e.Node.Tag.ToString(); this.viewDataToolStripMenuItem.Enabled = true; if (!config.IsReadOnly) { creatJavaScriptToolStripMenuItem.Enabled = true; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { ToolStripMenuItem t8 = this.creatJavaScriptToolStripMenuItem.Clone(); t8.Click += new EventHandler(creatJavaScriptToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t8); } else { this.contextMenuStripMain.Items.Add(this.creatJavaScriptToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } statusStripMain.Items[0].Text = "Selected collection Javascript"; break; case MongoDBHelper.JAVASCRIPT_DOC_TAG: statusStripMain.Items[0].Text = "Selected JavaScript:" + SystemManager.SelectTagData; this.viewDataToolStripMenuItem.Enabled = true; this.dropJavascriptToolStripMenuItem.Enabled = true; if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MONO_MODE) { ToolStripMenuItem t1 = this.viewDataToolStripMenuItem.Clone(); t1.Click += new EventHandler( (x, y) => { ViewDataObj(); } ); this.contextMenuStripMain.Items.Add(t1); ToolStripMenuItem t8 = this.dropJavascriptToolStripMenuItem.Clone(); t8.Click += new EventHandler(dropJavascriptToolStripMenuItem_Click); this.contextMenuStripMain.Items.Add(t8); } else { this.contextMenuStripMain.Items.Add(this.viewDataToolStripMenuItem.Clone()); this.contextMenuStripMain.Items.Add(this.dropJavascriptToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = this.contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } break; default: statusStripMain.Items[0].Text = "Selected Object:" + e.Node.Text; break; } } else { statusStripMain.Items[0].Text = "Selected Object:" + e.Node.Text; } //重新Reset工具栏 SetToolBarEnabled(); }
/// <summary> /// 将Mongodb的服务器在树形控件中展示 /// </summary> /// <param name="trvMongoDB"></param> public static void FillConnectionToTreeView(TreeView trvMongoDB) { trvMongoDB.Nodes.Clear(); foreach (String mongoConnKey in _mongoConnSvrLst.Keys) { MongoServer mongoConn = _mongoConnSvrLst[mongoConnKey]; TreeNode ConnectionNode = new TreeNode(); try { //ReplSetName只能使用在虚拟的Replset服务器,Sharding体系等无效。虽然一个Sharding可以看做一个ReplSet ConfigHelper.MongoConnectionConfig config = SystemManager.ConfigHelperInstance.ConnectionList[mongoConnKey]; ConnectionNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Connection; ConnectionNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Connection; //ReplSet服务器需要Connect才能连接。可能因为这个是虚拟的服务器,没有Mongod实体。 //不过现在改为全部显示的打开连接 mongoConn.Connect(); ///mongoSvr.ReplicaSetName只有在连接后才有效,但是也可以使用Config.ReplsetName ConnectionNode.Text = mongoConnKey; ConnectionNode.Nodes.Add(GetInstanceNode(mongoConnKey, config, mongoConn, null, mongoConn)); if (mongoConn.ReplicaSetName != null) { ConnectionNode.Tag = CONNECTION_REPLSET_TAG + ":" + config.ConnectionName; TreeNode ServerListNode = new TreeNode("Servers"); ServerListNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers; ServerListNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers; foreach (MongoServerInstance ServerInstace in mongoConn.Instances) { ServerListNode.Nodes.Add(GetInstanceNode(mongoConnKey, config, mongoConn, ServerInstace, null)); } ConnectionNode.Nodes.Add(ServerListNode); config.ServerRole = ConfigHelper.SvrRoleType.ReplsetSvr; } else { BsonDocument ServerStatusDoc = ExecuteMongoSvrCommand(serverStatus_Command, mongoConn).Response; if (ServerStatusDoc.GetElement("process").Value == "mongos") { config.ServerRole = ConfigHelper.SvrRoleType.ShardSvr; ConnectionNode.Tag = CONNECTION_CLUSTER_TAG + ":" + config.ConnectionName; TreeNode ShardListNode = new TreeNode("Shards"); ShardListNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers; ShardListNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers; foreach (var lst in GetShardInfo(mongoConn, "host")) { TreeNode ShardNode = new TreeNode(); ShardNode.Text = lst.Key; ShardNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers; ShardNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Servers; String strHostList = lst.Value.ToString(); String[] strAddress = strHostList.Split("/".ToCharArray()); String strAddresslst; if (strAddress.Length == 2) { //#1 replset/host:port,host:port ShardNode.Text += "[Replset:" + strAddress[0] + "]"; strAddresslst = strAddress[1]; } else { //#2 host:port,host:port strAddresslst = strHostList; } foreach (String item in strAddresslst.Split(",".ToCharArray())) { MongoServerSettings tinySetting = new MongoServerSettings(); tinySetting.ConnectionMode = ConnectionMode.Direct; tinySetting.ReplicaSetName = strAddress[0]; MongoServerAddress tinyAddr; if (item.Split(":".ToCharArray()).Length == 2) { tinyAddr = new MongoServerAddress(item.Split(":".ToCharArray())[0], Convert.ToInt32(item.Split(":".ToCharArray())[1])); } else { tinyAddr = new MongoServerAddress(item.Split(":".ToCharArray())[0]); } tinySetting.Server = tinyAddr; MongoServer tiny = MongoServer.Create(tinySetting); ShardNode.Nodes.Add(GetInstanceNode(mongoConnKey, config, mongoConn, tiny.Instance, null)); } ShardListNode.Nodes.Add(ShardNode); } ConnectionNode.Nodes.Add(ShardListNode); } else { ///Master - Slave 的判断 BsonElement replElement; ServerStatusDoc.TryGetElement("repl", out replElement); if (replElement == null) { config.ServerRole = ConfigHelper.SvrRoleType.DataSvr; } else { if (replElement.Value.AsBsonDocument.GetElement("ismaster").Value == BsonBoolean.True) { config.ServerRole = ConfigHelper.SvrRoleType.MasterSvr; } else { //ismaster 的值不一定是True和False... config.ServerRole = ConfigHelper.SvrRoleType.SlaveSvr; } } ConnectionNode.Tag = CONNECTION_TAG + ":" + config.ConnectionName; } } config.Health = true; SystemManager.ConfigHelperInstance.ConnectionList[mongoConnKey] = config; switch (config.ServerRole) { case ConfigHelper.SvrRoleType.DataSvr: ConnectionNode.Text = "[Data] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.ShardSvr: ConnectionNode.Text = "[Cluster] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.ReplsetSvr: ConnectionNode.Text = "[Replset] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.MasterSvr: ConnectionNode.Text = "[Master] " + ConnectionNode.Text; break; case ConfigHelper.SvrRoleType.SlaveSvr: ConnectionNode.Text = "[Slave] " + ConnectionNode.Text; break; default: break; } trvMongoDB.Nodes.Add(ConnectionNode); } catch (MongoAuthenticationException ex) { //需要验证的数据服务器,没有Admin权限无法获得数据库列表 if (!SystemManager.IsUseDefaultLanguage) { ConnectionNode.Text += "[" + SystemManager.mStringResource.GetText(StringResource.TextType.Exception_AuthenticationException) + "]"; MyMessageBox.ShowMessage(SystemManager.mStringResource.GetText(StringResource.TextType.Exception_AuthenticationException), SystemManager.mStringResource.GetText(StringResource.TextType.Exception_AuthenticationException_Note), ex.ToString(), true); } else { ConnectionNode.Text += "[MongoAuthenticationException]"; MyMessageBox.ShowMessage("MongoAuthenticationException:", "Please check UserName and Password", ex.ToString(), true); } ConnectionNode.Tag = CONNECTION_EXCEPTION_TAG + ":" + mongoConnKey; trvMongoDB.Nodes.Add(ConnectionNode); } catch (Exception ex) { //暂时不处理任何异常,简单跳过 //无法连接的理由: //1.服务器没有启动 //2.认证模式不正确 if (!SystemManager.IsUseDefaultLanguage) { ConnectionNode.Text += "[" + SystemManager.mStringResource.GetText(StringResource.TextType.Exception_NotConnected) + "]"; MyMessageBox.ShowMessage(SystemManager.mStringResource.GetText(StringResource.TextType.Exception_NotConnected), SystemManager.mStringResource.GetText(StringResource.TextType.Exception_NotConnected_Note), ex.ToString(), true); } else { ConnectionNode.Text += "[Exception]"; MyMessageBox.ShowMessage("Exception", "Mongo Server may not Startup or Auth Mode is not correct", ex.ToString(), true); } ConnectionNode.Tag = CONNECTION_EXCEPTION_TAG + ":" + mongoConnKey; trvMongoDB.Nodes.Add(ConnectionNode); } } }