blob: c260b9869ef7b0207baffbf59fc06e253165ec2f [file]
package apiGatewayConfDeploy
import (
"io/ioutil"
"net/http"
"net/url"
)
const (
trackerConfigStatusEndpoint = "/serviceconfigstatus"
trackerHeartbeatEndpoint = "/serviceheartbeat/{uuid}"
trackerRegisterEndpoint = "/serviceregister/{uuid}"
)
type trackerClientInterface interface {
putConfigStatus(configId, status, uuid, created string) trackerResponse
postRegister(uuid, pod, created, name, podType, serviceType string) trackerResponse
putHeartbeat(uuid, updated string) trackerResponse
}
type trackerResponse struct {
code int
contentType string
errString string
}
type trackerClient struct {
trackerBaseUrl string
clusterId string
httpclient *http.Client
}
func (t *trackerClient) putConfigStatus(configId, status, uuid, created string) trackerResponse {
uri, err := url.Parse(t.trackerBaseUrl + trackerConfigStatusEndpoint)
if err != nil {
log.Errorf("putConfigStatus failed to parse tracker uri: %v", err)
return (internalError(err))
}
req, err := http.NewRequest("PUT", uri, nil)
req.Header.Add("configid", configId)
req.Header.Add("Authorization", getAuthToken())
req.Header.Add("status", status)
req.Header.Add("uuid", uuid)
req.Header.Add("created", created)
req.Header.Add("clusterid", t.clusterId)
r, err := t.httpclient.Do(req)
if err != nil {
log.Errorf("trackerClient communication error: %v", err)
return (internalError(err))
}
defer r.Body.Close()
res := trackerResponse{}
switch r.StatusCode {
case http.StatusOK:
res.code = r.StatusCode
res.contentType = r.Header.Get("Content-type")
default:
res.code = r.StatusCode
res.contentType = r.Header.Get("Content-type")
body, err := ioutil.ReadAll(r.Body)
if err != nil {
return (internalError(err))
}
res.errString = string(body)
}
return res
}
func (t *trackerClient) postRegister(uuid, pod, created, name, podType, serviceType string) trackerResponse {
uri, err := url.Parse(t.trackerBaseUrl + trackerRegisterEndpoint)
if err != nil {
log.Errorf("postRegister failed to parse tracker uri: %v", err)
return (internalError(err))
}
req, err := http.NewRequest("PUT", uri, nil)
req.Header.Add("uuid", uuid)
req.Header.Add("Authorization", getAuthToken())
req.Header.Add("pod", pod)
req.Header.Add("podtype", podType)
req.Header.Add("created", created)
req.Header.Add("name", name)
req.Header.Add("type", serviceType)
req.Header.Add("clusterid", t.clusterId)
r, err := t.httpclient.Do(req)
if err != nil {
log.Errorf("trackerClient communication error: %v", err)
return (internalError(err))
}
defer r.Body.Close()
res := trackerResponse{}
switch r.StatusCode {
case http.StatusOK:
res.code = r.StatusCode
res.contentType = r.Header.Get("Content-type")
default:
res.code = r.StatusCode
res.contentType = r.Header.Get("Content-type")
body, err := ioutil.ReadAll(r.Body)
if err != nil {
return (internalError(err))
}
res.errString = string(body)
}
return res
}
func (t *trackerClient) putHeartbeat(uuid, updated string) trackerResponse {
uri, err := url.Parse(t.trackerBaseUrl + trackerHeartbeatEndpoint)
if err != nil {
log.Errorf("putHeartbeat failed to parse tracker uri: %v", err)
return (internalError(err))
}
req, err := http.NewRequest("PUT", uri, nil)
req.Header.Add("uuid", uuid)
req.Header.Add("Authorization", getAuthToken())
req.Header.Add("updated", updated)
req.Header.Add("clusterid", t.clusterId)
r, err := t.httpclient.Do(req)
if err != nil {
log.Errorf("trackerClient communication error: %v", err)
return (internalError(err))
}
defer r.Body.Close()
res := trackerResponse{}
switch r.StatusCode {
case http.StatusOK:
res.code = r.StatusCode
res.contentType = r.Header.Get("Content-type")
default:
res.code = r.StatusCode
res.contentType = r.Header.Get("Content-type")
body, err := ioutil.ReadAll(r.Body)
if err != nil {
return (internalError(err))
}
res.errString = string(body)
}
return res
}
func internalError(err error) (res trackerResponse) {
res.code = http.StatusInternalServerError
res.errString = err.Error()
return res
}
func getAuthToken() string {
//TODO
return "Bearer "
}