/// <summary> /// 获取实例节点 /// 这里将形成左侧的树型目录 /// </summary> /// <param name="mongoConnKey"></param> /// <param name="config">由于是结构体,必须ref</param> /// <param name="mongoConn"></param> /// <param name="mMasterServerInstace"></param> /// <param name="userList"></param> /// <returns></returns> private static TreeNode GetInstanceNode(string mongoConnKey, ref MongoConnectionConfig config, MongoClient mongoClient) { //无论如何,都改为主要服务器读优先 var svrInstanceNode = new TreeNode(); var connSvrKey = mongoConnKey + "/" + mongoConnKey; svrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.Text = "Server"; if (!string.IsNullOrEmpty(config.UserName) & (!string.IsNullOrEmpty(config.Password))) { //是否是认证模式,应该取决于服务器! config.AuthMode = true; } //获取ReadOnly config.IsReadOnly = false; if (!string.IsNullOrEmpty(config.DataBaseName)) { //单数据库模式 var mongoSingleDbNode = FillDataBaseInfoToTreeNode(config.DataBaseName, mongoConnKey + "/" + mongoConnKey, null); mongoSingleDbNode.Tag = ConstMgr.SingleDatabaseTag + ":" + connSvrKey + "/" + config.DataBaseName; mongoSingleDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoSingleDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoSingleDbNode); svrInstanceNode.Tag = ConstMgr.SingleDbServerTag + ":" + connSvrKey; } else { var setting = RuntimeMongoDbContext.CreateMongoClientSettingsByConfig(ref config); var client = new MongoClient(setting); var databaseNameList = GetConnectionInfo.GetDatabaseList(client); foreach (var strDbName in databaseNameList) { TreeNode mongoDbNode; try { var dbName = strDbName.GetElement("name").Value.ToString(); mongoDbNode = FillDataBaseInfoToTreeNode(dbName, connSvrKey, client); mongoDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoDbNode); } catch (Exception ex) { Utility.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); } } } svrInstanceNode.Tag = ConstMgr.ServerTag + ":" + mongoConnKey + "/" + mongoConnKey; return(svrInstanceNode); }
/// <summary> /// 获取实例节点 /// 这里将形成左侧的树型目录 /// </summary> /// <param name="mongoConnKey"></param> /// <param name="config">由于是结构体,必须ref</param> /// <param name="mongoConn"></param> /// <param name="mMasterServerInstace"></param> /// <param name="userList"></param> /// <returns></returns> private static TreeNode GetInstanceNode(string mongoConnKey, ref MongoConnectionConfig config, MongoClient mongoClient) { //无论如何,都改为主要服务器读优先 var svrInstanceNode = new TreeNode(); var connSvrKey = mongoConnKey + "/" + mongoConnKey; svrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.Text = "Server"; if (!string.IsNullOrEmpty(config.UserName) & !string.IsNullOrEmpty(config.Password)) { //是否是认证模式,应该取决于服务器! config.AuthMode = true; } //获取ReadOnly config.IsReadOnly = false; if (!string.IsNullOrEmpty(config.DataBaseName) && (!config.DataBaseName.Equals(ConstMgr.DatabaseNameAdmin))) { //单数据库模式 var mongoSingleDbNode = FillDataBaseInfoToTreeNode(config.DataBaseName, mongoConnKey + "/" + mongoConnKey, mongoClient); mongoSingleDbNode.Tag = ConstMgr.SingleDatabaseTag + ":" + connSvrKey + "/" + config.DataBaseName; mongoSingleDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoSingleDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoSingleDbNode); svrInstanceNode.Tag = ConstMgr.SingleDbServerTag + ":" + connSvrKey; } else { var setting = RuntimeMongoDbContext.CreateMongoClientSettingsByConfig(ref config); var client = new MongoClient(setting); //这里MongoServerInstanceType和SvrRoleType的概念有些重叠 client.GetServer().Connect(); if (!string.IsNullOrEmpty(client.GetServer().ReplicaSetName)) { //如果是副本的话Instance则无效,Instance(s)有效 config.ServerRole = MongoConnectionConfig.SvrRoleType.ReplsetSvr; } else { if (client.GetServer().Instance.InstanceType == MongoServerInstanceType.ShardRouter) { //无法获得数据库列表 config.ServerRole = MongoConnectionConfig.SvrRoleType.ShardSvr; } } var databaseNameList = ConnectionInfo.GetDatabaseInfoList(client); foreach (var DbPropertyDoc in databaseNameList) { TreeNode mongoDbNode; try { var dbName = DbPropertyDoc.GetElement("name").Value.ToString(); mongoDbNode = FillDataBaseInfoToTreeNode(dbName, connSvrKey, client); mongoDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoDbNode); } catch (Exception) { //Utility.ExceptionDeal(ex, strDbName + "Exception", strDbName + "Exception"); mongoDbNode = new TreeNode(DbPropertyDoc.GetElement("name").Value.ToString() + "(Exception)") { ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database, SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database }; svrInstanceNode.Nodes.Add(mongoDbNode); } } } svrInstanceNode.Tag = ConstMgr.ServerTag + ":" + mongoConnKey + "/" + mongoConnKey; return(svrInstanceNode); }