|
|
|
|
using Admin.Core.Common;
|
|
|
|
|
using Admin.Core.Extensions;
|
|
|
|
|
using Admin.Core.Model;
|
|
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Admin.Core.Api
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 缓存监控
|
|
|
|
|
/// </summary>
|
|
|
|
|
[Route("api/[controller]/[action]")]
|
|
|
|
|
[ApiController]
|
|
|
|
|
[Authorize(Permissions.Name)]
|
|
|
|
|
public class CacheController : BaseApiController
|
|
|
|
|
{
|
|
|
|
|
readonly IRedisBasketRepository _redisBasketRepository;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 构造函数
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="redisBasketRepository"></param>
|
|
|
|
|
public CacheController(IRedisBasketRepository redisBasketRepository)
|
|
|
|
|
{
|
|
|
|
|
_redisBasketRepository = redisBasketRepository;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取缓存详情
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public MessageModel<PageModel<RedisKeyView>> GetList([FromBody] PageQuery<RedisKeyView> pageQuery)
|
|
|
|
|
{
|
|
|
|
|
var redisKeys = _redisBasketRepository.GetAllKes();
|
|
|
|
|
|
|
|
|
|
if (pageQuery.Query.Server.IsNotEmptyOrNull())
|
|
|
|
|
{
|
|
|
|
|
redisKeys = redisKeys.FindAll(x => x.Server.Contains(pageQuery.Query.Server));
|
|
|
|
|
}
|
|
|
|
|
if (pageQuery.Query.Point.IsNotEmptyOrNull())
|
|
|
|
|
{
|
|
|
|
|
redisKeys = redisKeys.FindAll(x => x.Point.Contains(pageQuery.Query.Point));
|
|
|
|
|
}
|
|
|
|
|
if (pageQuery.Query.Key.IsNotEmptyOrNull())
|
|
|
|
|
{
|
|
|
|
|
redisKeys = redisKeys.FindAll(x => x.Key.Contains(pageQuery.Query.Key));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PageModel<RedisKeyView> pageModel = new PageModel<RedisKeyView>()
|
|
|
|
|
{
|
|
|
|
|
dataCount = redisKeys.Count,
|
|
|
|
|
data = redisKeys.Skip(pageQuery.PageSize * (pageQuery.Page - 1)).Take(pageQuery.PageSize).ToList()
|
|
|
|
|
};
|
|
|
|
|
return Success(pageModel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取缓存服务列表详情
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public MessageModel<List<RedisServerView>> GetServerList()
|
|
|
|
|
{
|
|
|
|
|
var redisKeys = _redisBasketRepository.GetAllKes();
|
|
|
|
|
List<RedisServerView> redisServers = new List<RedisServerView>();
|
|
|
|
|
var servers = redisKeys.Select(x => x.Server).Distinct();
|
|
|
|
|
foreach (var item in servers)
|
|
|
|
|
{
|
|
|
|
|
RedisServerView view = new RedisServerView()
|
|
|
|
|
{
|
|
|
|
|
Server = item,
|
|
|
|
|
Points = redisKeys.FindAll(x => x.Server == item).Select(m => m.Point).Distinct().ToList(),
|
|
|
|
|
};
|
|
|
|
|
List<Pointkey> pointkeys = new List<Pointkey>();
|
|
|
|
|
foreach (var point in view.Points)
|
|
|
|
|
{
|
|
|
|
|
Pointkey pointkey = new Pointkey()
|
|
|
|
|
{
|
|
|
|
|
Point = point,
|
|
|
|
|
Key = redisKeys.FindAll(x => x.Point == point).Select(m => m.Key).Distinct().ToList(),
|
|
|
|
|
};
|
|
|
|
|
pointkeys.Add(pointkey);
|
|
|
|
|
}
|
|
|
|
|
view.Pointkeys = pointkeys;
|
|
|
|
|
redisServers.Add(view);
|
|
|
|
|
}
|
|
|
|
|
return Success(redisServers);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取缓存Key列表详情
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public MessageModel<PageModel<string>> GetKeyList([FromBody] PageQuery<RedisKeyView> pageQuery)
|
|
|
|
|
{
|
|
|
|
|
var redisKeys = _redisBasketRepository.GetAllKes();
|
|
|
|
|
var keys = redisKeys.Select(x => x.Key).Distinct().ToList();
|
|
|
|
|
if (pageQuery.Query.Key.IsNotEmptyOrNull())
|
|
|
|
|
{
|
|
|
|
|
keys = keys.FindAll(x => x.Contains(pageQuery.Query.Key));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PageModel<string> pageModel = new PageModel<string>()
|
|
|
|
|
{
|
|
|
|
|
dataCount = redisKeys.Count,
|
|
|
|
|
data = keys.Skip(pageQuery.PageSize * (pageQuery.Page - 1)).Take(pageQuery.PageSize).ToList()
|
|
|
|
|
};
|
|
|
|
|
return Success(pageModel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取基础信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public MessageModel<RedisBaseView> GetBaseInfo()
|
|
|
|
|
{
|
|
|
|
|
return Success(_redisBasketRepository.GetBaseInfo());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取缓存值
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<string>> GetValue(string key)
|
|
|
|
|
{
|
|
|
|
|
return Success<string>(await _redisBasketRepository.GetValue(key));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置缓存
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<bool>> Add(string key, string value)
|
|
|
|
|
{
|
|
|
|
|
return Success(await _redisBasketRepository.SetStr(key, value));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 删除缓存
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<bool>> Del(string key)
|
|
|
|
|
{
|
|
|
|
|
return Success(await _redisBasketRepository.Remove(key));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 清除所有缓存
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<string>> DelAll()
|
|
|
|
|
{
|
|
|
|
|
await _redisBasketRepository.Clear();
|
|
|
|
|
return Success<string>("");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取节点状态
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public MessageModel<List<PointStatus>> GetPointStatus()
|
|
|
|
|
{
|
|
|
|
|
var list = _redisBasketRepository.GetPointStatus();
|
|
|
|
|
var redisKeys = _redisBasketRepository.GetAllKes();
|
|
|
|
|
list.ForEach(item =>
|
|
|
|
|
{
|
|
|
|
|
item.Server = redisKeys.Find(x => x.Point == item.Point)?.Server;
|
|
|
|
|
item.KeyN = redisKeys.FindAll(x => x.Point == item.Point).Count;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return Success(list);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|