You're on your way to the next level! Join the Kudos program to earn points and save your progress.
Level 1: Seed
25 / 150 points
Next: Root
1 badge earned
Challenges come and go, but your rewards stay with you. Do more to earn more!
What goes around comes around! Share the love by gifting kudos to your peers.
Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!
Join now to unlock these features and more
The Atlassian Community can help you and your team get more value out of Atlassian products and practices.
Is the below script runner based Bamboo core JAVA API call still the best way to get this report?
import
com.atlassian.bamboo.resultsummary.AgentResultsSummaryManager
import
com.atlassian.bamboo.resultsummary.BuildResultsSummary
import
com.atlassian.bamboo.util.TextProviderUtils
import
com.atlassian.bamboo.utils.DurationUtils
import
com.atlassian.sal.api.component.ComponentLocator
import
com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import
groovy.transform.BaseScript
import
javax.ws.rs.core.MultivaluedMap
import
javax.ws.rs.core.Response
import
java.util.concurrent.TimeUnit
@BaseScript CustomEndpointDelegate delegate
/**
* End point to retrieve Bamboo agent build activity details.
*
* @return Response wrapping build activity details
*/
getAgentActivityDetails(httpMethod:
"GET"
, groups: [
"bamboo-admin"
]) {
MultivaluedMap queryParams, String body ->
RequestParams requestParams = RequestParams.from(queryParams);
AgentActivityDetailsDto agentActivityDetialsDto = doGetAgentActivityDetialsDto(requestParams)
return
Response.ok(agentActivityDetialsDto).build()
}
/**
* Implementation for retrieving Bamboo agent's activity details.
*
* @Param params from request.
* @return Agent activity details wrapped in an object.
* */
def
doGetAgentActivityDetialsDto(RequestParams params) {
def
AgentActivityDetailsDto agentActivityDetialsDto =
new
AgentActivityDetailsDto();
def
AgentResultsSummaryManager agentManager = ComponentLocator.getComponent(AgentResultsSummaryManager)
List<BuildResultsSummary> allBuildsSummary = agentManager.getAllBuildResultsSummariesForAgent(params.agentId)
def
long
totalQueueDuration = 0L
def
long
totalDuration = 0L
def
long
totalProcessingDuration = 0L
def
long
reportingDaysMills = TimeUnit.DAYS.toMillis(params.reportingDays)
def
long
idleMillis = reportingDaysMills - totalProcessingDuration
allBuildsSummary.
each
{
buildSummary ->
long
duration = buildSummary.duration
long
queueDuration = buildSummary.queueDuration
long
processingDuration = buildSummary.processingDuration
totalQueueDuration += queueDuration
totalProcessingDuration += processingDuration
totalDuration += duration
}
agentActivityDetialsDto.setTotalBuildsCount(allBuildsSummary.
size
())
agentActivityDetialsDto.setIdleTime(formatMillisToTime(idleMillis))
agentActivityDetialsDto.setTotalProcessingDuration(formatMillisToTime(totalProcessingDuration))
agentActivityDetialsDto.setTotalDuration(formatMillisToTime(totalDuration))
agentActivityDetialsDto.setTotalQueueDuration(formatMillisToTime(totalQueueDuration))
return
agentActivityDetialsDto
}
/**
* Formats time in milli second to pretty printing in minutes.
*
* @Param millis
* @return pretty time
* */
def
String formatMillisToTime(
long
millis) {
double
processingDuration = (
double
) millis;
return
processingDuration >
0
.0D ? DurationUtils.getPrettyPrint((
long
) processingDuration) : TextProviderUtils
.
getText
(
"global.unknown"
);
}
class
AgentActivityDetailsDto {
int
totalBuildsCount;
String idleTime;
String totalDuration;
String totalQueueDuration;
String totalProcessingDuration
}
class
RequestParams {
int
agentId;
int
startPage;
int
pageSize;
int
reportingDays;
static
RequestParams from(MultivaluedMap queryParams) {
RequestParams requestParams =
new
RequestParams();
requestParams.setAgentId(queryParams.
get
(
"agentId"
))
requestParams.setReportingDays(queryParams.
get
(
"reportingDays"
))
requestParams.setStartPage(queryParams.
get
(
"startPage"
))
requestParams.setPageSize(queryParams.
get
(
"pageSize"
))
return
requestParams
}
}