1
0
mirror of https://github.com/ncblakely/GiantsTools synced 2024-11-22 06:05:38 +01:00

Add delete API

This commit is contained in:
Nick Blakely 2020-08-09 22:11:10 -07:00
parent 16a39af2f6
commit 55dba6ee11
6 changed files with 58 additions and 9 deletions

View File

@ -1,13 +1,12 @@
namespace Giants.Services namespace Giants.Services
{ {
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
public interface IServerRegistryService public interface IServerRegistryService
{ {
Task DeleteServer(string ipAddress);
Task<IEnumerable<ServerInfo>> GetAllServers(); Task<IEnumerable<ServerInfo>> GetAllServers();
Task AddServer(ServerInfo server); Task AddServer(ServerInfo server);

View File

@ -85,6 +85,18 @@
return serverInfo.Values; return serverInfo.Values;
} }
public async Task DeleteServer(string ipAddress)
{
ArgumentUtility.CheckStringForNullOrEmpty(ipAddress, nameof(ipAddress));
ServerInfo serverInfo = await this.registryStore.GetServerInfo(ipAddress);
if (serverInfo != null)
{
await this.registryStore.DeleteServer(serverInfo.id);
}
}
private async Task<ConcurrentDictionary<string, ServerInfo>> PopulateCache(ICacheEntry entry) private async Task<ConcurrentDictionary<string, ServerInfo>> PopulateCache(ICacheEntry entry)
{ {
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1); entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1);

View File

@ -58,6 +58,11 @@
partitionKey: new PartitionKey(serverInfo.DocumentType)); partitionKey: new PartitionKey(serverInfo.DocumentType));
} }
public async Task DeleteServer(string id, string partitionKey = null)
{
await this.client.DeleteItem<ServerInfo>(id, partitionKey);
}
public async Task DeleteServers(IEnumerable<string> ids, string partitionKey = null) public async Task DeleteServers(IEnumerable<string> ids, string partitionKey = null)
{ {
ArgumentUtility.CheckEnumerableForNullOrEmpty(ids, nameof(ids)); ArgumentUtility.CheckEnumerableForNullOrEmpty(ids, nameof(ids));

View File

@ -9,6 +9,12 @@
{ {
Task Initialize(); Task Initialize();
Task DeleteServer(string id, string partitionKey = null);
Task DeleteServers(IEnumerable<string> ids, string partitionKey = null);
Task<ServerInfo> GetServerInfo(string ipAddress);
Task<IEnumerable<ServerInfo>> GetServerInfos(Expression<Func<ServerInfo, bool>> whereExpression = null, string partitionKey = null); Task<IEnumerable<ServerInfo>> GetServerInfos(Expression<Func<ServerInfo, bool>> whereExpression = null, string partitionKey = null);
Task<IEnumerable<TSelect>> GetServerInfos<TSelect>( Task<IEnumerable<TSelect>> GetServerInfos<TSelect>(
@ -16,10 +22,6 @@
Expression<Func<ServerInfo, bool>> whereExpression = null, Expression<Func<ServerInfo, bool>> whereExpression = null,
string partitionKey = null); string partitionKey = null);
Task<ServerInfo> GetServerInfo(string ipAddress);
Task UpsertServerInfo(ServerInfo serverInfo); Task UpsertServerInfo(ServerInfo serverInfo);
Task DeleteServers(IEnumerable<string> ids, string partitionKey = null);
} }
} }

View File

@ -38,12 +38,26 @@
public Task<IEnumerable<ServerInfo>> GetServerInfos(Expression<Func<ServerInfo, bool>> whereExpression = null, string partitionKey = null) public Task<IEnumerable<ServerInfo>> GetServerInfos(Expression<Func<ServerInfo, bool>> whereExpression = null, string partitionKey = null)
{ {
throw new NotImplementedException(); IQueryable<ServerInfo> serverInfoQuery = this.servers.Values.AsQueryable();
if (whereExpression != null)
{
serverInfoQuery = serverInfoQuery.Where(whereExpression);
}
return Task.FromResult(serverInfoQuery.AsEnumerable());
} }
public Task<IEnumerable<TSelect>> GetServerInfos<TSelect>(Expression<Func<ServerInfo, TSelect>> selectExpression, Expression<Func<ServerInfo, bool>> whereExpression = null, string partitionKey = null) public Task<IEnumerable<TSelect>> GetServerInfos<TSelect>(Expression<Func<ServerInfo, TSelect>> selectExpression, Expression<Func<ServerInfo, bool>> whereExpression = null, string partitionKey = null)
{ {
throw new NotImplementedException(); IQueryable<ServerInfo> serverInfoQuery = this.servers.Values.AsQueryable();
if (whereExpression != null)
{
serverInfoQuery = serverInfoQuery.Where(whereExpression);
}
return Task.FromResult(serverInfoQuery.Select(selectExpression).AsEnumerable());
} }
public Task DeleteServers(IEnumerable<string> ids, string partitionKey = null) public Task DeleteServers(IEnumerable<string> ids, string partitionKey = null)
@ -55,5 +69,12 @@
return Task.CompletedTask; return Task.CompletedTask;
} }
public Task DeleteServer(string id, string partitionKey = null)
{
this.servers.TryRemove(id, out ServerInfo _);
return Task.CompletedTask;
}
} }
} }

View File

@ -33,6 +33,16 @@ namespace Giants.Web.Controllers
this.serverRegistryService = serverRegistryService; this.serverRegistryService = serverRegistryService;
} }
[HttpDelete]
public async Task DeleteServer()
{
string requestIpAddress = this.GetRequestIpAddress();
this.logger.LogInformation("Deleting server from {IPAddress}", requestIpAddress);
await this.serverRegistryService.DeleteServer(requestIpAddress);
}
[HttpGet] [HttpGet]
public async Task<IEnumerable<DataContract.ServerInfoWithHostAddress>> GetServers() public async Task<IEnumerable<DataContract.ServerInfoWithHostAddress>> GetServers()
{ {