Example #1
0
        public HistoryDBManagerService(StatefulServiceContext context)
            : base(context)
        {
            this.logger = CloudLoggerFactory.GetLogger(ServiceEventSource.Current, context);

            this.baseLogString = $"{this.GetType()} [{this.GetHashCode()}] =>{Environment.NewLine}";
            Logger.LogDebug($"{baseLogString} Ctor => Logger initialized");

            try
            {
                this.historyDBManagerProvider         = new HistoryDBManager(this.StateManager);
                this.reportServiceProvider            = new ReportService();
                this.outageModelAccessProvider        = new OutageModelAccess();
                this.consumerAccessProvider           = new ConsumerAccess();
                this.equipmentAccessProvider          = new EquipmentAccess();
                this.notifyNetworkModelUpdateProvider = new OmsHistoryNotifyNetworkModelUpdate(this.StateManager);
                this.transactionActorProvider         = new OmsHistoryTransactionActor(this.StateManager);
                this.historySubscriber = new HistorySubscriber(this.StateManager, this.historyDBManagerProvider);


                string infoMessage = $"{baseLogString} Ctor => Contract providers initialized.";
                Logger.LogInformation(infoMessage);
            }
            catch (Exception e)
            {
                string errorMessage = $"{baseLogString} Ctor => Exception caught: {e.Message}.";
                Logger.LogError(errorMessage, e);
            }
        }
        public GdaService(StatelessServiceContext context)
            : base(context)
        {
            this.logger = CloudLoggerFactory.GetLogger(ServiceEventSource.Current, context);

            this.baseLogString = $"{this.GetType()} [{this.GetHashCode()}] =>{Environment.NewLine}";
            Logger.LogDebug($"{baseLogString} Ctor => Logger initialized");

            try
            {
                //LOGIC
                _ = Config.GetInstance(this.Context);

                string debugMessage = $"{baseLogString} Ctor => Configuration initialized.";
                Logger.LogDebug(debugMessage);

                //LOGIC
                this.networkModel = new NetworkModel();

                string infoMessage = $"{baseLogString} Ctor => NetworkModel created.";
                Logger.LogInformation(infoMessage);

                //LOGIC
                this.genericDataAccess   = new GenericDataAccess(networkModel);
                this.nmsTransactionActor = new NmsTransactionActor(networkModel);

                infoMessage = $"{baseLogString} Ctor => Contract providers initialized.";
                Logger.LogInformation(infoMessage);
            }
            catch (Exception e)
            {
                string errMessage = $"{baseLogString} Ctor => Exception caught: {e.Message}.";
                Logger.LogError(errMessage, e);
            }
        }
Example #3
0
        public ModelProviderService(StatefulServiceContext context)
            : base(context)
        {
            this.baseLogString = $"{this.GetType()} [{this.GetHashCode()}] =>{Environment.NewLine}";
            Logger.LogDebug($"{baseLogString} Ctor => Logger initialized");

            try
            {
                //DONE THIS WAY (in this order) BECAUSE: there is a mechanism that tracks the initialization process of reliable collections, which is set in constructors of these classes
                var modelResourceDesc = new ModelResourcesDesc();
                var enumDescs         = new EnumDescs();

                //this.scadaModelImporter = new ScadaModelImporter(this.StateManager, modelResourceDesc, enumDescs);

                this.modelReadAccessProvider        = new ModelReadAccessProvider(this.StateManager);
                this.modelUpdateAccessProvider      = new ModelUpdateAccessProvider(this.StateManager);
                this.integrityUpdateProvider        = new IntegrityUpdateProvider(this.StateManager);
                this.scadaNotifyNetworkModelUpdate  = new ScadaNotifyNetworkModelUpdate(this.StateManager);
                this.scadaTransactionActorProviders = new ScadaTransactionActor(this.StateManager, modelResourceDesc, enumDescs);

                string infoMessage = $"{baseLogString} Ctor => Contract providers initialized.";
                Logger.LogInformation(infoMessage);
                ServiceEventSource.Current.ServiceMessage(this.Context, $"[SCADA.ModelProviderService | Information] {infoMessage}");
            }
            catch (Exception e)
            {
                string errorMessage = $"{baseLogString} Ctor => Exception caught: {e.Message}.";
                Logger.LogError(errorMessage, e);
                ServiceEventSource.Current.ServiceMessage(this.Context, $"[SCADA.ModelProviderService | Error] {errorMessage}");
            }
        }
        private async Task InvokeRollbackOnActors(string transactionName)
        {
            var enumerableActiveTransactions = await ActiveTransactions.GetEnumerableDictionaryAsync();

            if (!enumerableActiveTransactions.ContainsKey(transactionName))
            {
                string errorMessage = $"{baseLogString} InvokeRollbackOnActors => transaction '{transactionName}' not found in '{ReliableDictionaryNames.ActiveTransactions}'.";
                Logger.LogError(errorMessage);
                throw new Exception(errorMessage);
            }

            var result = await TransactionEnlistmentLedger.TryGetValueAsync(transactionName);

            if (!result.HasValue)
            {
                string errorMessage = $"{baseLogString} InvokeRollbackOnActors => Transaction '{transactionName}' not found in '{ReliableDictionaryNames.TransactionEnlistmentLedger}'.";
                Logger.LogError(errorMessage);
                throw new Exception(errorMessage);
            }

            var transactionLedger = result.Value;

            List <Task> tasks = new List <Task>();

            foreach (var transactionActorName in transactionLedger)
            {
                if (enumerableActiveTransactions[transactionName].Contains(transactionActorName))
                {
                    var task = Task.Run(async() =>
                    {
                        ITransactionActorContract transactionActorClient = TransactionActorClient.CreateClient(transactionActorName);
                        await transactionActorClient.Rollback();
                        Logger.LogInformation($"{baseLogString} InvokeRollbackOnActors => Rollback invoked on Transaction actor: {transactionActorName}.");
                    });

                    tasks.Add(task);
                }
            }

            Task.WaitAll(tasks.ToArray());
            Logger.LogInformation($"{baseLogString} InvokeRollbackOnActors => Rollback SUCCESSFULLY invoked on all transaction actors.");
        }
        private async Task <bool> InvokePreparationOnActors(string transactionName)
        {
            bool success;

            var enumerableActiveTransactions = await ActiveTransactions.GetEnumerableDictionaryAsync();

            if (!enumerableActiveTransactions.ContainsKey(transactionName))
            {
                string errorMessage = $"{baseLogString} InvokePreparationOnActors => transaction '{transactionName}' not found in '{ReliableDictionaryNames.ActiveTransactions}'.";
                Logger.LogError(errorMessage);
                throw new Exception(errorMessage);
            }

            var result = await TransactionEnlistmentLedger.TryGetValueAsync(transactionName);

            if (!result.HasValue)
            {
                string errorMessage = $"{baseLogString} InvokePreparationOnActors => Transaction '{transactionName}' not found in '{ReliableDictionaryNames.TransactionEnlistmentLedger}'.";
                Logger.LogError(errorMessage);
                throw new Exception(errorMessage);
            }

            var transactionLedger = result.Value;

            if (!enumerableActiveTransactions[transactionName].SetEquals(transactionLedger))
            {
                string errorMessage = $"{baseLogString} InvokePreparationOnActors => not all actors have enlisted for the transaction '{transactionName}'.";
                Logger.LogError(errorMessage);
                throw new NotAllActorsEnlistedException(errorMessage);
            }

            List <Task <Tuple <string, bool> > > tasks = new List <Task <Tuple <string, bool> > >();

            foreach (var transactionActorName in transactionLedger)
            {
                var task = Task.Run(async() =>
                {
                    ITransactionActorContract transactionActorClient = TransactionActorClient.CreateClient(transactionActorName);
                    var prepareSuccess = await transactionActorClient.Prepare();
                    Logger.LogInformation($"{baseLogString} InvokePreparationOnActors => Prepare invoked on Transaction actor: {transactionActorName}, Success: {prepareSuccess}.");

                    return(new Tuple <string, bool>(transactionActorName, prepareSuccess));
                });

                tasks.Add(task);
            }

            var taskResults = await Task.WhenAll(tasks);

            success = true;

            foreach (var taskResult in taskResults)
            {
                var actorUri       = taskResult.Item1;
                var prepareSuccess = taskResult.Item2;

                success = success && prepareSuccess;

                if (success)
                {
                    Logger.LogInformation($"{baseLogString} InvokePreparationOnActors => Preparation on Transaction actor: {actorUri} finsihed SUCCESSFULLY.");
                }
                else
                {
                    Logger.LogInformation($"{baseLogString} InvokePreparationOnActors => Preparation on Transaction actor: {actorUri} finsihed UNSUCCESSFULLY.");
                    break;
                }
            }

            return(success);
        }
 public NmsTransactionActor(ITransactionActorContract contractProvider)
 {
     this.baseLogString    = $"{this.GetType()} [{this.GetHashCode()}] =>{Environment.NewLine}";
     this.contractProvider = contractProvider;
 }