using System.Collections; using System.Collections.Generic; using Exortech.NetReflector; using ThoughtWorks.CruiseControl.Remote; using ThoughtWorks.CruiseControl.WebDashboard.Dashboard; using ThoughtWorks.CruiseControl.WebDashboard.IO; using ThoughtWorks.CruiseControl.WebDashboard.MVC; using ThoughtWorks.CruiseControl.WebDashboard.MVC.Cruise; using ThoughtWorks.CruiseControl.WebDashboard.MVC.View; using ThoughtWorks.CruiseControl.WebDashboard.ServerConnection; namespace ThoughtWorks.CruiseControl.WebDashboard.Plugins.ServerReport { /// /// The status of the queues on a server. /// [ReflectorType("queueStatusServerPlugin")] public class QueueStatusServerPlugin : ICruiseAction, IPlugin { private readonly IFarmService farmService; private readonly IVelocityViewGenerator viewGenerator; public QueueStatusServerPlugin(IFarmService farmService, IVelocityViewGenerator viewGenerator) { this.farmService = farmService; this.viewGenerator = viewGenerator; } public IResponse Execute(ICruiseRequest request) { Hashtable velocityContext = new Hashtable(); CruiseServerSnapshotListAndExceptions snapshot = farmService.GetCruiseServerSnapshotListAndExceptions(request.ServerSpecifier); List queues = new List(); for (int snapshotLoop = 0; snapshotLoop < snapshot.Snapshots.Length; snapshotLoop++) { QueueSetSnapshot queueSnapshot = snapshot.Snapshots[snapshotLoop].QueueSetSnapshot; for (int queueLoop = 0; queueLoop < queueSnapshot.Queues.Count; queueLoop++) { queues.Add(queueSnapshot.Queues[queueLoop]); } } velocityContext["queues"] = queues.ToArray(); return viewGenerator.GenerateView(@"ServerQueueStatus.vm", velocityContext); } public string LinkDescription { get { return "View Queue Status"; } } public INamedAction[] NamedActions { get { return new INamedAction[] { new ImmutableNamedAction("ViewServerQueues", this) }; } } } }