using MP.Data; using MP.Data.Conf; using MP.Data.DatabaseModels; using MP.Data.DTO; using Newtonsoft.Json; using NLog; using StackExchange.Redis; using System.Diagnostics; namespace MP.INVE.Data { public class MiDataService : IDisposable { #region Public Constructors public MiDataService(IConfiguration configuration, ILogger logger) { _logger = logger; _logger.LogInformation("Starting MiDataService INIT"); _configuration = configuration; // setup compoenti REDIS redisConn = ConnectionMultiplexer.Connect(_configuration.GetConnectionString("Redis")); redisConnAdmin = ConnectionMultiplexer.Connect(_configuration.GetConnectionString("RedisAdmin")); redisDb = redisConn.GetDatabase(); // leggo cache lungo periodo int.TryParse(_configuration.GetValue("ServerConf:redisLongTimeCache"), out redisLongTimeCache); _logger.LogInformation("Redis INIT"); // conf DB string connStrData = _configuration.GetConnectionString("Mp.Data"); string connStrInve = _configuration.GetConnectionString("Mp.Inve"); if (string.IsNullOrEmpty(connStrData) || string.IsNullOrEmpty(connStrInve)) { _logger.LogError($"DbController: ConnString empty! connStrData: {connStrData} | connStrInve: {connStrInve}"); } else { dbController = new MP.Data.Controllers.MpInveController(configuration); _logger.LogInformation("DbController OK"); } } #endregion Public Constructors public void Dispose() { } #region Public Properties public static MP.Data.Controllers.MpInveController dbController { get; set; } = null!; /// /// Dizionario dei tag configurati per IOB /// public Dictionary> currTagConf { get; set; } = new Dictionary>(); #endregion Public Properties #region Public Methods public List ElencoOperatori(int matrOpr, string authkey) { List? result = new List(); result = dbController.ElencoOperatori(matrOpr, authkey); return result; } public List InventSessCurrList() { List result = new List(); result = dbController.InventSessCurrList(); return result; } #endregion Public Methods #region Protected Fields protected Random rand = new Random(); #endregion Protected Fields #region Protected Methods /// /// Restituisce un timeout dai minuti richiesti + tempo random 1..60 sec /// /// /// protected TimeSpan getRandTOut(int stdMinutes) { double rndValue = (double)stdMinutes + (double)rand.Next(1, 60) / 60; return TimeSpan.FromMinutes(rndValue); } #endregion Protected Methods #region Private Fields private static IConfiguration _configuration = null!; private static ILogger _logger = null!; private static Logger Log = LogManager.GetCurrentClassLogger(); /// /// Oggetto vocabolario x uso continuo traduzione /// private List ObjVocabolario = new List(); /// /// Oggetto per connessione a REDIS /// private ConnectionMultiplexer redisConn = null!; /// /// Oggetto per connessione a REDIS modalità admin (ex flux dati) /// private ConnectionMultiplexer redisConnAdmin = null!; /// /// Oggetto DB redis da impiegare x chiamate R/W /// private IDatabase redisDb = null!; private int redisLongTimeCache = 5; #endregion Private Fields #region Private Methods #endregion Private Methods } }