remote agent now working and tested

This commit is contained in:
Brad Rydzewski 2015-05-18 21:53:34 -07:00
parent 7aedd78015
commit e09f02db9e
5 changed files with 28 additions and 19 deletions

View file

@ -59,7 +59,7 @@
</section>
<section>
<pre id="term" ng-if="task && task.state !== 'pending'">{{ logs }}</pre>
<pre id="term"></pre>
</section>

View file

@ -40,6 +40,14 @@ func (u *updater) SetCommit(user *common.User, r *common.Repo, c *common.Commit)
// log err
}
// we need this because builds coming from
// a remote agent won't have the embedded
// build list. we should probably just rethink
// the messaging instead of this hack.
if c.Builds == nil || len(c.Builds) == 0 {
c.Builds, _ = u.store.BuildList(c)
}
msg, err := json.Marshal(c)
if err != nil {
return err
@ -59,6 +67,14 @@ func (u *updater) SetBuild(r *common.Repo, c *common.Commit, b *common.Build) er
return err
}
// we need this because builds coming from
// a remote agent won't have the embedded
// build list. we should probably just rethink
// the messaging instead of this hack.
if c.Builds == nil || len(c.Builds) == 0 {
c.Builds, _ = u.store.BuildList(c)
}
msg, err := json.Marshal(c)
if err != nil {
return err

View file

@ -1,6 +1,7 @@
package server
import (
"fmt"
"io"
"net/http"
"strconv"
@ -50,6 +51,7 @@ func GetRepoEvents(c *gin.Context) {
}
func GetStream(c *gin.Context) {
conf := ToSettings(c)
store := ToDatastore(c)
repo := ToRepo(c)
runner := ToRunner(c)
@ -71,12 +73,17 @@ func GetStream(c *gin.Context) {
var rc io.ReadCloser
addr, err := store.Agent(commit)
// if the commit is being executed by an agent
// we'll proxy the build output directly to the
// remote Docker client, through the agent.
if err == nil {
resp, err := http.Get("http://" + addr)
if conf.Agents != nil && conf.Agents.Secret != "" {
addr, err := store.Agent(commit)
if err != nil {
c.Fail(500, err)
return
}
url := fmt.Sprintf("http://%s/stream/%d?token=%s", addr, build.ID, conf.Agents.Secret)
resp, err := http.Get(url)
if err != nil {
c.Fail(500, err)
return

View file

@ -17,7 +17,7 @@ func NewAgentstore(db *sql.DB) *Agentstore {
// Agent returns an agent by ID.
func (db *Agentstore) Agent(commit *common.Commit) (string, error) {
var agent = new(common.Agent)
var agent = new(agent)
var err = meddler.QueryRow(db, agent, rebind(agentQuery), commit.ID)
return agent.Addr, err
}

View file

@ -1,14 +0,0 @@
package types
// Agent represents a worker that has connected
// to the system in order to perform work
type Agent struct {
ID int64 `meddler:"agent_id,pk" json:"id,omitempty"`
Kind string `meddler:"agent_kind" json:"kind,omitempty"`
Addr string `meddler:"agent_addr" json:"address"`
Token string `meddler:"agent_token" json:"token"`
Cert string `meddler:"agent_cert" json:"-"`
Key string `meddler:"agent_key" json:"-"`
Active bool `meddler:"agent_active" json:"is_active"`
IsHealthy bool `meddler:"-" json:"is_healthy,omitempty"`
}