Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
9407949
Created InstanceRunningDto and InstanceRunningModel
adrianLIrobotics Mar 3, 2023
eaa5b5e
Added controller for ActionRunning
adrianLIrobotics Mar 6, 2023
2844fdd
Removed unused ConnectionMultiplexer to old redis DB
Mar 6, 2023
84250d9
Replace static env variables with k8s service variables
Mar 6, 2023
9847de9
Correct remaining address; Configuration change for orchestrator
Mar 6, 2023
bcbb39a
Accessing RedisInterface address
Mar 6, 2023
3c9ffb6
InstanceRunningController implemented and running
adrianLIrobotics Mar 6, 2023
86c9354
Specify port in k8s service
Mar 6, 2023
4dcbeb8
Use simple planning for resource planning
Mar 6, 2023
8af5b8a
Add nullable properties to InstanceModel
Mar 6, 2023
6cf6663
Final touches to the delpoyment process
Mar 6, 2023
cb80836
Orchestrator: implement SaveActionSequence
adrianLIrobotics Mar 7, 2023
c420c23
Fixes
adrianLIrobotics Mar 7, 2023
daffeb7
Merge branch 'main' into AL/NewRedisGraphModeling
adrianLIrobotics Mar 7, 2023
bcbc89b
Set prefetch cout to 1
Artonus Mar 7, 2023
ed8b4be
Implemented historicalactionPlan
adrianLIrobotics Mar 8, 2023
91d96b2
Fix routing problems with RabbitMQ config
Artonus Mar 8, 2023
feb2955
Corrected consumer declaration; added logging
Artonus Mar 8, 2023
cd6b839
Merge branch 'main' into release-v0.2
Mar 8, 2023
2741617
Merge remote-tracking branch 'origin/release-v0.2' into AL/NewRedisGr…
adrianLIrobotics Mar 8, 2023
d4969a2
Created HistoricalActionPlanModel in DeletePlanAsync
adrianLIrobotics Mar 8, 2023
d082ea7
Update orchestrator.yaml
Artonus Mar 8, 2023
b72aa87
Fix checking status of deployed actions
Artonus Mar 8, 2023
1a5c5a5
Merge remote-tracking branch 'origin/release-v0.2' into AL/NewRedisGr…
adrianLIrobotics Mar 8, 2023
d31cf9e
Correct conflicting controller paths and names
Artonus Mar 9, 2023
c814dfc
Put actionRunning inside the actionController
adrianLIrobotics Mar 10, 2023
d743818
moved InstanceRunning to InstanceController and updated RedisInterfac…
adrianLIrobotics Mar 10, 2023
8771da0
Update docker-compose.override.yml
Artonus Mar 10, 2023
d6d7b0b
Merge branch 'AL/NewRedisGraphModeling' of https://github.com/5G-ERA/…
Artonus Mar 10, 2023
9d90e15
Fixed adding new objects to graph
Artonus Mar 10, 2023
9cf4bd8
fix: json within a json payload
Artonus Mar 10, 2023
1d2a25d
Fix: disallow adding multiple same objects to the graph
Artonus Mar 10, 2023
f1d2961
Merge branch 'main' into AL/NewRedisGraphModeling
Mar 28, 2023
be9beea
Merge branch 'main' into AL/NewRedisGraphModeling
Artonus Apr 14, 2023
6f91e79
Temp fix compilation errors after merge
Artonus Apr 14, 2023
7104cfa
Use LocationTypeEnum instead of string
Artonus Apr 14, 2023
7611056
Correct nullability warnings in some classes
Artonus Apr 14, 2023
e4f3d75
Added ActionPlan responses
Artonus Apr 14, 2023
0b061a4
Running action responses
Artonus Apr 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/CentralApi/Mappings/ApiContractToDomainMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Middleware.CentralApi.Domain;
using Middleware.Common.Enums;
using Middleware.Models.Domain;
using Middleware.Models.Enums;

namespace Middleware.CentralApi.Mappings;

Expand Down
1 change: 1 addition & 0 deletions src/CentralApi/Services/LocationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using OneOf.Types;
using Middleware.CentralApi.Mappings;
using Middleware.Common.Enums;
using Middleware.Models.Enums;

namespace Middleware.CentralApi.Services;

Expand Down
1 change: 1 addition & 0 deletions src/CentralApi/Validation/RegisterRequestValidator.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using FluentValidation;
using Middleware.CentralApi.Contracts.Requests;
using Middleware.Common.Enums;
using Middleware.Models.Enums;

namespace Middleware.CentralApi.Validation;

Expand Down
10 changes: 10 additions & 0 deletions src/Common/Enums/ActionStatusEnum.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Middleware.Common.Enums;

public enum ActionStatusEnum
{
Unknown,
Running,
Finished,
Idle,
Off
}
7 changes: 0 additions & 7 deletions src/Common/Enums/LocationType.cs

This file was deleted.

3 changes: 3 additions & 0 deletions src/DataAccess/ExtensionMethods/DataAccessExtensionMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ public static IServiceCollection RegisterRepositories(this IServiceCollection se
services.AddScoped<IRobotRepository, RedisRobotRepository>();
services.AddScoped<ITaskRepository, RedisTaskRepository>();
services.AddScoped<IUserRepository, RedisUserRepository>();
services.AddScoped<IActionRunningRepository, RedisActionRunningRepository>();
services.AddScoped<IInstanceRunningRepository, RedisInstanceRunningRepository>();
services.AddScoped<IHistoricalActionPlanRepository, RedisHistoricalActionPlanRepository>();

return services;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ namespace Middleware.DataAccess.Repositories.Abstract;

public interface IActionPlanRepository : IBaseRepository<ActionPlanModel>, IRelationRepository
{
Task<List<ActionPlanModel>> GetRobotActionPlans(Guid robotId);
Task<List<ActionPlanModel>?> GetRobotActionPlans(Guid robotId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Middleware.Models.Domain;

namespace Middleware.DataAccess.Repositories.Abstract
{
public interface IActionRunningRepository: IBaseRepository<ActionRunningModel>, IRelationRepository
{
Task<ActionRunningModel?> PatchActionAsync(Guid id, ActionRunningModel patch);
}
}
2 changes: 1 addition & 1 deletion src/DataAccess/Repositories/Abstract/IBaseRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public interface IBaseRepository<T> where T : class
/// Get all objects of the specified type from the data store
/// </summary>
/// <returns></returns>
Task<List<T>> GetAllAsync();
Task<List<T>?> GetAllAsync();

/// <summary>
/// Delete object from the data store by its id
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Middleware.Models.Domain;

namespace Middleware.DataAccess.Repositories.Abstract;

public interface IHistoricalActionPlanRepository : IBaseRepository<HistoricalActionPlanModel>, IRelationRepository
{
Task<List<HistoricalActionPlanModel>> GetRobotActionPlans(Guid robotId);

Task<List<HistoricalActionPlanModel>> GetRobotReplanActionPlans(Guid robotId);
}
10 changes: 10 additions & 0 deletions src/DataAccess/Repositories/Abstract/IInstanceRunningRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Middleware.Models.Domain;

namespace Middleware.DataAccess.Repositories.Abstract
{
public interface IInstanceRunningRepository : IBaseRepository<InstanceRunningModel>, IRelationRepository
{
Task<InstanceRunningModel> PatchInstanceAsync(Guid id, InstanceRunningModel patch);

}
}
2 changes: 1 addition & 1 deletion src/DataAccess/Repositories/Redis/RedisActionRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public async Task<ActionModel> PatchActionAsync(Guid id, ActionModel patch)
{
currentModel.Placement = patch.Placement;
}
if (!string.IsNullOrEmpty(patch.PlacementType))
if (patch.PlacementType is not null)
{
currentModel.PlacementType = patch.PlacementType;
}
Expand Down
68 changes: 68 additions & 0 deletions src/DataAccess/Repositories/Redis/RedisActionRunningRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
using Middleware.DataAccess.Repositories.Abstract;
using Middleware.Models.Domain;
using Middleware.Models.Dto;
using Middleware.Models.Enums;
using Redis.OM.Contracts;
using RedisGraphDotNet.Client;
using Serilog;

namespace Middleware.DataAccess.Repositories;

public class RedisActionRunningRepository : RedisRepository<ActionRunningModel, ActionRunningDto>, IActionRunningRepository
{
public RedisActionRunningRepository(IRedisConnectionProvider provider, IRedisGraphClient redisGraph, ILogger logger) : base(provider, redisGraph, true, logger)
{

}

public async Task<ActionRunningModel?> PatchActionAsync(Guid id, ActionRunningModel patch)
{
ActionRunningModel? currentModel = await GetByIdAsync(id);
if (currentModel == null)
{
return null;
}
if (!string.IsNullOrEmpty(patch.Name))
{
currentModel.Name = patch.Name;
}
if (patch.Tags != null)
{
currentModel.Tags = patch.Tags;
}
if (!string.IsNullOrEmpty(patch.Order.ToString()))
{
currentModel.Order = patch.Order;
}
if (!string.IsNullOrEmpty(patch.Placement))
{
currentModel.Placement = patch.Placement;
}
if (patch.PlacementType != LocationType.Unspecified)
{
currentModel.PlacementType = patch.PlacementType;
}
if (!string.IsNullOrEmpty(patch.ActionPriority))
{
currentModel.ActionPriority = patch.ActionPriority;
}
if (!string.IsNullOrEmpty(patch.ActionStatus))
{
currentModel.ActionStatus = patch.ActionStatus;
}
if (patch.Services != null)
{
currentModel.Services = patch.Services;
}
if (!string.IsNullOrEmpty(patch.MinimumRam.ToString()))
{
currentModel.MinimumRam = patch.MinimumRam;
}
if (!string.IsNullOrEmpty(patch.MinimumNumCores.ToString()))
{
currentModel.MinimumNumCores = patch.MinimumNumCores;
}
await UpdateAsync(currentModel);
return currentModel;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System.Collections.Generic;
using System.Text.Json;
using Microsoft.Extensions.Logging;
using Middleware.Common.Enums;
using Middleware.DataAccess.Repositories.Abstract;
using Middleware.Models.Domain;
using Middleware.Models.Dto;
using Middleware.Models.Enums;
using NReJSON;
using Redis.OM.Contracts;
using RedisGraphDotNet.Client;
using StackExchange.Redis;
using ILogger = Serilog.ILogger;


namespace Middleware.DataAccess.Repositories
{
public class RedisHistoricalActionPlanRepository : RedisRepository<HistoricalActionPlanModel, HistoricalActionPlanDto>, IHistoricalActionPlanRepository
{
/// <summary>
/// Default constructor
/// </summary>
/// <param name="redisClient"></param>
/// <param name="redisGraph"></param>
/// <param name="logger"></param>
public RedisHistoricalActionPlanRepository(IRedisConnectionProvider provider, IRedisGraphClient redisGraph,
ILogger logger) : base(provider, redisGraph, true, logger)
{
}

/// <summary>
/// Retrieves all actionPlanModels associated with an specific robot Id.
/// </summary>
/// <returns> List of ActionPlanModel </returns>
public async Task<List<HistoricalActionPlanModel>> GetRobotActionPlans(Guid robotId)
{
var guidStr = robotId.ToString();
var actionPlans = await FindQuery(dto => dto.RobotId == guidStr).ToListAsync();
var planModels = actionPlans.Select(ToTModel).ToList();
return planModels;
}

/// <summary>
/// Retrieves all actionPlanModels associated with an specific robot Id that have a replan set to true.
/// </summary>
/// <returns> List of HistoricalActionPlanModel </returns>
public async Task<List<HistoricalActionPlanModel>> GetRobotReplanActionPlans(Guid robotId)
{
var guidStr = robotId.ToString();
var actionPlans = await FindQuery(dto => dto.RobotId == guidStr && dto.IsReplan == true).ToListAsync();
var planModels = actionPlans.Select(ToTModel).ToList();
return planModels;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
using Microsoft.IdentityModel.Tokens;
using Middleware.DataAccess.Repositories.Abstract;
using Middleware.Models.Domain;
using Middleware.Models.Dto;
using Redis.OM.Contracts;
using RedisGraphDotNet.Client;
using Serilog;

namespace Middleware.DataAccess.Repositories
{
public class RedisInstanceRunningRepository : RedisRepository<InstanceRunningModel, InstanceRunningDto>, IInstanceRunningRepository
{
/// <summary>
/// Default constructor
/// </summary>
/// <param name="redisClient"></param>
/// <param name="redisGraph"></param>
/// <param name="logger"></param>
public RedisInstanceRunningRepository(IRedisConnectionProvider provider, IRedisGraphClient redisGraph, ILogger logger) : base(provider, redisGraph, true, logger)
{
}

/// <summary>
/// Patching properties for InstaceModel
/// </summary>
/// <param name="id"></param>
/// <param name="patch"></param>
/// <returns> Patched model </returns>
public async Task<InstanceRunningModel> PatchInstanceAsync(Guid id, InstanceRunningModel patch)
{
InstanceRunningModel? currentModel = await GetByIdAsync(id);
if (currentModel == null)
{
return null;
}
if (!string.IsNullOrEmpty(patch.Name))
{
currentModel.Name = patch.Name;
}
if (!string.IsNullOrEmpty(patch.ServiceType))
{
currentModel.ServiceType = patch.ServiceType;
}
if (!string.IsNullOrEmpty(patch.ServiceInstanceId.ToString()))
{
currentModel.ServiceInstanceId = patch.ServiceInstanceId;
}
if (!string.IsNullOrEmpty(patch.ServiceUrl))
{
currentModel.ServiceUrl = patch.ServiceUrl;
}
if (!string.IsNullOrEmpty(patch.ServiceStatus))
{
currentModel.ServiceStatus = patch.ServiceStatus;
}
if (!string.IsNullOrEmpty(patch.DeployedTime.ToString()))
{
currentModel.DeployedTime = patch.DeployedTime;
}

await UpdateAsync(currentModel);
return currentModel;
}

}
}
8 changes: 5 additions & 3 deletions src/DataConverter/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Microsoft.Extensions.Logging.Abstractions;
using Middleware.Common.Config;
using Middleware.DataAccess.Repositories;
using Middleware.DataAccess.Repositories.Abstract;
using Middleware.DataAccess.Repositories.Redis;
using Middleware.Models.Domain;
using Middleware.RedisInterface.Contracts.Responses;
Expand Down Expand Up @@ -182,17 +183,18 @@
{
actionPlan.LastStatusChange = DateTime.Now;
actionPlan.TaskStartedAt = DateTime.Now.AddDays(-1);
actionPlan.ActionSequence.ForEach(a=>a.Services.ForEach(i=>i.OnboardedTime = DateTime.Today.AddDays(-10)));
//actionPlan.ActionSequence.ForEach(a=>a.Services.ForEach(i=>i.OnboardedTime = DateTime.Today.AddDays(-10)));
await redisActionPlanRepository.AddAsync(actionPlan);
}

#endregion


#region relations
Console.WriteLine("Writing Relations...");

var historicalActionPlanRepository = new RedisHistoricalActionPlanRepository(clusterConnectionProvider, redisGraphClient, Serilog.Log.Logger);
var dashboardService = new DashboardService(robotRepository, taskRepository, actionPlanRepository, edgeRepository,
cloudRepository, instanceRepository, actionRepository);
cloudRepository, instanceRepository, actionRepository, historicalActionPlanRepository);

var relations = await dashboardService.GetAllRelationModelsAsync();

Expand Down
27 changes: 23 additions & 4 deletions src/Models/Domain/ActionModel.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Text.Json.Serialization;
using Middleware.Models.Dto;
using Middleware.Models.Dto.Hardware;
using Middleware.Models.Enums;

namespace Middleware.Models.Domain;

Expand All @@ -10,8 +11,7 @@ public class ActionModel : BaseModel
public override Guid Id { get; set; } = Guid.NewGuid();

[JsonPropertyName("Name")]
public override string Name { get; set; }

public override string Name { get; set; } = default!;

[JsonPropertyName("Tags")]
public List<string>? Tags { get; set; }
Expand All @@ -23,7 +23,7 @@ public class ActionModel : BaseModel
public string? Placement { get; set; }

[JsonPropertyName("PlacementType")]
public string? PlacementType { get; set; } // Either edge or cloud.
public LocationType? PlacementType { get; set; }

[JsonPropertyName("ActionPriority")]
public string? ActionPriority { get; set; }
Expand Down Expand Up @@ -54,7 +54,26 @@ public override Dto.Dto ToDto()
MinimumRam = domain.MinimumRam,
MinimumNumCores = domain.MinimumNumCores
},
Tags = domain.Tags
Tags = domain.Tags ?? new List<string>()
};
}

public ActionRunningModel ToActionRunningModel(Guid actionPlanId)
{
var that = this;
return new ActionRunningModel()
{
ActionPriority = that.ActionPriority,
ActionId = that.Id,
ActionPlanId = actionPlanId,
Name = that.Name,
ActionStatus = that.ActionStatus,
Placement = that.Placement!,
PlacementType = that.PlacementType!.Value,
Order = that.Order,
MinimumRam = that.MinimumRam,
MinimumNumCores = that.MinimumNumCores,
Tags = that.Tags
};
}
}
Loading