public async Task <bool> ReportPotentialOutage(long elementGid, CommandOriginType commandOriginType, NetworkType networkType) { Logger.LogVerbose($"{baseLogString} ReportPotentialOutage method started. ElementGid: 0x{elementGid:X16}, CommandOriginType: {commandOriginType}, NetworkType: {networkType}"); while (!ReliableDictionariesInitialized) { await Task.Delay(1000); } try { #region Preconditions var ceModelProviderClient = CeModelProviderClient.CreateClient(); if (await ceModelProviderClient.IsRecloser(elementGid)) { Logger.LogWarning($"{baseLogString} ReportPotentialOutage => Element with gid 0x{elementGid:X16} is a Recloser. Call to ReportPotentialOutage aborted."); return(false); } var enumerableTopology = await OutageTopologyModel.GetEnumerableDictionaryAsync(); if (!enumerableTopology.ContainsKey(ReliableDictionaryNames.OutageTopologyModel)) { Logger.LogError($"{baseLogString} ReportPotentialOutage => Topology not found in Rel Dictionary: {ReliableDictionaryNames.OutageTopologyModel}."); return(false); } var topology = enumerableTopology[ReliableDictionaryNames.OutageTopologyModel]; var affectedConsumersGids = lifecycleHelper.GetAffectedConsumers(elementGid, topology, networkType); var historyDBManagerClient = HistoryDBManagerClient.CreateClient(); if (!(await CheckPreconditions(elementGid, commandOriginType, affectedConsumersGids, historyDBManagerClient))) { Logger.LogWarning($"{baseLogString} ReportPotentialOutage => Parameters do not satisfy required preconditions. ElementId: 0x{elementGid:X16}, CommandOriginType: {commandOriginType}"); return(false); } #endregion Preconditions Logger.LogInformation($"{baseLogString} ReportPotentialOutage => Reporting outage for gid: 0x{elementGid:X16}, CommandOriginType: {commandOriginType}"); var result = await StoreActiveOutage(elementGid, affectedConsumersGids, topology); if (!result.HasValue) { Logger.LogError($"{baseLogString} ReportPotentialOutage => Storing outage on element 0x{elementGid:X16} FAILED."); return(false); } var createdOutage = result.Value; Logger.LogInformation($"{baseLogString} ReportPotentialOutage => Outage on element with gid: 0x{createdOutage.OutageElementGid:x16} is successfully stored in database."); //await historyDBManagerClient.OnSwitchOpened(elementGid, createdOutage.OutageId); //await historyDBManagerClient.OnConsumerBlackedOut(affectedConsumersGids, createdOutage.OutageId); return(await lifecycleHelper.PublishOutageAsync(Topic.ACTIVE_OUTAGE, outageMessageMapper.MapOutageEntity(createdOutage))); } catch (Exception e) { string message = $"{baseLogString} ReportPotentialOutage => exception: {e.Message}"; Logger.LogError(message, e); return(false); } }
public async Task <bool> EnqueuePotentialOutageCommand(long elementGid, CommandOriginType commandOriginType, NetworkType networkType) { Logger.LogDebug($"{baseLogString} EnqueuePotentialOutageCommand method started. Element gid: {elementGid}, command origin type: {commandOriginType}, network type {networkType}"); while (!ReliableDictionariesInitialized) { await Task.Delay(1000); } try { var command = new PotentialOutageCommand() { ElementGid = elementGid, CommandOriginType = commandOriginType, NetworkType = networkType, }; await PotentialOutagesQueue.EnqueueAsync(command); return(true); } catch (Exception e) { string message = "EnqueuePotentialOutageCommand => exception caught"; Logger.LogError(message, e); return(false); } }