예제 #1
0
        public override void Start()
        {
            Dictionary <long, ElectricalHierarchyData> parentChild = GDAHelper.GetContainerHeirarchy(GdaQuery, new List <ModelCode>(), HierarchyNetworkType);

            containerHierarchyTree = new HierarchicalFilter(parentChild, HierarchyNetworkType);
            lfMeasureQuality       = new Dictionary <long, MeasurementValueQuality>();

            if (NetworkModelQuery == null)
            {
                NetworkModelQuery = JobService.OpenNetworkModelQuery();
            }

            JobResult result = CreateResult();

            ResultsReady(Guid, result);
        }
        public async Task <ExecutionReport> InitializeTopology()
        {
            ModelResourcesDesc resourcesDesc   = new ModelResourcesDesc();
            ExecutionReport    executionReport = new ExecutionReport();

            await ClearDictionary <long, ResourceDescription>(ReliableCollectionNames.NetworkModelDictinoary);

            GDAHelper gdaHelper = new GDAHelper();

            Dictionary <long, ResourceDescription> energySources     = (await gdaHelper.GetExtentValues(ModelCode.ENERGYSOURCE)).ToDictionary(value => value.Id);
            Dictionary <long, ResourceDescription> connectivityNodes = (await gdaHelper.GetExtentValues(ModelCode.CONNECTIVITYNODE)).ToDictionary(value => value.Id);
            Dictionary <long, ResourceDescription> switches          = (await gdaHelper.GetExtentValues(ModelCode.SWITCH)).ToDictionary(value => value.Id);
            Dictionary <long, ResourceDescription> terminals         = (await gdaHelper.GetExtentValues(ModelCode.TERMINAL)).ToDictionary(value => value.Id);


            List <ModelCode> classicBranchElements             = resourcesDesc.ClassicBranches;
            Dictionary <long, ResourceDescription> cimBranches = new Dictionary <long, ResourceDescription>();

            foreach (ModelCode classicBranchElement in classicBranchElements)
            {
                List <ResourceDescription> branches = await gdaHelper.GetExtentValues(classicBranchElement);

                foreach (ResourceDescription branch in branches)
                {
                    cimBranches.Add(branch.Id, branch);
                }
            }

            Dictionary <long, ResourceDescription> otherCimElements = new Dictionary <long, ResourceDescription>();

            foreach (ModelCode otherElement in resourcesDesc.OtherElements)
            {
                List <ResourceDescription> elements = await gdaHelper.GetExtentValues(otherElement);

                foreach (ResourceDescription element in elements)
                {
                    otherCimElements.Add(element.Id, element);
                }
            }

            List <Task> tasks = new List <Task>()
            {
                SaveNetworkModelElements(energySources),
                SaveNetworkModelElements(connectivityNodes),
                SaveNetworkModelElements(switches),
                SaveNetworkModelElements(terminals),
                SaveNetworkModelElements(cimBranches),
                SaveNetworkModelElements(otherCimElements),
            };



            InternalModelBuilderCIM internalModelBuilder = new InternalModelBuilderCIM(new CModelFramework());

            internalModelBuilder.ReadSources(energySources, terminals);
            internalModelBuilder.ReadConnectivityNodes(connectivityNodes, terminals);
            internalModelBuilder.ReadBranches(cimBranches, terminals);
            internalModelBuilder.ReadSwitches(switches, terminals);

            IEnumerable <TopologyResult> topologyResults = null;

            try
            {
                topologyResults = await TopologyRequest.AnalyzeTopology(internalModelBuilder.InternalModel);
            }
            catch (Exception e)
            {
                string message = $"Analyze topology failed with error {e.Message}";
                Logger.LogError(message);
                executionReport.Message = message;
                executionReport.Status  = ExecutionStatus.ERROR;
                return(executionReport);
            }

            if (topologyResults != null)
            {
                try
                {
                    await SaveTopologyModel(topologyResults);

                    string message = $"Save topology successfully completed";
                    Logger.LogInformation(message);
                    executionReport.Message = message;
                    executionReport.Status  = ExecutionStatus.SUCCESS;
                }
                catch (Exception e)
                {
                    string message = $"Save topology model failed with error: {e.Message}";
                    Logger.LogError(message, e);
                    executionReport.Message = message;
                    executionReport.Status  = ExecutionStatus.ERROR;
                }
            }
            else
            {
                string message = $"Some error ocurred on topology analyzer service";
                Logger.LogError(message);
                executionReport.Message = message;
                executionReport.Status  = ExecutionStatus.ERROR;
            }


            await Task.WhenAll(tasks);

            //Save network model version
            long currentNetworkModelVersion = await gdaHelper.GetVersion();

            var networkModelVersionDictionary = await this.stateManager.GetOrAddAsync <IReliableDictionary <string, long> >(ReliableCollectionNames.NetworkModelVersionDictionary);

            await networkModelVersionDictionary.ClearAsync();

            using (var tx = this.stateManager.CreateTransaction())
            {
                await networkModelVersionDictionary.AddAsync(tx, ReliableCollectionNames.NetworkModelVersionDictionary, currentNetworkModelVersion);

                await tx.CommitAsync();
            }

            return(executionReport);
        }
예제 #3
0
        private void RefreshHierarhy()
        {
            Dictionary <long, ElectricalHierarchyData> parentChild = GDAHelper.GetContainerHeirarchy(GdaQuery, new List <ModelCode>(), HierarchyNetworkType);

            containerHierarchyTree = new HierarchicalFilter(parentChild, HierarchyNetworkType);
        }