[users at bb.net] build.complete always false?
Greg MacDonald
gmacdonald at trionworlds.com
Thu Feb 4 21:01:29 UTC 2016
Ok will do. This was with 5.
From: Pierre Tardy [mailto:tardyp at gmail.com]
Sent: Thursday, February 04, 2016 1:01 PM
To: Greg MacDonald; users at buildbot.net
Subject: Re: [users at bb.net] build.complete always false?
please retry with beta6, as I'm not sure exactly which version you are.
There were auto-update bugs before beta6, this is for sure.
Le jeu. 4 févr. 2016 à 21:23, Greg MacDonald <gmacdonald at trionworlds.com<mailto:gmacdonald at trionworlds.com>> a écrit :
I’m pretty sure there’s still a bug here. The client isn’t actually dropping the build. It’s appearing in the onChange collection after it’s been cancelled. If I log the entire build instance to the console and drill down I can see complete is true as expected. But logging build.complete returns false. But it shouldn’t be there at all anyway. If I didn’t have the status string I would have no way of removing it from the estimate.
From: Pierre Tardy [mailto:tardyp at gmail.com<mailto:tardyp at gmail.com>]
Sent: Thursday, February 04, 2016 11:54 AM
To: Greg MacDonald; users at buildbot.net<mailto:users at buildbot.net>
Subject: Re: [users at bb.net<mailto:users at bb.net>] build.complete always false?
ahah. I spent some time scratching my head..
ys = data.getBuilds(builderid: builder.builderid, order: '-buildid', complete: false)
You have filter on your collection for complete==False
This means that the server side will filter for complete builds, but this also means that the client side will drop your builds from the collection as soon as they are complete.
So I believe this is a works as I expect (maybe not as you would expect :) )
Le jeu. 4 févr. 2016 à 20:26, Greg MacDonald <gmacdonald at trionworlds.com<mailto:gmacdonald at trionworlds.com>> a écrit :
Hi Pierre, Thanks for taking a look. I’ll update to beta 6 shortly. Seems like maybe an accessor isn’t working or something. The correct value is in the instance.
Edited console output:
build: BuildInstance { … complete: true …
build.complete: false
Here’s my code. It’s a status progress button that sums up the progress from several builders. Like all debug compile checks. Focus on the debug prints in onChange.
class _buildStatus extends Controller
constructor: ($scope, $attrs, dataService, $log, RESULTS, $interval) ->
$scope.builder = $attrs.builder
$scope.name<http://scope.name> = $attrs.name<http://attrs.name>
$scope.status = 'unknown'
$scope.pvalue = 0
builders = $attrs.builders.split(',')
data = dataService.open().closeOnDestroy($scope)
estimates = {}
pending = {}
lastBuildResult = null
arePending = ->
for builderId, startedTimes of pending
for startedTime in startedTimes
return true
return false
filterOutliers = (someArray) ->
# Copy the values, rather than operating on references to existing values
values = someArray.concat()
# Then sort
values.sort (a, b) ->
a - b
### Then find a generous IQR. This is generous because if (values.length / 4)
# is not an int, then really you should average the two elements on either
# side to find q1.
###
q1 = values[Math.floor(values.length / 4)]
# Likewise for q3.
q3 = values[Math.ceil(values.length * 3 / 4)]
iqr = q3 - q1
# Then find min and max values
maxValue = q3 + iqr * 1.5
minValue = q1 - (iqr * 1.5)
# Then filter anything beyond or beneath these values.
values.filter((x) -> x <= maxValue and x >= minValue)
computeEstimate = ->
if not arePending()
return
totalElapsed = 0.0
totalBuildTimes = 0.0
nowTime = (Date.now() / 1000)
totalPending = 0
for builderId, startedTimes of pending
estimatedBuildTime = estimates[builderId]
if not estimatedBuildTime
return
for startedTime in startedTimes
totalPending += 1
elapsedTime = nowTime - startedTime
totalElapsed += elapsedTime
totalBuildTimes += estimates[builderId]
#$log.debug('totalPending: ' + totalPending)
#$log.debug('totalElapsedTime: ' + totalElapsed)
#$log.debug('totalBuildTimes: ' + totalBuildTimes)
$scope.pvalue = Math.min(100, Math.round((totalElapsed / totalBuildTimes) * 100))
#$log.debug('pvalue: ' + $scope.pvalue)
intervalPromise = null
updateState = ->
if intervalPromise != null
$interval.cancel(intervalPromise)
intervalPromise = null
if arePending()
$scope.status = 'active'
intervalPromise = $interval (->
computeEstimate()
), 1000, 0, true
else if lastBuildResult != null
if lastBuildResult != RESULTS.SUCCESS
$scope.status = 'failure'
else
$scope.status = 'success'
else
$scope.status = 'unknown'
for builder in builders
data.getBuilders(name: builder, limit:1).onNew = (builder) ->
builderBuildTimes = []
filteredBuilderBuildTimes = []
pending[builder.builderid] = []
xs = data.getBuilds(builderid: builder.builderId, complete: true, order: '-buildid', limit:500)
xs.onNew = (build) ->
builderBuildTimes.push(build.complete_at - build.started_at)
filteredBuilderBuildTimes = filterOutliers(builderBuildTimes)
if filteredBuilderBuildTimes.length > 0
averageBuildTime = (filteredBuilderBuildTimes.reduce (x, y) -> x + y) / filteredBuilderBuildTimes.length
estimates[builder.builderid] = averageBuildTime
ys = data.getBuilds(builderid: builder.builderid, order: '-buildid', complete: false)
ys.onNew = (build) ->
pending[builder.builderid].push(build.started_at)
updateState()
ys.onChange = (builds) ->
pending[builder.builderid] = []
for build in builds
$log.debug('build: ', build)
$log.debug('build.complete: ', build.complete)
if build.state_string == 'finished'
continue
pending[builder.builderid].push(build.started_at)
updateState()
zs = data.getBuilds(builderid: builder.builderId, order: '-buildid', limit:1)
zs.onNew = (build) ->
lastBuildResult = build.results
updateState()
zs.onChange = (builds) ->
for build in builds
lastBuildResult = build.results
updateState()
break
From: Pierre Tardy [mailto:tardyp at gmail.com<mailto:tardyp at gmail.com>]
Sent: Thursday, February 04, 2016 10:41 AM
To: Greg MacDonald; users at buildbot.net<mailto:users at buildbot.net>
Subject: Re: [users at bb.net<mailto:users at bb.net>] build.complete always false?
Hi Greg,
I think you should share your controller code in order for me to see how you use the data-module.
You should also probably update to beta6 as there as been a number of fixes in the data-module, and UI.
Le mer. 3 févr. 2016 à 20:37, Greg MacDonald <gmacdonald at trionworlds.com<mailto:gmacdonald at trionworlds.com>> a écrit :
Hi Everyone,
I’m having a strange problem with the complete property of a BuildInstance in coffeescript. I’ve registered for on change messages for a build collection, which works great. The only problem is, inside the onChange(build) method I’m always getting false for build.complete, but if I $log.debug the build object itself I can drill down and see that complete is set to true. Other members are fine, like build.number and build.state_string. typeof build.complete is a Boolean.
I’m running through the gulp proxy. And I’m running relatively recent code, I haven’t updated to beta 6 yet though. I’m not sure if that matters. Any ideas?
Thx.
-Greg
_______________________________________________
users mailing list
users at buildbot.net<mailto:users at buildbot.net>
https://lists.buildbot.net/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.buildbot.net/pipermail/users/attachments/20160204/3ac20cf2/attachment.html>
More information about the users
mailing list