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>()); }
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); }
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); }
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"); }
private IEnumerable <HandlerObject> GetHandlerObjects(ModifiedFileModel modifiedFile) { return(Subscriptions .Where(s => string.Equals(s.Path, modifiedFile.FullPath, StringComparison.OrdinalIgnoreCase)) .SelectMany(s => s.Handlers)); }
public async Task <IEnumerable <ISubscriptionHandler> > GetSubscriptionHandlers(ModifiedFileModel modifiedFile) { if (SubscriptionModel == null) { await InitializeSubscriptionModel(); } return(SubscriptionModel.GetHandlers(modifiedFile)); }