예제 #1
0
        private async Task <T> SendDropEtwEvent <T>(Task <T> task) where T : DropOperationBaseEvent
        {
            long startTime = DateTime.UtcNow.Ticks;
            T    dropEvent = null;

            try
            {
                dropEvent = await task;
                return(dropEvent);
            }
            finally
            {
                // if 'task' failed, create an event indicating an error
                if (dropEvent == null)
                {
                    dropEvent              = Activator.CreateInstance <T>();
                    dropEvent.Succeeded    = false;
                    dropEvent.ErrorMessage = "internal error";
                }

                // common properties: execution time, drop type, drop url
                dropEvent.ElapsedTimeTicks = DateTime.UtcNow.Ticks - startTime;
                dropEvent.DropType         = "VsoDrop";
                if (m_dropClientTask.IsCompleted && !m_dropClientTask.IsFaulted)
                {
                    dropEvent.DropUrl = (await m_dropClientTask).DropUrl;
                }

                // send event
                m_etwLogger.Log(dropEvent);
            }
        }
예제 #2
0
        /// <summary>
        ///     Logs a generic <see cref="DropOperationBaseEvent"/> by delegating based on the type of <paramref name="e"/>.
        /// </summary>
        public static void Log(this ICloudBuildLogger logger, DropOperationBaseEvent e)
        {
            switch (e.Kind)
            {
            case EventKind.DropCreation:
                logger.Log((DropCreationEvent)e);
                return;

            case EventKind.DropFinalization:
                logger.Log((DropFinalizationEvent)e);
                return;

            default:
                Contract.Assert(false, "Unsupported " + nameof(DropOperationBaseEvent) + " " + e.Kind);
                return;
            }
        }