Skip to content

Commit

Permalink
Merge pull request #99 from linkernetworks/phstsai/VX-182
Browse files Browse the repository at this point in the history
DEV VX-182: Add list nics API for certain node
  • Loading branch information
Hung-Wei Chiu authored Jul 16, 2018
2 parents f62d487 + 977cbf0 commit ddf35c0
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 4 deletions.
72 changes: 72 additions & 0 deletions API.md
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,78 @@ Response Data:
}
```

### List NICs of certain node

**Get /v1/monitoring/nodes/{id}/nics**

Example:
```
curl -X GET http://localhost:7890/v1/monitoring/nodes/vortex-dev/nics
```

Response Data:
``` json
{
"nics": [
{
"name": "cni0",
"default": "false",
"type": "virtual"
},
{
"name": "docker0",
"default": "false",
"type": "virtual"
},
{
"name": "enp0s8",
"default": "false",
"type": "physical"
},
{
"name": "flannel.1",
"default": "false",
"type": "virtual"
},
{
"name": "lo",
"default": "false",
"type": "virtual"
},
{
"name": "veth22ed2ac7",
"default": "false",
"type": "virtual"
},
{
"name": "veth256ca549",
"default": "false",
"type": "virtual"
},
{
"name": "veth734c84cf",
"default": "false",
"type": "virtual"
},
{
"name": "vethd7819e83",
"default": "false",
"type": "virtual"
},
{
"name": "vethdc767f86",
"default": "false",
"type": "virtual"
},
{
"name": "enp0s3",
"default": "true",
"type": "physical"
}
]
}
```

### List Pod
**GET /v1/monitoring/pods?namespace=\.\*&node=\.\*&deployment=\.***

Expand Down
10 changes: 10 additions & 0 deletions src/entity/metrics_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ type NICMetrics struct {
NICNetworkTraffic NICNetworkTrafficMetrics `json:"nicNetworkTraffic"`
}

type NICOverviewMetrics struct {
Name string `json:"name"`
Default string `json:"default"`
Type string `json:"type"`
}

type NodeResourceMetrics struct {
CPURequests float32 `json:"cpuRequests"`
CPULimits float32 `json:"cpuLimits"`
Expand All @@ -40,6 +46,10 @@ type NodeDetailMetrics struct {
Labels map[string]string `json:"labels"`
}

type NodeNICsMetrics struct {
NICs []NICOverviewMetrics `json:"nics"`
}

type NodeMetrics struct {
Detail NodeDetailMetrics `json:"detail"`
Resource NodeResourceMetrics `json:"resource"`
Expand Down
22 changes: 22 additions & 0 deletions src/prometheuscontroller/expression.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,28 @@ func ListResource(sp *serviceprovider.Container, resource model.LabelName, expre
return resourceList, nil
}

func ListNodeNICs(sp *serviceprovider.Container, id string) (entity.NodeNICsMetrics, error) {
nicList := entity.NodeNICsMetrics{}
expression := Expression{}
expression.Metrics = []string{"node_network_interface"}
expression.QueryLabels = map[string]string{"node": id}

results, err := getElements(sp, expression)
if err != nil {
return nicList, err
}

for _, result := range results {
nic := entity.NICOverviewMetrics{}
nic.Name = string(result.Metric["device"])
nic.Default = string(result.Metric["default"])
nic.Type = string(result.Metric["type"])
nicList.NICs = append(nicList.NICs, nic)
}

return nicList, nil
}

func GetPod(sp *serviceprovider.Container, id string) (entity.PodMetrics, error) {
pod := entity.PodMetrics{}
pod.Labels = map[string]string{}
Expand Down
19 changes: 15 additions & 4 deletions src/prometheuscontroller/expression_test.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package prometheuscontroller

import (
"github.com/linkernetworks/vortex/src/config"
"github.com/linkernetworks/vortex/src/serviceprovider"
"github.com/prometheus/common/model"
"github.com/stretchr/testify/suite"
"math/rand"
"os"
"testing"
"time"

"github.com/linkernetworks/vortex/src/config"
"github.com/linkernetworks/vortex/src/serviceprovider"
"github.com/prometheus/common/model"
"github.com/stretchr/testify/suite"
)

func init() {
Expand Down Expand Up @@ -57,6 +58,16 @@ func (suite *PrometheusExpressionTestSuite) TestListResourceFail() {
suite.Error(err)
}

func (suite *PrometheusExpressionTestSuite) TestListNodeNICs() {
nodes, err := suite.sp.KubeCtl.GetNodes()
suite.NoError(err)
nodeName := nodes[0].GetName()

nicList, err := ListNodeNICs(suite.sp, nodeName)
suite.NoError(err)
suite.NotEqual(0, len(nicList.NICs))
}

func (suite *PrometheusExpressionTestSuite) TestGetPod() {
pods, err := suite.sp.KubeCtl.GetPods()
suite.NoError(err)
Expand Down
15 changes: 15 additions & 0 deletions src/server/handler_prometheus.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,21 @@ func listNodeMetricsHandler(ctx *web.Context) {
resp.WriteEntity(containerList)
}

func listNodeNicsMetricsHandler(ctx *web.Context) {
sp, req, resp := ctx.ServiceProvider, ctx.Request, ctx.Response

nicList := entity.NodeNICsMetrics{}
id := req.PathParameter("id")

nicList, err := pc.ListNodeNICs(sp, id)
if err != nil {
response.InternalServerError(req.Request, resp.ResponseWriter, err)
return
}

resp.WriteEntity(nicList)
}

func getNodeMetricsHandler(ctx *web.Context) {
sp, req, resp := ctx.ServiceProvider, ctx.Request, ctx.Response

Expand Down
1 change: 1 addition & 0 deletions src/server/route.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ func newMonitoringService(sp *serviceprovider.Container) *restful.WebService {
// node
webService.Route(webService.GET("/nodes").To(handler.RESTfulServiceHandler(sp, listNodeMetricsHandler)))
webService.Route(webService.GET("/nodes/{id}").To(handler.RESTfulServiceHandler(sp, getNodeMetricsHandler)))
webService.Route(webService.GET("/nodes/{id}/nics").To(handler.RESTfulServiceHandler(sp, listNodeNicsMetricsHandler)))
// pod
webService.Route(webService.GET("/pods").To(handler.RESTfulServiceHandler(sp, listPodMetricsHandler)))
webService.Route(webService.GET("/pods/{id}").To(handler.RESTfulServiceHandler(sp, getPodMetricsHandler)))
Expand Down

0 comments on commit ddf35c0

Please sign in to comment.