コード例 #1
0
        /// <summary>
        /// Stores the local flow cache to the global flow table.
        /// </summary>
        /// <param name="flowTracker">A flow tracker object that contains a local flow cache.</param>
        private void PopulateFlowTable(IFlowTracker <FlowData> flowTracker, ProgressRecord progressRecord)
        {
            var flowCache = CacheFactory.GetOrCreateFlowCache(m_ignite, FlowCacheName);

            using (var dataStreamer = m_ignite.GetDataStreamer <FlowKey, FlowData>(flowCache.Name))
            {
                dataStreamer.AllowOverwrite = true;
                var updateProcessor = new MergePacketFlowProcessor();
                dataStreamer.Receiver = new FlowStreamVisitor(updateProcessor);

                progressRecord.TotalFlows = flowTracker.FlowTable.Count;
                var flowCount = 0;
                foreach (var flow in flowTracker.FlowTable)
                {
                    flow.Value.FlowUid = FlowUidGenerator.NewUid(flow.Key, flow.Value.FirstSeen);
                    dataStreamer.AddData(flow.Key, flow.Value);
                    if (++flowCount % ProgressFlowBatch == 0)
                    {
                        progressRecord.CompletedFlows += ProgressFlowBatch;
                        Progress?.Report(progressRecord);
                    }
                }
                progressRecord.CompletedFlows += flowCount % ProgressFlowBatch;
                Progress?.Report(progressRecord);
                dataStreamer.Flush();
            }
        }
コード例 #2
0
 public FlowStreamVisitor(MergePacketFlowProcessor updateProcessor)
 {
     this.m_updateProcessor = updateProcessor;
 }