Files
mapo-mono/MP.MONO.UI/Data/CurrentDataService.cs
T
2022-03-09 20:01:07 +01:00

263 lines
9.5 KiB
C#

using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory;
using MP.MONO.Core.CONF;
using MP.MONO.Core.DTO;
using MP.MONO.Data;
using MP.MONO.Data.Controllers;
using Newtonsoft.Json;
using NLog;
using StackExchange.Redis;
namespace MP.MONO.UI.Data
{
public class CurrentDataService : IDisposable
{
#region Private Fields
private static IConfiguration _configuration;
private static ILogger<CurrentDataService> _logger;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
/// <summary>
/// Oggetto per connessione a REDIS
/// </summary>
private ConnectionMultiplexer redisConn = null!;
//ISubscriber sub = redis.GetSubscriber();
/// <summary>
/// Oggetto DB redis da impiegare x chiamate R/W
/// </summary>
private IDatabase redisDb = null!;
#endregion Private Fields
#region Public Fields
/// <summary>
/// Controller dati da DB
/// </summary>
public static MpDbController dbController;
#endregion Public Fields
#region Public Constructors
public CurrentDataService(IConfiguration configuration, ILogger<CurrentDataService> logger, IConnectionMultiplexer redisConn)
{
_logger = logger;
_configuration = configuration;
// setup compoenti REDIS
this.redisConn = ConnectionMultiplexer.Connect(_configuration.GetConnectionString("Redis"));
this.redisDb = this.redisConn.GetDatabase();
// setup canali pub/sub
alarmPipe = new MessagePipe(redisConn, "allarms");
parametersPipe = new MessagePipe(redisConn, "parameters");
statusPipe = new MessagePipe(redisConn, "status");
productionPipe = new MessagePipe(redisConn, "production");
machStatsPipe = new MessagePipe(redisConn, "machstats");
maintPipe = new MessagePipe(redisConn, "maintenance");
toolsPipe = new MessagePipe(redisConn, "tools");
machEvPipe = new MessagePipe(redisConn, "events");
actLogPipe = new MessagePipe(redisConn, "activitylog");
// conf DB
string connStr = _configuration.GetConnectionString("MP.MONO.Data");
if (string.IsNullOrEmpty(connStr))
{
_logger.LogError("ConnString empty!");
}
else
{
dbController = new MpDbController(configuration);
_logger.LogInformation("DbController OK");
}
}
#endregion Public Constructors
#region Public Properties
public MessagePipe alarmPipe { get; set; } = null!;
public MessagePipe machStatsPipe { get; set; } = null!;
public MessagePipe maintPipe { get; set; } = null!;
public MessagePipe parametersPipe { get; set; } = null!;
public MessagePipe productionPipe { get; set; } = null!;
public MessagePipe statusPipe { get; set; } = null!;
public MessagePipe toolsPipe { get; set; } = null!;
public MessagePipe machEvPipe { get; set; } = null!;
public MessagePipe actLogPipe { get; set; } = null!;
#endregion Public Properties
#region Private Methods
#endregion Private Methods
#region Public Methods
public void Dispose()
{
// Clear database controller
dbController.Dispose();
}
public async Task<List<DisplayDataDTO>> getStats()
{
List<DisplayDataDTO>? dbResult = new List<DisplayDataDTO>();
string cacheKey = Utils.mHash("Machine:MachStats:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<DisplayDataDTO>();
}
return await Task.FromResult(dbResult);
}
public async Task<List<DisplayDataDTO>> MachineParameters()
{
List<DisplayDataDTO>? dbResult = new List<DisplayDataDTO>();
string cacheKey = Utils.mHash("Machine:Parameters:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<DisplayDataDTO>();
}
return await Task.FromResult(dbResult);
}
public async Task<ProductionDTO> getProd()
{
ProductionDTO? dbResult = new ProductionDTO();
string cacheKey = Utils.mHash("Machine:Production:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<ProductionDTO>(rawData);
}
if (dbResult == null)
{
dbResult = new ProductionDTO();
}
return await Task.FromResult(dbResult);
}
public async Task<MachineDTO> getStatus()
{
MachineDTO? dbResult = new MachineDTO();
string cacheKey = Utils.mHash("Machine:Status:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<MachineDTO>(rawData);
}
if (dbResult == null)
{
dbResult = new MachineDTO();
}
return await Task.FromResult(dbResult);
}
public async Task<List<MachineStatus>> getStatusList()
{
List<MachineStatus>? dbResult = new List<MachineStatus>();
string cacheKey = Utils.mHash("Conf:Status");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<MachineStatus>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<MachineStatus>();
}
return await Task.FromResult(dbResult);
}
public async Task<List<MachineMode>> getModesList()
{
List<MachineMode>? dbResult = new List<MachineMode>();
string cacheKey = Utils.mHash("Conf:Mode");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<MachineMode>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<MachineMode>();
}
return await Task.FromResult(dbResult);
}
public async Task<List<DisplayDataDTO>> getMaintenance()
{
List<DisplayDataDTO>? dbResult = new List<DisplayDataDTO>();
string cacheKey = Utils.mHash("Machine:Maintenance:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<DisplayDataDTO>();
}
return await Task.FromResult(dbResult);
}
public async Task<List<DisplayDataDTO>> getTools()
{
List<DisplayDataDTO>? dbResult = new List<DisplayDataDTO>();
string cacheKey = Utils.mHash("Machine:Tools:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<DisplayDataDTO>();
}
return await Task.FromResult(dbResult);
}
public async Task<List<DisplayDataDTO>> getActLog()
{
List<DisplayDataDTO>? dbResult = new List<DisplayDataDTO>();
string cacheKey = Utils.mHash("Machine:ActivityLog:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<DisplayDataDTO>();
}
return await Task.FromResult(dbResult);
}
public async Task<List<DisplayDataDTO>> getEventHist()
{
List<DisplayDataDTO>? dbResult = new List<DisplayDataDTO>();
string cacheKey = Utils.mHash("Machine:Events:Current");
string rawData = await redisDb.StringGetAsync(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
}
if (dbResult == null)
{
dbResult = new List<DisplayDataDTO>();
}
return await Task.FromResult(dbResult);
}
#endregion Public Methods
}
}