提交 f54dd2cf 编写于 作者: J jeff

refactor resource interface

Signed-off-by: Njeff <jeffzhang@yunify.com>
上级 92427183
...@@ -18,6 +18,7 @@ package container ...@@ -18,6 +18,7 @@ package container
import ( import (
"strings" "strings"
"time"
"github.com/emicklei/go-restful" "github.com/emicklei/go-restful"
"github.com/golang/glog" "github.com/golang/glog"
...@@ -25,14 +26,16 @@ import ( ...@@ -25,14 +26,16 @@ import (
func logFilter() restful.FilterFunction { func logFilter() restful.FilterFunction {
return func(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) { return func(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
start := time.Now()
chain.ProcessFilter(req, resp) chain.ProcessFilter(req, resp)
glog.Infof("%s - \"%s %s %s\" %d %d", glog.Infof("%s - \"%s %s %s\" %d %d in %dms",
strings.Split(req.Request.RemoteAddr, ":")[0], strings.Split(req.Request.RemoteAddr, ":")[0],
req.Request.Method, req.Request.Method,
req.Request.URL.RequestURI(), req.Request.URL.RequestURI(),
req.Request.Proto, req.Request.Proto,
resp.StatusCode(), resp.StatusCode(),
resp.ContentLength(), resp.ContentLength(),
time.Since(start)/time.Millisecond,
) )
} }
} }
...@@ -166,15 +166,7 @@ func getStatusAndRestartCount(pod v1.Pod) (string, int) { ...@@ -166,15 +166,7 @@ func getStatusAndRestartCount(pod v1.Pod) (string, int) {
} }
func (ctl *PodCtl) generateObject(item v1.Pod) *Pod { func (ctl *PodCtl) generateObject(item v1.Pod) *Pod {
name := item.Name
namespace := item.Namespace
podIp := item.Status.PodIP
nodeName := item.Spec.NodeName
nodeIp := item.Status.HostIP
status, restartCount := getStatusAndRestartCount(item)
createTime := item.CreationTimestamp.Time
containerStatus := item.Status.ContainerStatuses
containerSpecs := item.Spec.Containers
var ownerKind, ownerName string var ownerKind, ownerName string
// For ReplicaSet,ReplicaController,DaemonSet,StatefulSet,Job,CronJob, k8s will automatically // For ReplicaSet,ReplicaController,DaemonSet,StatefulSet,Job,CronJob, k8s will automatically
...@@ -184,37 +176,18 @@ func (ctl *PodCtl) generateObject(item v1.Pod) *Pod { ...@@ -184,37 +176,18 @@ func (ctl *PodCtl) generateObject(item v1.Pod) *Pod {
ownerName = item.OwnerReferences[0].Name ownerName = item.OwnerReferences[0].Name
} }
var containers Containers
for _, containerSpec := range containerSpecs {
var container Container
container.Name = containerSpec.Name
container.Image = containerSpec.Image
container.Ports = containerSpec.Ports
container.Resources = containerSpec.Resources
for _, status := range containerStatus {
if container.Name == status.Name {
container.Ready = status.Ready
}
}
containers = append(containers, container)
}
object := &Pod{ object := &Pod{
Namespace: namespace, Namespace: item.Namespace,
Name: name, Name: item.Name,
Node: nodeName, Node: item.Spec.NodeName,
PodIp: podIp, Status: item.Status,
Status: status, CreateTime: item.CreationTimestamp.Time,
NodeIp: nodeIp, OwnerKind: ownerKind,
CreateTime: createTime, OwnerName: ownerName,
Annotation: MapString{item.Annotations}, Spec: item.Spec,
Containers: containers, Metadata: item.ObjectMeta,
RestartCount: restartCount, Kind: item.TypeMeta.Kind,
OwnerKind: ownerKind, APIVersion: item.TypeMeta.APIVersion,
OwnerName: ownerName,
Labels: MapString{item.Labels},
} }
return object return object
......
...@@ -19,6 +19,9 @@ package controllers ...@@ -19,6 +19,9 @@ package controllers
import ( import (
"time" "time"
"github.com/golang/glog"
v12 "k8s.io/apimachinery/pkg/apis/meta/v1"
"database/sql/driver" "database/sql/driver"
"encoding/json" "encoding/json"
"errors" "errors"
...@@ -210,19 +213,65 @@ type Ingress struct { ...@@ -210,19 +213,65 @@ type Ingress struct {
} }
type Pod struct { type Pod struct {
Name string `gorm:"primary_key" json:"name"` // search and sort field, not seen in response
Namespace string `gorm:"primary_key" json:"namespace"` Name string `gorm:"primary_key" json:"-"`
Status string `json:"status,omitempty"` Namespace string `gorm:"primary_key" json:"-"`
Node string `json:"node,omitempty"` Node string `json:"-"`
NodeIp string `gorm:"column:nodeIp" json:"nodeIp,omitempty"` OwnerKind string `gorm:"column:ownerKind" json:"-"`
PodIp string `gorm:"column:podIp" json:"podIp,omitempty"` OwnerName string `gorm:"column:ownerName" json:"-"`
Containers Containers `gorm:"type:text" json:"containers,omitempty"` CreateTime time.Time `gorm:"column:createTime" json:"-"`
Annotation MapString `json:"annotations"`
Labels MapString `json:"labels"` // Kubernetes Standard Pod Specification
OwnerKind string `gorm:"column:ownerKind" json:"ownerKind,omitempty"` Kind string `json:"kind,omitempty"`
OwnerName string `gorm:"column:ownerName" json:"ownerName,omitempty"` APIVersion string `gorm:"column:apiVersion" json:"apiVersion,omitempty"`
RestartCount int `json:"restartCount"` Spec v1.PodSpec `sql:"-" json:"spec,omitempty"`
CreateTime time.Time `gorm:"column:createTime" json:"createTime,omitempty"` Metadata v12.ObjectMeta `sql:"-" json:"metadata,omitempty"`
Status v1.PodStatus `sql:"-" json:"status,omitempty"`
// shadow field, used only for database
MetadataString string `gorm:"column:metadata;type:text" json:"-"`
SpecString string `gorm:"column:podSpec;type:text" json:"-"`
StatusString string `gorm:"column:status;type:text" json:"-"`
}
func (pod *Pod) AfterFind(scope *gorm.Scope) (err error) {
if err = json.Unmarshal([]byte(pod.SpecString), &pod.Spec); err != nil {
glog.Errorln(err)
}
if err = json.Unmarshal([]byte(pod.MetadataString), &pod.Metadata); err != nil {
glog.Errorln(err)
}
if err = json.Unmarshal([]byte(pod.StatusString), &pod.Status); err != nil {
glog.Errorln(err)
}
return nil
}
func (pod *Pod) BeforeSave(scope *gorm.Scope) (err error) {
if bytes, err := json.Marshal(pod.Spec); err == nil {
pod.SpecString = string(bytes)
} else {
glog.Errorln(err)
}
if bytes, err := json.Marshal(pod.Metadata); err == nil {
pod.MetadataString = string(bytes)
} else {
glog.Errorln(err)
}
if bytes, err := json.Marshal(pod.Status); err == nil {
pod.StatusString = string(bytes)
} else {
glog.Errorln(err)
}
return nil
} }
type Container struct { type Container struct {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册