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