diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..559de00 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +[Tags on this repository](https://github.com/AndreyVMarkelov/bamboo-prometheus-exporter/releases) + +## [Unreleased] + +## [1.0.5] (v5.8.x-6.9.x) + +- Added new metric: bamboo_plans_gauge (plans count) +- Added new metric: bamboo_plans_workers_idle_gauge +- Added new metric: bamboo_plans_workers_busy_gauge +- Added new metric: bamboo_plans_workers_queue_gauge +- Support Bamboo v6.9.x diff --git a/pom.xml b/pom.xml index efe1db6..f4e5875 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 ru.andreymarkelov.atlas.plugins prom-bamboo-exporter - 1.0.4 + 1.0.5 atlassian-plugin Prometheus Exporter For Bamboo @@ -84,7 +84,7 @@ - 5.4.2 + 5.8.0 ${bamboo.version} 6.3.21 0.6.0 diff --git a/src/main/java/ru/andreymarkelov/atlas/plugins/prombambooexporter/manager/MetricCollectorImpl.java b/src/main/java/ru/andreymarkelov/atlas/plugins/prombambooexporter/manager/MetricCollectorImpl.java index aa601e5..caa6d1e 100644 --- a/src/main/java/ru/andreymarkelov/atlas/plugins/prombambooexporter/manager/MetricCollectorImpl.java +++ b/src/main/java/ru/andreymarkelov/atlas/plugins/prombambooexporter/manager/MetricCollectorImpl.java @@ -1,10 +1,12 @@ package ru.andreymarkelov.atlas.plugins.prombambooexporter.manager; -import java.util.ArrayList; -import java.util.List; - import com.atlassian.bamboo.buildqueue.manager.AgentManager; +import com.atlassian.bamboo.event.spi.ExecutorStats; import com.atlassian.bamboo.license.BambooLicenseManager; +import com.atlassian.bamboo.plan.NonBlockingPlanExecutionService; +import com.atlassian.bamboo.plan.PlanManager; +import com.atlassian.bamboo.plan.TopLevelPlan; +import com.atlassian.bamboo.plan.branch.ChainBranch; import com.atlassian.extras.api.bamboo.BambooLicense; import io.prometheus.client.Collector; import io.prometheus.client.CollectorRegistry; @@ -16,6 +18,9 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; +import java.util.ArrayList; +import java.util.List; + import static java.util.Collections.emptyList; import static java.util.concurrent.TimeUnit.DAYS; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -26,6 +31,8 @@ public class MetricCollectorImpl extends Collector implements MetricCollector, I private final CollectorRegistry registry; private final BambooLicenseManager bambooLicenseManager; private final AgentManager agentManager; + private final NonBlockingPlanExecutionService nonBlockingPlanExecutionService; + private final PlanManager planManager; //--> Common @@ -81,6 +88,7 @@ public class MetricCollectorImpl extends Collector implements MetricCollector, I .create(); //--> License + private final Gauge maintenanceExpiryDaysGauge = Gauge.build() .name("bamboo_maintenance_expiry_days_gauge") .help("Maintenance Expiry Days Gauge") @@ -96,14 +104,45 @@ public class MetricCollectorImpl extends Collector implements MetricCollector, I .help("Allowed Users Gauge") .create(); + //--> Plans + + private final Gauge plansGauge = Gauge.build() + .name("bamboo_plans_gauge") + .help("Plans By Type (top, branch) Gauge") + .labelNames("type") + .create(); + + //--> Workers + + private final Gauge planWorkerIdleGauge = Gauge.build() + .name("bamboo_plans_workers_idle_gauge") + .help("Plan Workers Idle Gauge") + .create(); + + private final Gauge planWorkerBusyGauge = Gauge.build() + .name("bamboo_plans_workers_busy_gauge") + .help("Plan Workers Busy Gauge") + .create(); + + private final Gauge planWorkerQueueGauge = Gauge.build() + .name("bamboo_plans_workers_queue_gauge") + .help("Plan Workers Queue Size Gauge") + .create(); + public MetricCollectorImpl( BambooLicenseManager bambooLicenseManager, - AgentManager agentManager) { + AgentManager agentManager, + NonBlockingPlanExecutionService nonBlockingPlanExecutionService, + PlanManager planManager) { this.bambooLicenseManager = bambooLicenseManager; this.agentManager = agentManager; + this.nonBlockingPlanExecutionService = nonBlockingPlanExecutionService; + this.planManager = planManager; this.registry = CollectorRegistry.defaultRegistry; } + // Implementations + //--> Common @Override @@ -157,18 +196,37 @@ private List collectInternal() { activeAgentsGauge.set(agentManager.getActiveAndEnabledAgents().size()); busyAgentsGauge.set(agentManager.getBusyBuildAgents().size()); + // plans + plansGauge.labels("top").set(planManager.getPlanCount(TopLevelPlan.class)); + plansGauge.labels("branch").set(planManager.getPlanCount(ChainBranch.class)); + + // workers + final ExecutorStats planExecutorStats = this.nonBlockingPlanExecutionService.getExecutorStats(); + final int planExecutorStatsActiveCount = planExecutorStats.getActiveCount(); + planWorkerIdleGauge.set(planExecutorStats.getPoolSize() - planExecutorStatsActiveCount); + planWorkerBusyGauge.set(planExecutorStatsActiveCount); + planWorkerQueueGauge.set(planExecutorStats.getEventsQueue().size()); + List result = new ArrayList<>(); result.addAll(errorsCounter.collect()); result.addAll(finishedBuildsCounter.collect()); result.addAll(canceledBuildsCounter.collect()); result.addAll(finishedDeploysCounter.collect()); result.addAll(buildQueueTimeoutCounter.collect()); + // license result.addAll(maintenanceExpiryDaysGauge.collect()); result.addAll(licenseExpiryDaysGauge.collect()); result.addAll(allowedUsersGauge.collect()); + // agents result.addAll(allAgentsGauge.collect()); result.addAll(activeAgentsGauge.collect()); result.addAll(busyAgentsGauge.collect()); + // plans + result.addAll(plansGauge.collect()); + // workers + result.addAll(planWorkerIdleGauge.collect()); + result.addAll(planWorkerBusyGauge.collect()); + result.addAll(planWorkerQueueGauge.collect()); return result; } diff --git a/src/main/resources/ru/andreymarkelov/atlas/plugins/prombambooexporter/images/prom-exporter.png b/src/main/resources/ru/andreymarkelov/atlas/plugins/prombambooexporter/images/prom-exporter.png index 1e3f57d..3e57401 100644 Binary files a/src/main/resources/ru/andreymarkelov/atlas/plugins/prombambooexporter/images/prom-exporter.png and b/src/main/resources/ru/andreymarkelov/atlas/plugins/prombambooexporter/images/prom-exporter.png differ