/// <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);
        }
Esempio n. 2
0
 /// <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);
 }
Esempio n. 3
0
 /// <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;
 }
Esempio n. 4
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);
        }
Esempio n. 5
0
 /// <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);
            }
        }
Esempio n. 8
0
        /// <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());
            }
        }
Esempio n. 9
0
 /// <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);
         }
     }
 }
Esempio n. 10
0
        /// <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());
            }
        }
Esempio n. 11
0
        /// <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);
        }
Esempio n. 13
0
        /// <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);
                }
            }
        }
Esempio n. 16
0
        /// <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);
        }
Esempio n. 17
0
 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);
        }
Esempio n. 19
0
        /// <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());
        }
Esempio n. 20
0
        /// <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();
        }
Esempio n. 21
0
        /// <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);
        }
Esempio n. 22
0
        /// <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
        }
Esempio n. 23
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;
 }
Esempio n. 24
0
 /// <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;
 }
Esempio n. 25
0
        /// <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();
        }
Esempio n. 26
0
        /// <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);
                }
            }
        }