feature(manager): skeleton of status API

This commit is contained in:
bigeagle 2016-04-10 22:28:34 +08:00
parent 350767e501
commit ed896b16c1
No known key found for this signature in database
GPG Key ID: 9171A4571C27920A
3 changed files with 75 additions and 0 deletions

View File

@ -24,6 +24,8 @@ type ServerConfig struct {
type FileConfig struct {
StatusFile string `toml:"status_file"`
DBFile string `toml:"db_file"`
// used to connect to worker
CACert string `toml:"ca_cert"`
}
func loadConfig(cfgFile string, c *cli.Context) (*Config, error) {

36
manager/server.go Normal file
View File

@ -0,0 +1,36 @@
package manager
import (
"net/http"
"github.com/gin-gonic/gin"
)
type worker struct {
// worker name
name string
// url to connect to worker
url string
// session token
token string
}
func makeHTTPServer(debug bool) *gin.Engine {
if !debug {
gin.SetMode(gin.ReleaseMode)
}
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"msg": "pong"})
})
// List jobs, status page
r.GET("/jobs", func(c *gin.Context) {})
// worker online
r.POST("/workers/:name", func(c *gin.Context) {})
// post job list
r.POST("/workers/:name/jobs", func(c *gin.Context) {})
// post job status
r.POST("/workers/:name/jobs/:job", func(c *gin.Context) {})
return r
}

37
manager/server_test.go Normal file
View File

@ -0,0 +1,37 @@
package manager
import (
"encoding/json"
"fmt"
"io/ioutil"
"math/rand"
"net/http"
"testing"
"time"
. "github.com/smartystreets/goconvey/convey"
)
func TestHTTPServer(t *testing.T) {
Convey("HTTP server should work", t, func() {
s := makeHTTPServer(false)
So(s, ShouldNotBeNil)
port := rand.Intn(10000) + 20000
go func() {
s.Run(fmt.Sprintf("127.0.0.1:%d", port))
}()
time.Sleep(50 * time.Microsecond)
resp, err := http.Get(fmt.Sprintf("http://127.0.0.1:%d/ping", port))
So(err, ShouldBeNil)
So(resp.StatusCode, ShouldEqual, http.StatusOK)
So(resp.Header.Get("Content-Type"), ShouldEqual, "application/json; charset=utf-8")
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
So(err, ShouldBeNil)
var p map[string]string
err = json.Unmarshal(body, &p)
So(err, ShouldBeNil)
So(p["msg"], ShouldEqual, "pong")
})
}