private void LogInternal(ApplicationLevel applicationLevel, LogLevel level, string message)
        {
            Color color;

            switch (level)
            {
            case LogLevel.Information:
                color = Color.FromArgb(0x20, 0xC2, 0x0E);
                break;

            case LogLevel.Warning:
                color = Color.Orange;
                break;

            case LogLevel.Error:
                color = Color.Red;
                break;

            case LogLevel.Fatal:
                color = Color.DarkRed;
                break;

            default:
                color = Color.Wheat;
                break;
            }

            _richTextBox.SelectionColor = color;
            _richTextBox.AppendText($"[{applicationLevel}][{level}] {message}{Environment.NewLine}");
        }
示例#2
0
 /// <summary>
 ///     根据当前负载器规则获取一个通信信道
 /// </summary>
 /// <param name="target">标示网络终点接的协议簇组合</param>
 /// <param name="level">KAE应用等级</param>
 /// <param name="protocolStack">协议栈</param>
 /// <param name="errMsg">错误信息</param>
 /// <param name="selectedRingNode">已选中的一致性HASH圆环节点</param>
 /// <returns>如果指定条件的通信信道不存在,则会创建它并返回</returns>
 /// <exception cref="ArgumentNullException">参数不能为空</exception>
 public IServerConnectionAgent <TMessage> GetChannel(Protocols target, ApplicationLevel level, IProtocolStack protocolStack, out string errMsg, out KAERingNode selectedRingNode)
 {
     lock (_lockObj)
     {
         IDictionary <ApplicationLevel, IDictionary <ProtocolTypes, KetamaRing> > firstLevel;
         if (_addresses.TryGetValue(target, out firstLevel))
         {
             IDictionary <ProtocolTypes, KetamaRing> secondLevel;
             if (firstLevel.TryGetValue(level, out secondLevel))
             {
                 KetamaRing ring;
                 if (secondLevel.TryGetValue(_protocolType, out ring))
                 {
                     if (ring == null)
                     {
                         errMsg           = string.Format("#Sadly, We have no more network information about what you gave of protocol: {0}-{1}-{2}, Maybe it was been removed or there wasn't any available network resources.", target.ProtocolId, target.ServiceId, target.DetailsId);
                         selectedRingNode = null;
                         return(null);
                     }
                     KAERingNode node = ring.GetWorkerNode();
                     IServerConnectionAgent <TMessage> agent = _connectionPool.GetChannel(node.EndPoint, node.RawAddress, protocolStack, _transactionManager);
                     errMsg           = (agent != null ? string.Empty : "#Sadly, We cannot connect to remote endpoint: " + node.RawAddress);
                     selectedRingNode = node;
                     return(agent);
                 }
             }
         }
         errMsg           = string.Format("#Couldn't find any remoting address which it can access it. #Protocol: {0}, #Level: {1}", target, level);
         selectedRingNode = null;
         return(null);
     }
 }
 /// <summary>
 ///     远程目标可访问资源
 /// </summary>
 /// <param name="client">ZooKeeper客户端实例</param>
 /// <param name="path">所需要关注的远程ZooKeeper路径</param>
 /// <param name="level">应用等级</param>
 /// <param name="protocol">通信协议</param>
 /// <param name="protocolTypes">协议类型</param>
 public ProtocolResource(ZooKeeper client, string path, Protocols protocol, ProtocolTypes protocolTypes, ApplicationLevel level)
 {
     _client        = client;
     _path          = path;
     _protocol      = protocol;
     _protocolTypes = protocolTypes;
     _level         = level;
 }
示例#4
0
        public ConcurrentLogger(ApplicationLevel applicationLevel, ILogOutput output)
        {
            ContractAssertions.IsNotNull(output, nameof(output));

            _output           = output;
            _applicationLevel = applicationLevel;

            _enqueueMessage = false;
        }
 public void Log(ApplicationLevel applicationLevel, LogLevel level, string message)
 {
     if (_richTextBox.InvokeRequired)
     {
         _richTextBox.Invoke(new SafeCallDelegate(LogInternal), applicationLevel, level, message);
     }
     else
     {
         LogInternal(applicationLevel, level, message);
     }
 }
示例#6
0
        public void Update(UpdateApplicationResourceCommand command)
        {
            command.Validate(true);
            this.Name             = command.Name;
            this.ApplicationLevel = command.ApplicationLevel;

            this.AddEvent(new ApplicationResourceUpdatedEvent(this)
            {
                ApplicationLevel = this.ApplicationLevel,
                Name             = this.Name
            });
        }
示例#7
0
        /// <summary>
        ///     将一个业务的通信协议与远程可访问地址注册到服务器上
        /// </summary>
        /// <param name="identity">业务协议编号</param>
        /// <param name="protocolTypes">通信协议类型</param>
        /// <param name="level">KAE应用等级</param>
        /// <param name="resourceUri">远程可访问的资源地址</param>
        /// <param name="kppUniqueId">KPP全局唯一编号</param>
        public void Register(MessageIdentity identity, ProtocolTypes protocolTypes, ApplicationLevel level, Uri resourceUri, Guid kppUniqueId)
        {
            if (resourceUri == null)
            {
                throw new ArgumentNullException(nameof(resourceUri));
            }
            string path = string.Format("{0}/{1}-{2}-{3}-{4}", _protocolPath, identity.ProtocolId, identity.ServiceId, identity.DetailsId, level);

            AddPath(path, CreateMode.PERSISTENT);
            path += string.Format("/{0};{1}", resourceUri.Address, kppUniqueId);
            AddPath(path, CreateMode.PERSISTENT);
        }
示例#8
0
        public void Log(ApplicationLevel applicationLevel, LogLevel level, string message)
        {
            var selectedColor     = SelectColor(level);
            var createdLogMessage = CreateLogMessage(applicationLevel, level, message);

            if (_richTextBox.InvokeRequired)
            {
                _richTextBox.Invoke(new SafeCallDelegate(LogInternal), selectedColor, createdLogMessage);
            }
            else
            {
                LogInternal(selectedColor, createdLogMessage);
            }
        }
示例#9
0
        /// <summary>
        ///    更新网络缓存信息
        /// </summary>
        /// <param name="level">应用等级</param>
        /// <param name="cache">远程目标终结点信息列表</param>
        /// <param name="protocol">通信协议</param>
        public void UpdateCache(Protocols protocol, ApplicationLevel level, IList <string> cache)
        {
            //prepares kathma ring.
            KetamaRing ring = ((cache == null || cache.Count == 0) ? null : new KetamaRing(cache.Select(v => new KAERingNode(v)).ToList()));

            lock (_lockObj)
            {
                IDictionary <ProtocolTypes, KetamaRing> thirdDic;
                IDictionary <ApplicationLevel, IDictionary <ProtocolTypes, KetamaRing> > tempDic;
                if (!_addresses.TryGetValue(protocol, out tempDic))
                {
                    _addresses.Add(protocol, (tempDic = new Dictionary <ApplicationLevel, IDictionary <ProtocolTypes, KetamaRing> >()));
                }
                ;
                if (!tempDic.TryGetValue(level, out thirdDic))
                {
                    tempDic.Add(level, (thirdDic = new Dictionary <ProtocolTypes, KetamaRing>()));
                }
                thirdDic[_protocolType] = ring;
            }
        }
        /// <summary>
        ///     创建一个新的网络事务
        /// </summary>
        /// <param name="appName">目标APP的名称</param>
        /// <param name="target">标示网络终点接的协议簇组合</param>
        /// <param name="maximumRspTime">等待当前网络事务RSP消息的最大时间</param>
        /// <param name="resourceUri">KAE资源URI</param>
        /// <param name="balanceFlag">负载标识</param>
        /// <param name="communicationType">通信方式</param>
        /// <param name="version">
        ///     目标APP的版本
        ///     <para>* 默认为: latest</para>
        /// </param>
        /// <param name="protocolSelf">
        ///     使用的协议栈的角色
        ///     <para>* 如果当前事务代理器所承载的消息协议为MetadataContainer时请忽略此参数</para>
        /// </param>
        /// <returns>返回新的事务</returns>
        public IMessageTransaction <TMessage> CreateTransaction(string appName, Protocols target, TimeSpan maximumRspTime, long balanceFlag, string version = "latest", KAEResourceUri resourceUri = null, NetworkCommunicationTypes communicationType = NetworkCommunicationTypes.Dulplex, string protocolSelf = null)
        {
            if (string.IsNullOrEmpty(appName))
            {
                throw new ArgumentNullException("appName");
            }
            string           errMsg;
            ApplicationLevel level = (resourceUri == null ? ApplicationLevel.Stable : _callback(resourceUri));
            KAERingNode      ringNode;
            IServerConnectionAgent <TMessage> agent = _cluster.GetChannel(target, level, _container.GetDefaultProtocolStack(_cluster.ProtocolType), balanceFlag, out errMsg, out ringNode);

            if (agent == null)
            {
                lock (_lockObj)
                {
                    //try to obtains agent object again for ensuring that the newest remoting addresses can be appliy in the multiple threading env.
                    agent = _cluster.GetChannel(target, level, _container.GetDefaultProtocolStack(_cluster.ProtocolType), balanceFlag, out errMsg, out ringNode);
                    if (agent == null && !GetMissedRemoteAddresses(appName, version, target, level))
                    {
                        return(new FailMessageTransaction <TMessage>(errMsg));
                    }
                    agent = _cluster.GetChannel(target, level, _container.GetDefaultProtocolStack(_cluster.ProtocolType), balanceFlag, out errMsg, out ringNode);
                    //check returned value again for avoiding couldnt connect to the remote address now.
                    if (agent == null)
                    {
                        return(new FailMessageTransaction <TMessage>(errMsg));
                    }
                }
            }
            MessageTransaction <TMessage> transaction = NewTransaction(new Lease(DateTime.Now.Add(maximumRspTime)), agent.GetChannel());

            transaction.SetMessageIdentity(new MessageIdentity {
                ProtocolId = (byte)target.ProtocolId, ServiceId = (byte)target.ServiceId, DetailsId = (byte)target.DetailsId
            });
            transaction.TransactionManager = _transactionManager;
            transaction.Identity           = (communicationType == NetworkCommunicationTypes.Dulplex ? IdentityHelper.Create(agent.GetChannel().LocalEndPoint, TransportChannelTypes.TCP) : IdentityHelper.CreateOneway(agent.GetChannel().LocalEndPoint, TransportChannelTypes.TCP));
            transaction.KPPUniqueId        = ringNode.KPPUniqueId;
            return(_transactionManager.Add(transaction.Identity, transaction) ? transaction : null);
        }
示例#11
0
 private string CreateLogMessage(ApplicationLevel applicationLevel, LogLevel logLevel, string message)
 {
     return($"[{applicationLevel}][{logLevel}] {message}{Environment.NewLine}");
 }
 //avoids for obtaining non-existed remote address frequently under big overloads.
 //return true when the targeted condition had reached.
 private bool CheckProtect(string appName, string version, Protocols protocol, ApplicationLevel level, ProtocolTypes protocolType)
 {
     lock (_protectiveLockObj)
     {
         string   key = string.Format("{0}-{1}-{2}_{3}_{4}_{5}_{6}", appName, version, protocol.ProtocolId, protocol.ServiceId, protocol.DetailsId, level, protocolType);
         DateTime time;
         if (!_protectiveCheckingTimeSpan.TryGetValue(key, out time))
         {
             _protectiveCheckingTimeSpan[key] = DateTime.Now;
             return(false);
         }
         if ((DateTime.Now - time) <= _protectiveTimeSpan)
         {
             return(true);
         }
         _protectiveCheckingTimeSpan[key] = DateTime.Now;
         return(false);
     }
 }
        private bool GetMissedRemoteAddresses(string appName, string version, Protocols protocol, ApplicationLevel level)
        {
            if (CheckProtect(appName, version, protocol, level, _cluster.ProtocolType))
            {
                return(false);
            }
            if (_hostProxy == null)
            {
                return(false);
            }
            IList <string> addresses = _hostProxy.GetRemoteAddresses(appName, version, _appUniqueId, protocol, _cluster.ProtocolType, level);

            if (addresses == null || addresses.Count == 0)
            {
                return(false);
            }
            _cluster.UpdateCache(protocol, level, addresses);
            return(true);
        }
示例#14
0
        public void Create_ShouldThrowDomainValidationException_WhenRoleLevelIsAccountAndNoAccountIdsProvided(ApplicationLevel level, string errorCode)
        {
            var createAppResourceCmd = ApplicationResourceCmdGenerator.CreateApplicationResourceCommand;

            createAppResourceCmd.ApplicationLevel = level;
            var appResource = ApplicationResource.Create(createAppResourceCmd);

            var addActionCmd = ApplicationResourceCmdGenerator.AddResourceActionCommand;
            var action       = appResource.AddResourceAction(addActionCmd);

            var roleCmdGen    = new RoleCmdGenerator();
            var createRoleCmd = roleCmdGen.CreateRoleCommand;

            createRoleCmd.ApplicationLevel = level;
            var role = Role.Create(createRoleCmd);
            var updateRolePermissions = roleCmdGen.UpdateRolePermissionsCommand;

            updateRolePermissions.Permissions.First().Action = action;

            role.UpdatePermissions(updateRolePermissions);

            var userCmdGen    = new UserCmdGenerator();
            var createUserCmd = userCmdGen.CreateUserCommand;

            createUserCmd.UserRoles = new[] { new UserCommandRole {
                                                  Role = role
                                              } };

            var ex = Assert.Throws <DomainValidationException>(() => User.Create(createUserCmd));

            Assert.Single(ex.ValidationErrors);
            Assert.Equal(errorCode, ex.ValidationErrors.Single().Code);
        }
示例#15
0
 /// <summary>
 ///    更新网络缓存信息
 /// </summary>
 /// <param name="level">应用等级</param>
 /// <param name="cache">远程目标终结点信息列表</param>
 /// <param name="protocol">通信协议</param>
 /// <param name="protocolTypes">协议类型</param>
 public static void UpdateCache(Protocols protocol, ProtocolTypes protocolTypes, ApplicationLevel level, List <string> cache)
 {
     if (protocolTypes == ProtocolTypes.Metadata)
     {
         _metadataCluster.UpdateCache(protocol, level, cache);
     }
     else if (protocolTypes == ProtocolTypes.Intellegence)
     {
         _clsuter.UpdateCache(protocol, level, cache);
     }
 }
示例#16
0
 /// <summary>
 ///    更新网络缓存信息
 /// </summary>
 /// <param name="level">应用等级</param>
 /// <param name="cache">远程目标终结点信息列表</param>
 /// <param name="protocol">通信协议</param>
 /// <param name="protocolTypes">协议类型</param>
 public void UpdateCache(Protocols protocol, ProtocolTypes protocolTypes, ApplicationLevel level, List <string> cache)
 {
     SystemWorker.UpdateCache(protocol, protocolTypes, level, cache);
 }
示例#17
0
        /// <summary>
        ///     根据一组参数向KAE宿主获取远程目标地址的集合
        /// </summary>
        /// <param name="appName">目标APP的名称</param>
        /// <param name="version">目标APP的版本</param>
        /// <param name="appUniqueId">索取远程目标地址的源KAE APP唯一ID</param>
        /// <param name="protocol">业务协议编号</param>
        /// <param name="level">KAE应用等级</param>
        /// <param name="protocolTypes">通信协议类型</param>
        /// <returns>返回远程目标可访问地址的集合, 如果返回null, 则证明不存在指定条件的远程目标</returns>
        public IList <string> GetRemoteAddresses(string appName, string version, Guid appUniqueId, Protocols protocol, ProtocolTypes protocolTypes, ApplicationLevel level)
        {
            string fullName = string.Format("{0}_{1}_PORT", appName, version).ToUpper();
            string iep      = Environment.GetEnvironmentVariable(fullName);

            if (string.IsNullOrEmpty(iep))
            {
                return(null);
            }
            return(new List <string> {
                iep
            });
        }
示例#18
0
        /// <summary>
        ///    根据一组参数获取相应的远程目标资源
        /// </summary>
        /// <param name="level">应用等级</param>
        /// <param name="protocol">通信协议</param>
        /// <param name="protocolTypes">协议类型</param>
        /// <returns>返回远程目标可访问资源</returns>
        public IProtocolResource GetProtocolResource(Protocols protocol, ProtocolTypes protocolTypes, ApplicationLevel level)
        {
            string            path     = string.Format("{0}/{1}-{2}-{3}-{4}-{5}", _protocolPath, protocol.ProtocolId, protocol.ServiceId, protocol.DetailsId, protocolTypes, level);
            IProtocolResource resource = new ProtocolResource(_client, path, protocol, protocolTypes, level);

            resource.ChildrenChanged += delegate(object sender, System.EventArgs args) { OnChildrenChanged(new LightSingleArgEventArgs <IProtocolResource>((IProtocolResource)sender)); };
            return(resource);
        }