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}"); }
/// <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; }
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); } }
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 }); }
/// <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); }
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); } }
/// <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); }
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); }
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); }
/// <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); } }
/// <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); }
/// <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 }); }
/// <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); }