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
}
}
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.