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; $scope.commit = data;
if (data.status!='Started' && data.status!='Pending') { 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){ stdout.subscribe(data.id, function(out){
@ -256,13 +262,6 @@ app.controller("CommitController", function($scope, $http, $routeParams, stdout,
console.log(data); 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); callback(event.data);
} }
}; };
websocket.onclose = function(event) {
console.log('websocket closed at '+path);
};
}; };
this.unsubscribe = function() { this.unsubscribe = function() {

View file

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

View file

@ -87,10 +87,6 @@ func main() {
// cancel all previously running builds // cancel all previously running builds
go commits.CancelAll() 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) queue := make(chan *worker.Request)
workers := make(chan chan *worker.Request) workers := make(chan chan *worker.Request)
worker.NewDispatch(queue, workers).Start() 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) { 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 { func (b *Buffer) Bytes() []byte {

View file

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

View file

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