fixed issue w/ buffer blocking on write to websocket

This commit is contained in:
Brad Rydzewski 2014-07-11 16:52:22 -07:00
parent fa0213ab8d
commit 6375eaa552
7 changed files with 22 additions and 22 deletions

View file

@ -245,7 +245,13 @@ app.controller("CommitController", function($scope, $http, $routeParams, stdout,
$scope.commit = data;
if (data.status!='Started' && data.status!='Pending') {
return;
$http({method: 'GET', url: '/v1/repos/'+remote+'/'+owner+"/"+name+"/branches/"+branch+"/commits/"+commit+"/console"}).
success(function(data, status, headers, config) {
$scope.console = data;
}).
error(function(data, status, headers, config) {
console.log(data);
});
}
stdout.subscribe(data.id, function(out){
@ -256,13 +262,6 @@ app.controller("CommitController", function($scope, $http, $routeParams, stdout,
console.log(data);
});
// load the repo build stdout
$http({method: 'GET', url: '/v1/repos/'+remote+'/'+owner+"/"+name+"/branches/"+branch+"/commits/"+commit+"/console"}).
success(function(data, status, headers, config) {
$scope.console = data;
}).
error(function(data, status, headers, config) {
console.log(data);
});
});

View file

@ -16,6 +16,9 @@ angular.module('app').service('stdout', ['$window', function($window) {
callback(event.data);
}
};
websocket.onclose = function(event) {
console.log('websocket closed at '+path);
};
};
this.unsubscribe = function() {

View file

@ -6,8 +6,8 @@
</dl>
</div>
<dl>
<dd><h1>3.5 ms</h1></dd>
<dl ng-if="commit.duration != 0">
<dd><h1>{{ commit.duration | toDuration}}</h1></dd>
</dl>
<dl>
@ -19,7 +19,7 @@
</aside>
<div id="main" class="output">
<div id="main" class="output" data-result="Failure">
<div id="main" class="output" data-result="{{ commit.status }}">
<nav>
<a href="/"><span class="fa fa-th"></span></a>
<span>{{ repo.owner }}</span>

View file

@ -87,10 +87,6 @@ func main() {
// cancel all previously running builds
go commits.CancelAll()
// setup the build queue
//queueRunner := queue.NewBuildRunner(docker.New(), timeout)
//queue := queue.Start(work ers, commits, queueRunner)
queue := make(chan *worker.Request)
workers := make(chan chan *worker.Request)
worker.NewDispatch(queue, workers).Start()

View file

@ -22,7 +22,9 @@ func (b *Buffer) Write(p []byte) (n int, err error) {
}
func (b *Buffer) WriteString(s string) (n int, err error) {
return b.Write([]byte(s))
n, err = b.buf.WriteString(s)
b.channel.Publish([]byte(s))
return
}
func (b *Buffer) Bytes() []byte {

View file

@ -29,8 +29,7 @@ func NewChannel(opts *Opts) *Channel {
}
func (c *Channel) Publish(data interface{}) {
c.broadcast <- data
return
go func() { c.broadcast <- data }()
}
func (c *Channel) Subscribe() *Subscription {

View file

@ -81,7 +81,7 @@ func (w *worker) Stop() {
func (w *worker) Execute(r *Request) {
// mark the build as Started and update the database
r.Commit.Status = model.StatusStarted
r.Commit.Started = time.Now().Unix()
r.Commit.Started = time.Now().UTC().Unix()
w.commits.Update(r.Commit)
// notify all listeners that the build is started
@ -129,7 +129,7 @@ func (w *worker) Execute(r *Request) {
builder.Repo = repo
builder.Stdout = buf
builder.Key = []byte(r.Repo.PrivateKey)
builder.Timeout = time.Duration(r.Repo.Timeout) * time.Minute
builder.Timeout = time.Duration(r.Repo.Timeout) * time.Second
builder.Privileged = r.Repo.Privileged
// run the build
@ -140,6 +140,7 @@ func (w *worker) Execute(r *Request) {
switch {
case err != nil:
r.Commit.Status = model.StatusError
log.Printf("Error building %s, Err: %s", r.Commit.Sha, err)
buf.WriteString(err.Error())
case builder.BuildState == nil:
r.Commit.Status = model.StatusFailure
@ -151,7 +152,7 @@ func (w *worker) Execute(r *Request) {
// calcualte the build finished and duration details and
// update the commit
r.Commit.Finished = time.Now().Unix()
r.Commit.Finished = time.Now().UTC().Unix()
r.Commit.Duration = (r.Commit.Finished - r.Commit.Started)
w.commits.Update(r.Commit)
w.commits.UpdateOutput(r.Commit, buf.Bytes())