private IMessageTree MergeTree() { var max = PureCatConstants.MAX_CHILD_NUMBER; var tran = new DefaultTransaction("_CatMergeTree", "_CatMergeTree"); if (!_atomicTress.TryDequeue(out IMessageTree first)) { return(null); } tran.Status = PureCatConstants.SUCCESS; tran.Complete(); tran.AddChild(first.Message); tran.Timestamp = first.Message.Timestamp; long lastTimestamp = 0; long lastDuration = 0; while (max-- >= 0) { if (!_atomicTress.TryDequeue(out IMessageTree tree)) { tran.DurationInMillis = (lastTimestamp - tran.Timestamp + lastDuration); break; } lastTimestamp = tree.Message.Timestamp; var message = tree.Message as DefaultTransaction; lastDuration = message?.DurationInMillis ?? 0; tran.AddChild(tree.Message); } first.Message = tran; return(first); }
private void MarkAsNotCompleted(DefaultTransaction transaction) { IEvent notCompleteEvent = new DefaultEvent("CAT", "BadInstrument") { Status = "TransactionNotCompleted" }; notCompleteEvent.Complete(); transaction.AddChild(notCompleteEvent); transaction.Complete(); }