public IObservable <RedisClient> Init( RedisServerInfo serverInfo) { return(Observable.Return(Unit.Default) .SelectMany(unit => _semaphore.WaitAsync() .ToObservable() .Select(_ => serverInfo)) .Select(_ => { var obj = _clients.GetOrAdd( serverInfo.Id, id => { try { return Connect(serverInfo.EndPoint); } catch (Exception exception) { return exception; } }); if (obj is Exception e) { throw e; } return (RedisClient)obj; }) .Finally(() => _semaphore.Release())); }
public IObservable <RedisClient> Release( RedisServerInfo serverInfo) { return(Observable.Return(Unit.Default) .SelectMany(unit => _semaphore.WaitAsync() .ToObservable() .Select(_ => serverInfo)) .Select(_ => { if (_clients.TryRemove(serverInfo.Id, out var obj)) { if (obj is Exception e) { throw e; } var client = (RedisClient)obj; client.Dispose(); return client; } return null; }) .Finally(() => _semaphore.Release())); }
/// <summary> /// GetInfo /// </summary> /// <param name="name"></param> /// <returns></returns> public static JsonResult <RedisServerInfo> GetInfo(string name) { try { RedisServerInfo redisServerInfo = new RedisServerInfo(); redisServerInfo.Cpu = CurrentRedisClient.GetCpu(name).ToString(); redisServerInfo.Memory = CurrentRedisClient.GetUsedMem(name).ToString(); redisServerInfo.Cmds = CurrentRedisClient.GetOpsCmd(name).ToString(); redisServerInfo.Input = CurrentRedisClient.GetInput(name).ToString(); redisServerInfo.Output = CurrentRedisClient.GetOutput(name).ToString(); return(new JsonResult <RedisServerInfo>() { Code = 1, Data = redisServerInfo, Message = "OK" }); } catch (Exception ex) { LogHelper.Error($"RedisController.GetInfo name:{name}", ex); return(new JsonResult <RedisServerInfo>() { Code = 2, Message = ex.Message }); } }
public OpenTabIntent( RedisServerInfo serverInfo, string commandText, int?index = null) { ServerInfo = serverInfo; Index = index; CommandText = commandText; }
public Selected( RedisConnectionInfo connectionInfo, RedisServerInfo serverInfo, RedisDatabaseInfo databaseInfo) { ConnectionInfo = connectionInfo; ServerInfo = serverInfo; DatabaseInfo = databaseInfo; }
private RedisClient GetClient( RedisServerInfo serverInfo) { if (_clients.TryGetValue(serverInfo.Id, out var obj)) { if (obj is Exception e) { throw e; } return((RedisClient)obj); } throw new Exception("No available client for the target"); }
private ServerItemModel CreateServerItem( RedisServerInfo serverInfo) { string address; if (serverInfo.EndPoint is DnsEndPoint dns) { address = $"{dns.Host}:{dns.Port}"; } else { address = serverInfo.EndPoint.ToString(); } return(new ServerItemModel { Address = address, ServerInfo = serverInfo }); }
public ActivateTargetIntent( RedisServerInfo serverInfo) { ServerInfo = serverInfo; }