Exemplo n.º 1
0
        public async Task Post(PushWebHookEvent e)
        {
            Trace.TraceInformation($"CommitPushed Started: {e}");

            try
            {
                if (e.Commits != null)
                {
                    foreach (Commit c in e.Commits)
                    {
                        if (c.modified != null)
                        {
                            foreach (string modified in c.modified)
                            {
                                ModifiedFileModel modifiedFile;
                                if (!ModifiedFileModel.TryParse(e.Repository.Full_Name, e.Ref, modified, out modifiedFile))
                                {
                                    Trace.TraceWarning($"Skipping file '{modified}'");
                                    continue;
                                }

                                List <Task> handlerTasks = new List <Task>();
                                foreach (ISubscriptionHandler handler in await _eventService.GetSubscriptionHandlers(modifiedFile))
                                {
                                    if (handler.Delay.HasValue)
                                    {
                                        DelayedMessage message = new DelayedMessage();
                                        message.HandlerType = handler.GetType().AssemblyQualifiedName;
                                        message.HandlerData = JsonConvert.SerializeObject(handler);

                                        handlerTasks.Add(
                                            _storageService.EnqueueMessage(
                                                DelayedMessage.QueueName,
                                                JsonConvert.SerializeObject(message),
                                                handler.Delay));
                                    }
                                    else
                                    {
                                        handlerTasks.Add(handler.Execute());
                                    }
                                }

                                await Task.WhenAll(handlerTasks);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError($"An unhandled exception occurred handling PushWebHookEvent {e} : Exception: {ex}");

                throw;
            }

            Trace.TraceInformation("CommitPushed Complete");
        }
        public async Task <IEnumerable <EventRegistration> > GetRegistrations(ModifiedFileModel modifiedFile)
        {
            if (SubscriptionModel == null)
            {
                await InitializeSubscriptionModel();
            }

            return(SubscriptionModel.GetRegistrations(modifiedFile));
        }
            public IEnumerable <Subscription> GetSubscriptions(ModifiedFileModel modifiedFile)
            {
                foreach (string fileName in SubscribedFiles.Keys)
                {
                    if (string.Equals(fileName, modifiedFile.FullPath, StringComparison.OrdinalIgnoreCase))
                    {
                        return(JsonConvert.DeserializeObject <Subscription[]>(SubscribedFiles[fileName].ToString()));
                    }
                }

                return(Enumerable.Empty <Subscription>());
            }
Exemplo n.º 4
0
            public IEnumerable <ISubscriptionHandler> GetHandlers(ModifiedFileModel modifiedFile)
            {
                List <ISubscriptionHandler> subscriptionHandlers = new List <ISubscriptionHandler>();
                HandlerResolver             resolver             = new HandlerResolver(this);

                foreach (HandlerObject handlerObject in GetHandlerObjects(modifiedFile))
                {
                    ISubscriptionHandler subscriptionHandler = resolver.Resolve(handlerObject);
                    if (subscriptionHandler != null)
                    {
                        subscriptionHandlers.Add(subscriptionHandler);
                    }
                }

                return(subscriptionHandlers);
            }
Exemplo n.º 5
0
        public async Task Post(PushWebHookEvent e)
        {
            Trace.TraceInformation($"CommitPushed Started: {e}");

            try
            {
                if (e.Commits != null)
                {
                    foreach (Commit c in e.Commits)
                    {
                        if (c.modified != null)
                        {
                            foreach (string modified in c.modified)
                            {
                                ModifiedFileModel modifiedFile;
                                if (!ModifiedFileModel.TryParse(e.Repository.Full_Name, e.Ref, modified, out modifiedFile))
                                {
                                    Trace.TraceWarning($"Skipping file '{modified}'");
                                    continue;
                                }

                                List <Task> queueBuildTasks = new List <Task>();
                                foreach (EventRegistration registration in await _eventService.GetRegistrations(modifiedFile))
                                {
                                    queueBuildTasks.Add(
                                        _vsoService.QueueBuildAsync(
                                            registration.VsoInstance,
                                            registration.VsoProject,
                                            registration.BuildDefinitionId,
                                            registration.VsoParameters));
                                }

                                await Task.WhenAll(queueBuildTasks);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError($"An unhandled exception occurred handling PushWebHookEvent {e} : Exception: {ex}");

                throw;
            }

            Trace.TraceInformation("CommitPushed Complete");
        }
            public IEnumerable <EventRegistration> GetRegistrations(ModifiedFileModel modifiedFile)
            {
                List <EventRegistration> registrations = new List <EventRegistration>();

                foreach (Subscription subscription in Subscriptions.GetSubscriptions(modifiedFile))
                {
                    BuildDefinition buildDefinition = GetBuildDefinition(subscription);
                    string          parameters      = VsoParameterGenerator.GetParameters(subscription.VsoParameters);

                    registrations.Add(new EventRegistration()
                    {
                        VsoInstance       = buildDefinition.VsoInstance,
                        VsoProject        = buildDefinition.VsoProject,
                        BuildDefinitionId = buildDefinition.BuildDefinitionId,
                        VsoParameters     = parameters
                    });
                }

                return(registrations);
            }
Exemplo n.º 7
0
        public async Task Post(PushWebHookEvent e)
        {
            Trace.TraceInformation($"CommitPushed Started: {e}");

            try
            {
                if (e.Commits != null)
                {
                    SubscriptionsModel subscriptionsModel = await SubscriptionsModel.CreateAsync();

                    // only invoke a specific handler once per a push notification
                    HashSet <ISubscriptionHandler> handlers = new HashSet <ISubscriptionHandler>();

                    foreach (Commit c in e.Commits)
                    {
                        foreach (string changedFilePath in c.GetAllChangedFiles())
                        {
                            ModifiedFileModel modifiedFile;
                            if (!ModifiedFileModel.TryParse(e.Repository.Full_Name, e.Ref, changedFilePath, c, out modifiedFile))
                            {
                                Trace.TraceWarning($"Skipping file '{changedFilePath}'");
                                continue;
                            }

                            foreach (ISubscriptionHandler handler in subscriptionsModel.GetHandlers(modifiedFile))
                            {
                                handlers.Add(handler);
                            }
                        }
                    }

                    List <Task> handlerTasks = new List <Task>();
                    foreach (ISubscriptionHandler handler in handlers)
                    {
                        if (handler.Delay.HasValue)
                        {
                            DelayedMessage message = new DelayedMessage();
                            message.HandlerType = handler.GetType().AssemblyQualifiedName;
                            message.HandlerData = JsonConvert.SerializeObject(handler);

                            handlerTasks.Add(
                                _storageService.EnqueueMessage(
                                    DelayedMessage.QueueName,
                                    JsonConvert.SerializeObject(message),
                                    handler.Delay));
                        }
                        else
                        {
                            handlerTasks.Add(handler.Execute());
                        }
                    }

                    await Task.WhenAll(handlerTasks);
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError($"An unhandled exception occurred handling PushWebHookEvent {e} : Exception: {ex}");

                throw;
            }

            Trace.TraceInformation("CommitPushed Complete");
        }
Exemplo n.º 8
0
 private IEnumerable <HandlerObject> GetHandlerObjects(ModifiedFileModel modifiedFile)
 {
     return(Subscriptions
            .Where(s => string.Equals(s.Path, modifiedFile.FullPath, StringComparison.OrdinalIgnoreCase))
            .SelectMany(s => s.Handlers));
 }
Exemplo n.º 9
0
        public async Task <IEnumerable <ISubscriptionHandler> > GetSubscriptionHandlers(ModifiedFileModel modifiedFile)
        {
            if (SubscriptionModel == null)
            {
                await InitializeSubscriptionModel();
            }

            return(SubscriptionModel.GetHandlers(modifiedFile));
        }