Intergate OpenPitrix metrics into metering.

Signed-off-by: Rao Yunkun <yunkunrao@yunify.com>
This commit is contained in:
Rao Yunkun
2021-03-29 15:53:22 +08:00
parent ea93f3832d
commit 845f6bbe89
15 changed files with 551 additions and 151 deletions

View File

@@ -6,6 +6,9 @@ import (
"github.com/emicklei/go-restful"
"k8s.io/klog"
"strconv"
"time"
"kubesphere.io/kubesphere/pkg/api"
meteringv1alpha1 "kubesphere.io/kubesphere/pkg/api/metering/v1alpha1"
"kubesphere.io/kubesphere/pkg/apiserver/request"
@@ -15,7 +18,7 @@ import (
monitoringclient "kubesphere.io/kubesphere/pkg/simple/client/monitoring"
)
func (h *tenantHandler) QueryMeterings(req *restful.Request, resp *restful.Response) {
func (h *tenantHandler) QueryMetering(req *restful.Request, resp *restful.Response) {
u, ok := request.UserFrom(req.Request.Context())
if !ok {
@@ -34,14 +37,29 @@ func (h *tenantHandler) QueryMeterings(req *restful.Request, resp *restful.Respo
}
if q.Operation == monitoringv1alpha3.OperationExport {
monitoringv1alpha3.ExportMetrics(resp, res)
start, err := strconv.ParseInt(q.Start, 10, 64)
if err != nil {
api.HandleBadRequest(resp, nil, err)
return
}
end, err := strconv.ParseInt(q.End, 10, 64)
if err != nil {
api.HandleBadRequest(resp, nil, err)
return
}
startTime := time.Unix(start, 0)
endTime := time.Unix(end, 0)
monitoringv1alpha3.ExportMetrics(resp, res, startTime, endTime)
return
}
resp.WriteAsJson(res)
}
func (h *tenantHandler) QueryMeteringsHierarchy(req *restful.Request, resp *restful.Response) {
func (h *tenantHandler) QueryMeteringHierarchy(req *restful.Request, resp *restful.Response) {
u, ok := request.UserFrom(req.Request.Context())
if !ok {
err := fmt.Errorf("cannot obtain user info")

View File

@@ -40,7 +40,6 @@ import (
kubesphere "kubesphere.io/kubesphere/pkg/client/clientset/versioned"
"kubesphere.io/kubesphere/pkg/constants"
"kubesphere.io/kubesphere/pkg/informers"
monitoringv1alpha3 "kubesphere.io/kubesphere/pkg/kapis/monitoring/v1alpha3"
"kubesphere.io/kubesphere/pkg/models"
"kubesphere.io/kubesphere/pkg/models/iam/am"
"kubesphere.io/kubesphere/pkg/models/monitoring"
@@ -301,10 +300,9 @@ func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8s
Returns(http.StatusOK, api.StatusOK, auditingv1alpha1.APIResponse{}))
ws.Route(ws.GET("/metering").
To(handler.QueryMeterings).
To(handler.QueryMetering).
Doc("Get meterings against the cluster.").
Param(ws.QueryParameter("level", "Metering level.").DataType("string").Required(true)).
Param(ws.QueryParameter("operation", "Metering operation.").DataType("string").Required(false).DefaultValue(monitoringv1alpha3.OperationQuery)).
Param(ws.QueryParameter("node", "Node name.").DataType("string").Required(false)).
Param(ws.QueryParameter("workspace", "Workspace name.").DataType("string").Required(false)).
Param(ws.QueryParameter("namespace", "Namespace name.").DataType("string").Required(false)).
@@ -330,7 +328,7 @@ func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8s
Returns(http.StatusOK, api.StatusOK, monitoring.Metrics{}))
ws.Route(ws.GET("/namespaces/{namespace}/metering/hierarchy").
To(handler.QueryMeteringsHierarchy).
To(handler.QueryMeteringHierarchy).
Param(ws.PathParameter("namespace", "Namespace name.").DataType("string").Required(false)).
Param(ws.QueryParameter("metrics_filter", "The metric name filter consists of a regexp pattern. It specifies which metric data to return. For example, the following filter matches both workspace CPU usage and memory usage: `meter_pod_cpu_usage|meter_pod_memory_usage_wo_cache`.").DataType("string").Required(false)).
Param(ws.QueryParameter("time", "A timestamp in Unix time format. Retrieve metric data at a single point in time. Defaults to now. Time and the combination of start, end, step are mutually exclusive.").DataType("string").Required(false)).