未验证 提交 35100c83 编写于 作者: R runzexia

Merge branch 'master' into devops-docs

Signed-off-by: Nrunzexia <runzexia@yunify.com>

# Conflicts:
#	pkg/apis/tenant/v1alpha2/register.go
...@@ -28,6 +28,7 @@ import ( ...@@ -28,6 +28,7 @@ import (
"kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models"
"kubesphere.io/kubesphere/pkg/models/iam/policy" "kubesphere.io/kubesphere/pkg/models/iam/policy"
"net/http" "net/http"
"time"
) )
const GroupName = "iam.kubesphere.io" const GroupName = "iam.kubesphere.io"
...@@ -39,15 +40,74 @@ var ( ...@@ -39,15 +40,74 @@ var (
AddToContainer = WebServiceBuilder.AddToContainer AddToContainer = WebServiceBuilder.AddToContainer
) )
type UserUpdateRequest struct {
Username string `json:"username" description:"username"`
Email string `json:"email" description:"email address"`
Lang string `json:"lang" description:"user's language setting, default is zh-CN"`
Description string `json:"description" description:"user's description"`
Password string `json:"password,omitempty" description:"this is necessary if you need to change your password"`
CurrentPassword string `json:"current_password,omitempty" description:"this is necessary if you need to change your password"`
ClusterRole string `json:"cluster_role" description:"user's cluster role"`
}
type CreateUserRequest struct {
Username string `json:"username" description:"username"`
Email string `json:"email" description:"email address"`
Lang string `json:"lang,omitempty" description:"user's language setting, default is zh-CN"`
Description string `json:"description" description:"user's description"`
Password string `json:"password" description:"password'"`
ClusterRole string `json:"cluster_role" description:"user's cluster role"`
}
type UserList struct {
Items []struct {
Username string `json:"username" description:"username"`
Email string `json:"email" description:"email address"`
Lang string `json:"lang,omitempty" description:"user's language setting, default is zh-CN"`
Description string `json:"description" description:"user's description"`
ClusterRole string `json:"cluster_role" description:"user's cluster role"`
CreateTime time.Time `json:"create_time" description:"user creation time"`
LastLoginTime time.Time `json:"last_login_time" description:"last login time"`
} `json:"items" description:"paging data"`
TotalCount int `json:"total_count" description:"total count"`
}
type ClusterRoleList struct {
Items []rbacv1.ClusterRole `json:"items" description:"paging data"`
TotalCount int `json:"total_count" description:"total count"`
}
type LoginLog struct {
LoginTime string `json:"login_time" description:"last login time"`
LoginIP string `json:"login_ip" description:"last login ip"`
}
type RoleList struct {
Items []rbacv1.Role `json:"items" description:"paging data"`
TotalCount int `json:"total_count" description:"total count"`
}
type InviteUserRequest struct {
Username string `json:"username" description:"username"`
WorkspaceRole string `json:"workspace_role" description:"user's workspace role'"`
}
type DescribeWorkspaceUserResponse struct {
Username string `json:"username" description:"username"`
Email string `json:"email" description:"email address"`
Lang string `json:"lang" description:"user's language setting, default is zh-CN"`
Description string `json:"description" description:"user's description"`
ClusterRole string `json:"cluster_role" description:"user's cluster role"`
WorkspaceRole string `json:"workspace_role" description:"user's workspace role"`
CreateTime time.Time `json:"create_time" description:"user creation time"`
LastLoginTime time.Time `json:"last_login_time" description:"last login time"`
}
func addWebService(c *restful.Container) error { func addWebService(c *restful.Container) error {
tags := []string{"IAM"} tags := []string{"IAM"}
ws := runtime.NewWebService(GroupVersion) ws := runtime.NewWebService(GroupVersion)
ok := "ok" ok := "ok"
pageableUserList := struct {
Items []models.User `json:"items"`
TotalCount int `json:"total_count"`
}{}
ws.Route(ws.POST("/authenticate"). ws.Route(ws.POST("/authenticate").
To(iam.TokenReviewHandler). To(iam.TokenReviewHandler).
...@@ -70,7 +130,7 @@ func addWebService(c *restful.Container) error { ...@@ -70,7 +130,7 @@ func addWebService(c *restful.Container) error {
ws.Route(ws.POST("/users"). ws.Route(ws.POST("/users").
To(iam.CreateUser). To(iam.CreateUser).
Doc("Create a user account."). Doc("Create a user account.").
Reads(models.User{}). Reads(CreateUserRequest{}).
Returns(http.StatusOK, ok, errors.Error{}). Returns(http.StatusOK, ok, errors.Error{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.DELETE("/users/{name}"). ws.Route(ws.DELETE("/users/{name}").
...@@ -83,22 +143,19 @@ func addWebService(c *restful.Container) error { ...@@ -83,22 +143,19 @@ func addWebService(c *restful.Container) error {
To(iam.UpdateUser). To(iam.UpdateUser).
Doc("Updates information about the specified user."). Doc("Updates information about the specified user.").
Param(ws.PathParameter("name", "username")). Param(ws.PathParameter("name", "username")).
Reads(models.User{}). Reads(UserUpdateRequest{}).
Returns(http.StatusOK, ok, errors.Error{}). Returns(http.StatusOK, ok, errors.Error{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/users/{name}/log"). ws.Route(ws.GET("/users/{name}/log").
To(iam.UserLoginLog). To(iam.UserLoginLog).
Doc("This method is used to retrieve the \"login logs\" for the specified user."). Doc("This method is used to retrieve the \"login logs\" for the specified user.").
Param(ws.PathParameter("name", "username")). Param(ws.PathParameter("name", "username")).
Returns(http.StatusOK, ok, struct { Returns(http.StatusOK, ok, LoginLog{}).
LoginTime string `json:"login_time"`
LoginIP string `json:"login_ip"`
}{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/users"). ws.Route(ws.GET("/users").
To(iam.ListUsers). To(iam.ListUsers).
Doc("List all users."). Doc("List all users.").
Returns(http.StatusOK, ok, pageableUserList). Returns(http.StatusOK, ok, UserList{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/groups"). ws.Route(ws.GET("/groups").
To(iam.ListGroups). To(iam.ListGroups).
...@@ -146,18 +203,12 @@ func addWebService(c *restful.Container) error { ...@@ -146,18 +203,12 @@ func addWebService(c *restful.Container) error {
To(iam.ListRoles). To(iam.ListRoles).
Doc("This method is used to retrieve the roles that are assigned to the user in the specified namespace."). Doc("This method is used to retrieve the roles that are assigned to the user in the specified namespace.").
Param(ws.PathParameter("namespace", "kubernetes namespace")). Param(ws.PathParameter("namespace", "kubernetes namespace")).
Returns(http.StatusOK, ok, struct { Returns(http.StatusOK, ok, RoleList{}).
Items []rbacv1.Role `json:"items"`
TotalCount int `json:"total_count"`
}{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/clusterroles"). ws.Route(ws.GET("/clusterroles").
To(iam.ListClusterRoles). To(iam.ListClusterRoles).
Doc("List all cluster roles."). Doc("List all cluster roles.").
Returns(http.StatusOK, ok, struct { Returns(http.StatusOK, ok, ClusterRoleList{}).
Items []rbacv1.ClusterRole `json:"items"`
TotalCount int `json:"total_count"`
}{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/namespaces/{namespace}/roles/{role}/users"). ws.Route(ws.GET("/namespaces/{namespace}/roles/{role}/users").
To(iam.ListRoleUsers). To(iam.ListRoleUsers).
...@@ -176,7 +227,7 @@ func addWebService(c *restful.Container) error { ...@@ -176,7 +227,7 @@ func addWebService(c *restful.Container) error {
To(iam.ListClusterRoleUsers). To(iam.ListClusterRoleUsers).
Doc("List all users that are bind the cluster role."). Doc("List all users that are bind the cluster role.").
Param(ws.PathParameter("clusterrole", "cluster role name")). Param(ws.PathParameter("clusterrole", "cluster role name")).
Returns(http.StatusOK, ok, pageableUserList). Returns(http.StatusOK, ok, UserList{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/clusterroles/{clusterrole}/rules"). ws.Route(ws.GET("/clusterroles/{clusterrole}/rules").
To(iam.ListClusterRoleRules). To(iam.ListClusterRoleRules).
...@@ -212,10 +263,7 @@ func addWebService(c *restful.Container) error { ...@@ -212,10 +263,7 @@ func addWebService(c *restful.Container) error {
To(iam.ListWorkspaceRoles). To(iam.ListWorkspaceRoles).
Doc("List all workspace roles."). Doc("List all workspace roles.").
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Returns(http.StatusOK, ok, struct { Returns(http.StatusOK, ok, ClusterRoleList{}).
Items []rbacv1.ClusterRole `json:"items"`
TotalCount int `json:"total_count"`
}{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/workspaces/{workspace}/roles/{role}"). ws.Route(ws.GET("/workspaces/{workspace}/roles/{role}").
To(iam.DescribeWorkspaceRole). To(iam.DescribeWorkspaceRole).
...@@ -235,13 +283,13 @@ func addWebService(c *restful.Container) error { ...@@ -235,13 +283,13 @@ func addWebService(c *restful.Container) error {
To(iam.ListWorkspaceUsers). To(iam.ListWorkspaceUsers).
Doc("List all members in the specified workspace."). Doc("List all members in the specified workspace.").
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Returns(http.StatusOK, ok, pageableUserList). Returns(http.StatusOK, ok, UserList{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.POST("/workspaces/{workspace}/members"). ws.Route(ws.POST("/workspaces/{workspace}/members").
To(iam.InviteUser). To(iam.InviteUser).
Doc("Invite members to a workspace."). Doc("Invite members to a workspace.").
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Reads(models.User{}). Reads(InviteUserRequest{}).
Returns(http.StatusOK, ok, errors.Error{}). Returns(http.StatusOK, ok, errors.Error{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.DELETE("/workspaces/{workspace}/members/{username}"). ws.Route(ws.DELETE("/workspaces/{workspace}/members/{username}").
...@@ -256,7 +304,7 @@ func addWebService(c *restful.Container) error { ...@@ -256,7 +304,7 @@ func addWebService(c *restful.Container) error {
Doc("Describes the specified user."). Doc("Describes the specified user.").
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Param(ws.PathParameter("username", "username")). Param(ws.PathParameter("username", "username")).
Returns(http.StatusOK, ok, models.User{}). Returns(http.StatusOK, ok, DescribeWorkspaceUserResponse{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
c.Add(ws) c.Add(ws)
return nil return nil
......
...@@ -24,6 +24,7 @@ import ( ...@@ -24,6 +24,7 @@ import (
"kubesphere.io/kubesphere/pkg/apiserver/operations" "kubesphere.io/kubesphere/pkg/apiserver/operations"
"kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/apiserver/runtime"
"kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/errors"
"net/http"
) )
const GroupName = "operations.kubesphere.io" const GroupName = "operations.kubesphere.io"
...@@ -38,24 +39,24 @@ var ( ...@@ -38,24 +39,24 @@ var (
func addWebService(c *restful.Container) error { func addWebService(c *restful.Container) error {
tags := []string{"Operations"} tags := []string{"Operations"}
ok := "ok"
webservice := runtime.NewWebService(GroupVersion) webservice := runtime.NewWebService(GroupVersion)
webservice.Route(webservice.POST("/nodes/{node}/drainage"). webservice.Route(webservice.POST("/nodes/{node}/drainage").
To(operations.DrainNode). To(operations.DrainNode).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc(""). Doc("Drain node").
Param(webservice.PathParameter("node", "node name")). Param(webservice.PathParameter("node", "node name")).
Writes(errors.Error{})) Returns(http.StatusOK, ok, errors.Error{}))
webservice.Route(webservice.POST("/namespaces/{namespace}/jobs/{job}"). webservice.Route(webservice.POST("/namespaces/{namespace}/jobs/{job}").
To(operations.RerunJob). To(operations.RerunJob).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Handle job operation"). Doc("Job rerun").
Param(webservice.PathParameter("job", "job name")). Param(webservice.PathParameter("job", "job name")).
Param(webservice.PathParameter("namespace", "job's namespace")). Param(webservice.PathParameter("namespace", "job's namespace")).
Param(webservice.QueryParameter("a", "action")). Param(webservice.QueryParameter("a", "action")).
Writes("")) Returns(http.StatusOK, ok, errors.Error{}))
c.Add(webservice) c.Add(webservice)
......
...@@ -36,8 +36,11 @@ import ( ...@@ -36,8 +36,11 @@ import (
"kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models"
"kubesphere.io/kubesphere/pkg/models/applications" "kubesphere.io/kubesphere/pkg/models/applications"
gitmodel "kubesphere.io/kubesphere/pkg/models/git" gitmodel "kubesphere.io/kubesphere/pkg/models/git"
registriesmodel "kubesphere.io/kubesphere/pkg/models/registries"
"kubesphere.io/kubesphere/pkg/models/status"
"kubesphere.io/kubesphere/pkg/params" "kubesphere.io/kubesphere/pkg/params"
"kubesphere.io/kubesphere/pkg/simple/client/openpitrix" "kubesphere.io/kubesphere/pkg/simple/client/openpitrix"
"net/http"
) )
const GroupName = "resources.kubesphere.io" const GroupName = "resources.kubesphere.io"
...@@ -54,6 +57,7 @@ func addWebService(c *restful.Container) error { ...@@ -54,6 +57,7 @@ func addWebService(c *restful.Container) error {
webservice := runtime.NewWebService(GroupVersion) webservice := runtime.NewWebService(GroupVersion)
tags := []string{"Namespace resources"} tags := []string{"Namespace resources"}
ok := "ok"
webservice.Route(webservice.GET("/namespaces/{namespace}/{resources}"). webservice.Route(webservice.GET("/namespaces/{namespace}/{resources}").
To(resources.ListResources). To(resources.ListResources).
...@@ -68,13 +72,13 @@ func addWebService(c *restful.Container) error { ...@@ -68,13 +72,13 @@ func addWebService(c *restful.Container) error {
Required(false). Required(false).
DataFormat("limit=%d,page=%d"). DataFormat("limit=%d,page=%d").
DefaultValue("limit=10,page=1")). DefaultValue("limit=10,page=1")).
Writes(models.PageableResponse{})) Returns(http.StatusOK, ok, models.PageableResponse{}))
tags = []string{"Cluster resources"} tags = []string{"Cluster resources"}
webservice.Route(webservice.GET("/{resources}"). webservice.Route(webservice.GET("/{resources}").
To(resources.ListResources). To(resources.ListResources).
Writes(models.PageableResponse{}). Returns(http.StatusOK, ok, models.PageableResponse{}).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Cluster level resource query"). Doc("Cluster level resource query").
Param(webservice.PathParameter("resources", "cluster level resource type"))). Param(webservice.PathParameter("resources", "cluster level resource type"))).
...@@ -91,7 +95,7 @@ func addWebService(c *restful.Container) error { ...@@ -91,7 +95,7 @@ func addWebService(c *restful.Container) error {
webservice.Route(webservice.GET("/applications"). webservice.Route(webservice.GET("/applications").
To(resources.ListApplication). To(resources.ListApplication).
Writes(models.PageableResponse{}). Returns(http.StatusOK, ok, models.PageableResponse{}).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("List applications in cluster"). Doc("List applications in cluster").
Param(webservice.QueryParameter(params.ConditionsParam, "query conditions"). Param(webservice.QueryParameter(params.ConditionsParam, "query conditions").
...@@ -107,7 +111,7 @@ func addWebService(c *restful.Container) error { ...@@ -107,7 +111,7 @@ func addWebService(c *restful.Container) error {
webservice.Route(webservice.GET("/namespaces/{namespace}/applications"). webservice.Route(webservice.GET("/namespaces/{namespace}/applications").
To(resources.ListNamespacedApplication). To(resources.ListNamespacedApplication).
Writes(models.PageableResponse{}). Returns(http.StatusOK, ok, models.PageableResponse{}).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("List applications"). Doc("List applications").
Param(webservice.QueryParameter(params.ConditionsParam, "query conditions"). Param(webservice.QueryParameter(params.ConditionsParam, "query conditions").
...@@ -122,24 +126,27 @@ func addWebService(c *restful.Container) error { ...@@ -122,24 +126,27 @@ func addWebService(c *restful.Container) error {
webservice.Route(webservice.GET("/namespaces/{namespace}/applications/{cluster_id}"). webservice.Route(webservice.GET("/namespaces/{namespace}/applications/{cluster_id}").
To(resources.DescribeApplication). To(resources.DescribeApplication).
Writes(applications.Application{}). Returns(http.StatusOK, ok, applications.Application{}).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Describe application"). Doc("Describe application").
Param(webservice.PathParameter("namespace", "namespace name")). Param(webservice.PathParameter("namespace", "namespace name")).
Param(webservice.PathParameter("cluster_id", "openpitrix cluster id"))) Param(webservice.PathParameter("cluster_id", "application id")))
webservice.Route(webservice.POST("/namespaces/{namespace}/applications"). webservice.Route(webservice.POST("/namespaces/{namespace}/applications").
To(resources.DeployApplication). To(resources.DeployApplication).
Doc("Deploy application"). Doc("Deploy application").
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Reads(openpitrix.CreateClusterRequest{}). Reads(openpitrix.CreateClusterRequest{}).
Returns(http.StatusOK, ok, errors.Error{}).
Param(webservice.PathParameter("namespace", "namespace name"))) Param(webservice.PathParameter("namespace", "namespace name")))
webservice.Route(webservice.DELETE("/namespaces/{namespace}/applications/{cluster_id}"). webservice.Route(webservice.DELETE("/namespaces/{namespace}/applications/{cluster_id}").
To(resources.DeleteApplication). To(resources.DeleteApplication).
Doc("Delete application"). Doc("Delete application").
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Param(webservice.PathParameter("namespace", "namespace name"))) Returns(http.StatusOK, ok, errors.Error{}).
Param(webservice.PathParameter("namespace", "namespace name")).
Param(webservice.PathParameter("cluster_id", "application id")))
tags = []string{"User resources"} tags = []string{"User resources"}
...@@ -148,13 +155,14 @@ func addWebService(c *restful.Container) error { ...@@ -148,13 +155,14 @@ func addWebService(c *restful.Container) error {
Doc("get user's kubectl pod"). Doc("get user's kubectl pod").
Param(webservice.PathParameter("username", "username")). Param(webservice.PathParameter("username", "username")).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Writes(models.PodInfo{})) Returns(http.StatusOK, ok, models.PodInfo{}))
webservice.Route(webservice.GET("/users/{username}/kubeconfig"). webservice.Route(webservice.GET("/users/{username}/kubeconfig").
Produces("text/plain"). Produces("text/plain").
To(resources.GetKubeconfig). To(resources.GetKubeconfig).
Doc("get users' kubeconfig"). Doc("get users' kubeconfig").
Param(webservice.PathParameter("username", "username")). Param(webservice.PathParameter("username", "username")).
Returns(http.StatusOK, ok, "").
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
tags = []string{"Components"} tags = []string{"Components"}
...@@ -163,18 +171,18 @@ func addWebService(c *restful.Container) error { ...@@ -163,18 +171,18 @@ func addWebService(c *restful.Container) error {
To(components.GetComponents). To(components.GetComponents).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc(""). Doc("").
Writes(map[string]models.Component{})) Returns(http.StatusOK, ok, map[string]models.Component{}))
webservice.Route(webservice.GET("/components/{component}"). webservice.Route(webservice.GET("/components/{component}").
To(components.GetComponentStatus). To(components.GetComponentStatus).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc(""). Doc("").
Param(webservice.PathParameter("component", "component name")). Param(webservice.PathParameter("component", "component name")).
Writes(models.Component{})) Returns(http.StatusOK, ok, models.Component{}))
webservice.Route(webservice.GET("/health"). webservice.Route(webservice.GET("/health").
To(components.GetSystemHealthStatus). To(components.GetSystemHealthStatus).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc(""). Doc("").
Writes(map[string]int{})) Returns(http.StatusOK, ok, map[string]int{}))
tags = []string{"Quotas"} tags = []string{"Quotas"}
...@@ -182,13 +190,13 @@ func addWebService(c *restful.Container) error { ...@@ -182,13 +190,13 @@ func addWebService(c *restful.Container) error {
To(quotas.GetClusterQuotas). To(quotas.GetClusterQuotas).
Deprecate(). Deprecate().
Doc("get whole cluster's resource usage"). Doc("get whole cluster's resource usage").
Writes(models.ResourceQuota{}). Returns(http.StatusOK, ok, models.ResourceQuota{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
webservice.Route(webservice.GET("/namespaces/{namespace}/quotas"). webservice.Route(webservice.GET("/namespaces/{namespace}/quotas").
Doc("get specified namespace's resource quota and usage"). Doc("get specified namespace's resource quota and usage").
Param(webservice.PathParameter("namespace", "namespace's name")). Param(webservice.PathParameter("namespace", "namespace's name")).
Writes(models.ResourceQuota{}). Returns(http.StatusOK, ok, models.ResourceQuota{}).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
To(quotas.GetNamespaceQuotas)) To(quotas.GetNamespaceQuotas))
...@@ -198,7 +206,8 @@ func addWebService(c *restful.Container) error { ...@@ -198,7 +206,8 @@ func addWebService(c *restful.Container) error {
To(registries.RegistryVerify). To(registries.RegistryVerify).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("docker registry verify"). Doc("docker registry verify").
Writes(errors.Error{})) Reads(registriesmodel.AuthInfo{}).
Returns(http.StatusOK, ok, errors.Error{}))
tags = []string{"Git"} tags = []string{"Git"}
webservice.Route(webservice.POST("/git/readverify"). webservice.Route(webservice.POST("/git/readverify").
...@@ -207,7 +216,7 @@ func addWebService(c *restful.Container) error { ...@@ -207,7 +216,7 @@ func addWebService(c *restful.Container) error {
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("secret git read verify"). Doc("secret git read verify").
Reads(gitmodel.AuthInfo{}). Reads(gitmodel.AuthInfo{}).
Writes(errors.Error{}), Returns(http.StatusOK, ok, errors.Error{}),
) )
tags = []string{"Revision"} tags = []string{"Revision"}
...@@ -218,7 +227,7 @@ func addWebService(c *restful.Container) error { ...@@ -218,7 +227,7 @@ func addWebService(c *restful.Container) error {
Param(webservice.PathParameter("daemonset", "daemonset's name")). Param(webservice.PathParameter("daemonset", "daemonset's name")).
Param(webservice.PathParameter("namespace", "daemonset's namespace")). Param(webservice.PathParameter("namespace", "daemonset's namespace")).
Param(webservice.PathParameter("revision", "daemonset's revision")). Param(webservice.PathParameter("revision", "daemonset's revision")).
Writes(appsv1.DaemonSet{})) Returns(http.StatusOK, ok, appsv1.DaemonSet{}))
webservice.Route(webservice.GET("/namespaces/{namespace}/deployments/{deployment}/revisions/{revision}"). webservice.Route(webservice.GET("/namespaces/{namespace}/deployments/{deployment}/revisions/{revision}").
To(revisions.GetDeployRevision). To(revisions.GetDeployRevision).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
...@@ -226,7 +235,7 @@ func addWebService(c *restful.Container) error { ...@@ -226,7 +235,7 @@ func addWebService(c *restful.Container) error {
Param(webservice.PathParameter("deployment", "deployment's name")). Param(webservice.PathParameter("deployment", "deployment's name")).
Param(webservice.PathParameter("namespace", "deployment's namespace")). Param(webservice.PathParameter("namespace", "deployment's namespace")).
Param(webservice.PathParameter("revision", "deployment's revision")). Param(webservice.PathParameter("revision", "deployment's revision")).
Writes(appsv1.ReplicaSet{})) Returns(http.StatusOK, ok, appsv1.ReplicaSet{}))
webservice.Route(webservice.GET("/namespaces/{namespace}/statefulsets/{statefulset}/revisions/{revision}"). webservice.Route(webservice.GET("/namespaces/{namespace}/statefulsets/{statefulset}/revisions/{revision}").
To(revisions.GetStatefulSetRevision). To(revisions.GetStatefulSetRevision).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
...@@ -234,7 +243,7 @@ func addWebService(c *restful.Container) error { ...@@ -234,7 +243,7 @@ func addWebService(c *restful.Container) error {
Param(webservice.PathParameter("statefulset", "statefulset's name")). Param(webservice.PathParameter("statefulset", "statefulset's name")).
Param(webservice.PathParameter("namespace", "statefulset's namespace")). Param(webservice.PathParameter("namespace", "statefulset's namespace")).
Param(webservice.PathParameter("revision", "statefulset's revision")). Param(webservice.PathParameter("revision", "statefulset's revision")).
Writes(appsv1.StatefulSet{})) Returns(http.StatusOK, ok, appsv1.StatefulSet{}))
tags = []string{"Router"} tags = []string{"Router"}
...@@ -242,7 +251,7 @@ func addWebService(c *restful.Container) error { ...@@ -242,7 +251,7 @@ func addWebService(c *restful.Container) error {
To(routers.GetAllRouters). To(routers.GetAllRouters).
Doc("List all routers"). Doc("List all routers").
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Writes(corev1.Service{})) Returns(http.StatusOK, ok, corev1.Service{}))
webservice.Route(webservice.GET("/namespaces/{namespace}/router"). webservice.Route(webservice.GET("/namespaces/{namespace}/router").
To(routers.GetRouter). To(routers.GetRouter).
...@@ -273,11 +282,13 @@ func addWebService(c *restful.Container) error { ...@@ -273,11 +282,13 @@ func addWebService(c *restful.Container) error {
webservice.Route(webservice.GET("/workloadstatuses"). webservice.Route(webservice.GET("/workloadstatuses").
Doc("get abnormal workloads' count of whole cluster"). Doc("get abnormal workloads' count of whole cluster").
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Returns(http.StatusOK, ok, status.WorkLoadStatus{}).
To(workloadstatuses.GetClusterResourceStatus)) To(workloadstatuses.GetClusterResourceStatus))
webservice.Route(webservice.GET("/namespaces/{namespace}/workloadstatuses"). webservice.Route(webservice.GET("/namespaces/{namespace}/workloadstatuses").
Doc("get abnormal workloads' count of specified namespace"). Doc("get abnormal workloads' count of specified namespace").
Param(webservice.PathParameter("namespace", "the name of namespace")). Param(webservice.PathParameter("namespace", "the name of namespace")).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Returns(http.StatusOK, ok, status.WorkLoadStatus{}).
To(workloadstatuses.GetNamespacesResourceStatus)) To(workloadstatuses.GetNamespacesResourceStatus))
c.Add(webservice) c.Add(webservice)
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
"kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/apiserver/runtime"
"kubesphere.io/kubesphere/pkg/apiserver/servicemesh/metrics" "kubesphere.io/kubesphere/pkg/apiserver/servicemesh/metrics"
"kubesphere.io/kubesphere/pkg/apiserver/servicemesh/tracing" "kubesphere.io/kubesphere/pkg/apiserver/servicemesh/tracing"
"kubesphere.io/kubesphere/pkg/errors" "net/http"
) )
const GroupName = "servicemesh.kubesphere.io" const GroupName = "servicemesh.kubesphere.io"
...@@ -30,19 +30,21 @@ func addWebService(c *restful.Container) error { ...@@ -30,19 +30,21 @@ func addWebService(c *restful.Container) error {
webservice.Route(webservice.GET("/namespaces/{namespace}/services/{service}/metrics"). webservice.Route(webservice.GET("/namespaces/{namespace}/services/{service}/metrics").
To(metrics.GetServiceMetrics). To(metrics.GetServiceMetrics).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get app metrics from a specific namespace"). Doc("Get service metrics from a specific namespace").
Param(webservice.PathParameter("namespace", "name of the namespace")). Param(webservice.PathParameter("namespace", "name of the namespace")).
Param(webservice.PathParameter("service", "name of the service")). Param(webservice.PathParameter("service", "name of the service")).
Param(webservice.QueryParameter("filters[]", "type of metrics type, e.g. request_count, request_duration, request_error_count")). Param(webservice.QueryParameter("filters[]", "type of metrics type, fetch all metrics when empty, e.g. request_count, request_duration, request_error_count").DefaultValue("[]")).
Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")). Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")).
Param(webservice.QueryParameter("duration", "metrics duration, in seconds")). Param(webservice.QueryParameter("duration", "duration of the query period, in seconds").DefaultValue("1800")).
Param(webservice.QueryParameter("step", "metrics step")). Param(webservice.QueryParameter("step", "step between graph data points, in seconds.").DefaultValue("15")).
Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s")). Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s").DefaultValue("1m")).
Param(webservice.QueryParameter("quantiles[]", "metrics quantiles, 0.5, 0.9, 0.99")). Param(webservice.QueryParameter("direction", "traffic direction: 'inbound' or 'outbound'").DefaultValue("outbound")).
Param(webservice.QueryParameter("byLabels[]", "by which labels to group node, e.g. source_workload, destination_service_name")). Param(webservice.QueryParameter("quantiles[]", "list of quantiles to fetch, fetch no quantiles when empty. eg. 0.5, 0.9, 0.99").DefaultValue("[]")).
Param(webservice.QueryParameter("requestProtocol", "request protocol, http/tcp")). Param(webservice.QueryParameter("byLabels[]", "list of labels to use for grouping metrics(via Prometheus 'by' clause), e.g. source_workload, destination_service_name").DefaultValue("[]")).
Param(webservice.QueryParameter("reporter", "destination")). Param(webservice.QueryParameter("requestProtocol", "request protocol for the telemetry, e.g. http/tcp/grpc").DefaultValue("all protocols")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Param(webservice.QueryParameter("reporter", "istio telemetry reporter, 'source' or 'destination'").DefaultValue("source")).
Returns(http.StatusOK, "ok", MetricsResponse{}).
Writes(MetricsResponse{})).Produces(restful.MIME_JSON)
// Get app metrics // Get app metrics
// Get /namespaces/{namespace}/apps/{app}/metrics // Get /namespaces/{namespace}/apps/{app}/metrics
...@@ -51,17 +53,20 @@ func addWebService(c *restful.Container) error { ...@@ -51,17 +53,20 @@ func addWebService(c *restful.Container) error {
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get app metrics from a specific namespace"). Doc("Get app metrics from a specific namespace").
Param(webservice.PathParameter("namespace", "name of the namespace")). Param(webservice.PathParameter("namespace", "name of the namespace")).
Param(webservice.PathParameter("app", "name of the workload label app value")). Param(webservice.PathParameter("app", "name of the app")).
Param(webservice.QueryParameter("filters[]", "type of metrics type, e.g. request_count, request_duration, request_error_count")). Param(webservice.QueryParameter("filters[]", "type of metrics type, fetch all metrics when empty, e.g. request_count, request_duration, request_error_count").DefaultValue("[]")).
Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")). Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")).
Param(webservice.QueryParameter("duration", "metrics duration, in seconds")). Param(webservice.QueryParameter("duration", "duration of the query period, in seconds").DefaultValue("1800")).
Param(webservice.QueryParameter("step", "metrics step")). Param(webservice.QueryParameter("step", "step between graph data points, in seconds.").DefaultValue("15")).
Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s")). Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s").DefaultValue("1m")).
Param(webservice.QueryParameter("quantiles[]", "metrics quantiles, 0.5, 0.9, 0.99")). Param(webservice.QueryParameter("direction", "traffic direction: 'inbound' or 'outbound'").DefaultValue("outbound")).
Param(webservice.QueryParameter("byLabels[]", "by which labels to group node, e.g. source_workload, destination_service_name")). Param(webservice.QueryParameter("quantiles[]", "list of quantiles to fetch, fetch no quantiles when empty. eg. 0.5, 0.9, 0.99").DefaultValue("[]")).
Param(webservice.QueryParameter("requestProtocol", "request protocol, http/tcp")). Param(webservice.QueryParameter("byLabels[]", "list of labels to use for grouping metrics(via Prometheus 'by' clause), e.g. source_workload, destination_service_name").DefaultValue("[]")).
Param(webservice.QueryParameter("reporter", "destination")). Param(webservice.QueryParameter("requestProtocol", "request protocol for the telemetry, e.g. http/tcp/grpc").DefaultValue("all protocols")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Param(webservice.QueryParameter("reporter", "istio telemetry reporter, 'source' or 'destination'").DefaultValue("source")).
Returns(http.StatusOK, "ok", MetricsResponse{}).
Writes(MetricsResponse{})).
Produces(restful.MIME_JSON)
// Get workload metrics // Get workload metrics
// Get /namespaces/{namespace}/workloads/{workload}/metrics // Get /namespaces/{namespace}/workloads/{workload}/metrics
...@@ -71,16 +76,20 @@ func addWebService(c *restful.Container) error { ...@@ -71,16 +76,20 @@ func addWebService(c *restful.Container) error {
Doc("Get workload metrics from a specific namespace"). Doc("Get workload metrics from a specific namespace").
Param(webservice.PathParameter("namespace", "name of the namespace").Required(true)). Param(webservice.PathParameter("namespace", "name of the namespace").Required(true)).
Param(webservice.PathParameter("workload", "name of the workload").Required(true)). Param(webservice.PathParameter("workload", "name of the workload").Required(true)).
Param(webservice.QueryParameter("filters[]", "type of metrics type, e.g. request_count, request_duration, request_error_count")). Param(webservice.PathParameter("service", "name of the service")).
Param(webservice.QueryParameter("filters[]", "type of metrics type, fetch all metrics when empty, e.g. request_count, request_duration, request_error_count").DefaultValue("[]")).
Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")). Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")).
Param(webservice.QueryParameter("duration", "metrics duration, in seconds")). Param(webservice.QueryParameter("duration", "duration of the query period, in seconds").DefaultValue("1800")).
Param(webservice.QueryParameter("step", "metrics step")). Param(webservice.QueryParameter("step", "step between graph data points, in seconds.").DefaultValue("15")).
Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s")). Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s").DefaultValue("1m")).
Param(webservice.QueryParameter("quantiles[]", "metrics quantiles, 0.5, 0.9, 0.99")). Param(webservice.QueryParameter("direction", "traffic direction: 'inbound' or 'outbound'").DefaultValue("outbound")).
Param(webservice.QueryParameter("byLabels[]", "by which labels to group node, e.g. source_workload, destination_service_name")). Param(webservice.QueryParameter("quantiles[]", "list of quantiles to fetch, fetch no quantiles when empty. eg. 0.5, 0.9, 0.99").DefaultValue("[]")).
Param(webservice.QueryParameter("requestProtocol", "request protocol, http/tcp")). Param(webservice.QueryParameter("byLabels[]", "list of labels to use for grouping metrics(via Prometheus 'by' clause), e.g. source_workload, destination_service_name").DefaultValue("[]")).
Param(webservice.QueryParameter("reporter", "destination")). Param(webservice.QueryParameter("requestProtocol", "request protocol for the telemetry, e.g. http/tcp/grpc").DefaultValue("all protocols")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Param(webservice.QueryParameter("reporter", "istio telemetry reporter, 'source' or 'destination'").DefaultValue("source")).
Returns(http.StatusOK, "ok", MetricsResponse{}).
Writes(MetricsResponse{})).
Produces(restful.MIME_JSON)
// Get namespace metrics // Get namespace metrics
// Get /namespaces/{namespace}/metrics // Get /namespaces/{namespace}/metrics
...@@ -89,16 +98,19 @@ func addWebService(c *restful.Container) error { ...@@ -89,16 +98,19 @@ func addWebService(c *restful.Container) error {
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get workload metrics from a specific namespace"). Doc("Get workload metrics from a specific namespace").
Param(webservice.PathParameter("namespace", "name of the namespace").Required(true)). Param(webservice.PathParameter("namespace", "name of the namespace").Required(true)).
Param(webservice.QueryParameter("filters[]", "type of metrics type, e.g. request_count, request_duration, request_error_count")). Param(webservice.PathParameter("service", "name of the service")).
Param(webservice.QueryParameter("filters[]", "type of metrics type, fetch all metrics when empty, e.g. request_count, request_duration, request_error_count").DefaultValue("[]")).
Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")). Param(webservice.QueryParameter("queryTime", "from which UNIX time to extract metrics")).
Param(webservice.QueryParameter("duration", "metrics duration, in seconds")). Param(webservice.QueryParameter("duration", "duration of the query period, in seconds").DefaultValue("1800")).
Param(webservice.QueryParameter("step", "metrics step")). Param(webservice.QueryParameter("step", "step between graph data points, in seconds.").DefaultValue("15")).
Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s")). Param(webservice.QueryParameter("rateInterval", "metrics rate intervals, e.g. 20s").DefaultValue("1m")).
Param(webservice.QueryParameter("quantiles[]", "metrics quantiles, 0.5, 0.9, 0.99")). Param(webservice.QueryParameter("direction", "traffic direction: 'inbound' or 'outbound'").DefaultValue("outbound")).
Param(webservice.QueryParameter("byLabels[]", "by which labels to group node, e.g. source_workload, destination_service_name")). Param(webservice.QueryParameter("quantiles[]", "list of quantiles to fetch, fetch no quantiles when empty. eg. 0.5, 0.9, 0.99").DefaultValue("[]")).
Param(webservice.QueryParameter("requestProtocol", "request protocol, http/tcp")). Param(webservice.QueryParameter("byLabels[]", "list of labels to use for grouping metrics(via Prometheus 'by' clause), e.g. source_workload, destination_service_name").DefaultValue("[]")).
Param(webservice.QueryParameter("reporter", "destination")). Param(webservice.QueryParameter("requestProtocol", "request protocol for the telemetry, e.g. http/tcp/grpc").DefaultValue("all protocols")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Param(webservice.QueryParameter("reporter", "istio telemetry reporter, 'source' or 'destination'").DefaultValue("source")).
Returns(http.StatusOK, "ok", MetricsResponse{}).
Writes(MetricsResponse{})).Produces(restful.MIME_JSON)
// Get namespace graph // Get namespace graph
// Get /namespaces/{namespace}/graph // Get /namespaces/{namespace}/graph
...@@ -107,25 +119,31 @@ func addWebService(c *restful.Container) error { ...@@ -107,25 +119,31 @@ func addWebService(c *restful.Container) error {
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get service graph for a specific namespace"). Doc("Get service graph for a specific namespace").
Param(webservice.PathParameter("namespace", "name of a namespace").Required(true)). Param(webservice.PathParameter("namespace", "name of a namespace").Required(true)).
Param(webservice.QueryParameter("graphType", "type of the generated service graph, eg. ")). Param(webservice.QueryParameter("duration", "duration of the query period, in seconds").DefaultValue("10m")).
Param(webservice.QueryParameter("groupBy", "group nodes by kind")). Param(webservice.QueryParameter("graphType", "type of the generated service graph. Available graph types: [app, service, versionedApp, workload].").DefaultValue("workload")).
Param(webservice.QueryParameter("queryTime", "from which time point, default now")). Param(webservice.QueryParameter("groupBy", "app box grouping characteristic. Available groupings: [app, none, version].").DefaultValue("none")).
Param(webservice.QueryParameter("injectServiceNodes", "whether to inject service ndoes")). Param(webservice.QueryParameter("queryTime", "from which time point in UNIX timestamp, default now")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Param(webservice.QueryParameter("injectServiceNodes", "flag for injecting the requested service node between source and destination nodes.").DefaultValue("false")).
Returns(http.StatusBadRequest, "bad request", BadRequestError{}).
Returns(http.StatusNotFound, "not found", NotFoundError{}).
Returns(http.StatusOK, "ok", GraphResponse{}).
Writes(GraphResponse{})).Produces(restful.MIME_JSON)
// Get namespaces graph, for multiple namespaces // Get namespaces graph, for multiple namespaces
// Get /namespaces/graph // Get /namespaces/graph
webservice.Route(webservice.GET("/namespaces/{namespace}/graph"). webservice.Route(webservice.GET("/namespaces/graph").
To(metrics.GetNamespacesGraph). To(metrics.GetNamespacesGraph).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get service graph for a specific namespace"). Doc("Get graph from all namespaces").
Param(webservice.PathParameter("namespace", "name of a namespace").Required(true)). Param(webservice.QueryParameter("duration", "duration of the query period, in seconds").DefaultValue("10m")).
Param(webservice.QueryParameter("graphType", "type of the generated service graph, eg. ")). Param(webservice.QueryParameter("graphType", "type of the generated service graph. Available graph types: [app, service, versionedApp, workload].").DefaultValue("workload")).
Param(webservice.QueryParameter("groupBy", "group nodes by kind")). Param(webservice.QueryParameter("groupBy", "app box grouping characteristic. Available groupings: [app, none, version].").DefaultValue("none")).
Param(webservice.QueryParameter("queryTime", "from which time point, default now")). Param(webservice.QueryParameter("queryTime", "from which time point in UNIX timestamp, default now")).
Param(webservice.QueryParameter("injectServiceNodes", "whether to inject service ndoes")). Param(webservice.QueryParameter("injectServiceNodes", "flag for injecting the requested service node between source and destination nodes.").DefaultValue("false")).
Param(webservice.QueryParameter("namespaces", "names of namespaces")). Returns(http.StatusBadRequest, "bad request", BadRequestError{}).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Returns(http.StatusNotFound, "not found", NotFoundError{}).
Returns(http.StatusOK, "ok", GraphResponse{}).
Writes(GraphResponse{})).Produces(restful.MIME_JSON)
// Get namespace health // Get namespace health
webservice.Route(webservice.GET("/namespaces/{namespace}/health"). webservice.Route(webservice.GET("/namespaces/{namespace}/health").
...@@ -136,7 +154,10 @@ func addWebService(c *restful.Container) error { ...@@ -136,7 +154,10 @@ func addWebService(c *restful.Container) error {
Param(webservice.PathParameter("type", "the type of health, app/service/workload, default app").DefaultValue("app")). Param(webservice.PathParameter("type", "the type of health, app/service/workload, default app").DefaultValue("app")).
Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)). Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)).
Param(webservice.QueryParameter("queryTime", "the time to use for query")). Param(webservice.QueryParameter("queryTime", "the time to use for query")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Returns(http.StatusBadRequest, "bad request", BadRequestError{}).
Returns(http.StatusNotFound, "not found", NotFoundError{}).
Returns(http.StatusOK, "ok", namespaceAppHealthResponse{}).
Writes(namespaceAppHealthResponse{})).Produces(restful.MIME_JSON)
// Get workloads health // Get workloads health
webservice.Route(webservice.GET("/namespaces/{namespace}/workloads/{workload}/health"). webservice.Route(webservice.GET("/namespaces/{namespace}/workloads/{workload}/health").
...@@ -147,7 +168,8 @@ func addWebService(c *restful.Container) error { ...@@ -147,7 +168,8 @@ func addWebService(c *restful.Container) error {
Param(webservice.PathParameter("workload", "workload name").Required(true)). Param(webservice.PathParameter("workload", "workload name").Required(true)).
Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)). Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)).
Param(webservice.QueryParameter("queryTime", "the time to use for query")). Param(webservice.QueryParameter("queryTime", "the time to use for query")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) ReturnsError(http.StatusOK, "ok", workloadHealthResponse{}).
Writes(workloadHealthResponse{})).Produces(restful.MIME_JSON)
// Get app health // Get app health
webservice.Route(webservice.GET("/namespaces/{namespace}/apps/{app}/health"). webservice.Route(webservice.GET("/namespaces/{namespace}/apps/{app}/health").
...@@ -158,7 +180,8 @@ func addWebService(c *restful.Container) error { ...@@ -158,7 +180,8 @@ func addWebService(c *restful.Container) error {
Param(webservice.PathParameter("app", "app name").Required(true)). Param(webservice.PathParameter("app", "app name").Required(true)).
Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)). Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)).
Param(webservice.QueryParameter("queryTime", "the time to use for query")). Param(webservice.QueryParameter("queryTime", "the time to use for query")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Returns(http.StatusOK, "ok", appHealthResponse{}).
Writes(appHealthResponse{})).Produces(restful.MIME_JSON)
// Get service health // Get service health
webservice.Route(webservice.GET("/namespaces/{namespace}/services/{service}/health"). webservice.Route(webservice.GET("/namespaces/{namespace}/services/{service}/health").
...@@ -169,7 +192,8 @@ func addWebService(c *restful.Container) error { ...@@ -169,7 +192,8 @@ func addWebService(c *restful.Container) error {
Param(webservice.PathParameter("service", "service name").Required(true)). Param(webservice.PathParameter("service", "service name").Required(true)).
Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)). Param(webservice.QueryParameter("rateInterval", "the rate interval used for fetching error rate").DefaultValue("10m").Required(true)).
Param(webservice.QueryParameter("queryTime", "the time to use for query")). Param(webservice.QueryParameter("queryTime", "the time to use for query")).
Writes(errors.Error{})).Produces(restful.MIME_JSON) Returns(http.StatusOK, "ok", serviceHealthResponse{}).
Writes(serviceHealthResponse{})).Produces(restful.MIME_JSON)
// Get service tracing // Get service tracing
webservice.Route(webservice.GET("/namespaces/{namespace}/services/{service}/traces"). webservice.Route(webservice.GET("/namespaces/{namespace}/services/{service}/traces").
...@@ -182,9 +206,8 @@ func addWebService(c *restful.Container) error { ...@@ -182,9 +206,8 @@ func addWebService(c *restful.Container) error {
Param(webservice.QueryParameter("end", "end of time range want to query, in unix timestamp")). Param(webservice.QueryParameter("end", "end of time range want to query, in unix timestamp")).
Param(webservice.QueryParameter("limit", "maximum tracing entries returned at one query, default 10").DefaultValue("10")). Param(webservice.QueryParameter("limit", "maximum tracing entries returned at one query, default 10").DefaultValue("10")).
Param(webservice.QueryParameter("loopback", "loopback of duration want to query, e.g. 30m/1h/2d")). Param(webservice.QueryParameter("loopback", "loopback of duration want to query, e.g. 30m/1h/2d")).
Param(webservice.QueryParameter("maxDuration", "maximum duration of tracing")). Param(webservice.QueryParameter("maxDuration", "maximum duration of a request")).
Param(webservice.QueryParameter("minDuration", "minimum duration of tracing")). Param(webservice.QueryParameter("minDuration", "minimum duration of a request")).
Writes(errors.Error{}).
Consumes(restful.MIME_JSON). Consumes(restful.MIME_JSON).
Produces(restful.MIME_JSON)) Produces(restful.MIME_JSON))
......
package v1alpha2
import (
"github.com/kiali/kiali/graph/cytoscape"
"github.com/kiali/kiali/models"
"github.com/kiali/kiali/prometheus"
)
/////////////////////
// SWAGGER RESPONSES
/////////////////////
// NoContent: the response is empty
type NoContent struct {
Status int32 `json:"status"`
Reason error `json:"reason"`
}
// BadRequestError: the client request is incorrect
type BadRequestError struct {
Status int32 `json:"status"`
Reason error `json:"reason"`
}
// NotFoundError is the error message that is generated when server could not find
// what was requested
type NotFoundError struct {
Status int32 `json:"status"`
Reason error `json:"reason"`
}
type GraphResponse struct {
cytoscape.Config
}
type serviceHealthResponse struct {
models.ServiceHealth
}
type namespaceAppHealthResponse struct {
models.NamespaceAppHealth
}
type workloadHealthResponse struct {
models.WorkloadHealth
}
type appHealthResponse struct {
models.AppHealth
}
type MetricsResponse struct {
prometheus.Metrics
}
...@@ -20,11 +20,18 @@ package v1alpha2 ...@@ -20,11 +20,18 @@ package v1alpha2
import ( import (
"github.com/emicklei/go-restful" "github.com/emicklei/go-restful"
"github.com/emicklei/go-restful-openapi" "github.com/emicklei/go-restful-openapi"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"kubesphere.io/kubesphere/pkg/apis/tenant/v1alpha1"
"kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/apiserver/runtime"
"kubesphere.io/kubesphere/pkg/apiserver/tenant" "kubesphere.io/kubesphere/pkg/apiserver/tenant"
"kubesphere.io/kubesphere/pkg/models/devops" "kubesphere.io/kubesphere/pkg/models/devops"
"kubesphere.io/kubesphere/pkg/params" "kubesphere.io/kubesphere/pkg/params"
"kubesphere.io/kubesphere/pkg/errors"
"kubesphere.io/kubesphere/pkg/models"
"net/http" "net/http"
) )
...@@ -42,52 +49,62 @@ var ( ...@@ -42,52 +49,62 @@ var (
func addWebService(c *restful.Container) error { func addWebService(c *restful.Container) error {
tags := []string{"Tenant"} tags := []string{"Tenant"}
ok := "ok"
ws := runtime.NewWebService(GroupVersion) ws := runtime.NewWebService(GroupVersion)
ws.Route(ws.GET("/workspaces"). ws.Route(ws.GET("/workspaces").
To(tenant.ListWorkspaces). To(tenant.ListWorkspaces).
Returns(http.StatusOK, ok, models.PageableResponse{}).
Doc("List workspace by user"). Doc("List workspace by user").
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/workspaces/{workspace}"). ws.Route(ws.GET("/workspaces/{workspace}").
To(tenant.DescribeWorkspace). To(tenant.DescribeWorkspace).
Doc("Get workspace detail"). Doc("Get workspace detail").
Returns(http.StatusOK, ok, v1alpha1.Workspace{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/workspaces/{workspace}/rules"). ws.Route(ws.GET("/workspaces/{workspace}/rules").
To(tenant.ListWorkspaceRules). To(tenant.ListWorkspaceRules).
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Doc("List the rules for the current user"). Doc("List the rules for the current user").
Returns(http.StatusOK, ok, models.SimpleRule{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/namespaces/{namespace}/rules"). ws.Route(ws.GET("/namespaces/{namespace}/rules").
To(tenant.ListNamespaceRules). To(tenant.ListNamespaceRules).
Param(ws.PathParameter("namespace", "namespace")). Param(ws.PathParameter("namespace", "namespace")).
Doc("List the rules for the current user"). Doc("List the rules for the current user").
Returns(http.StatusOK, ok, models.SimpleRule{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/devops/{devops}/rules"). ws.Route(ws.GET("/devops/{devops}/rules").
To(tenant.ListDevopsRules). To(tenant.ListDevopsRules).
Param(ws.PathParameter("devops", "devops project id")). Param(ws.PathParameter("devops", "devops project id")).
Doc("List the rules for the current user"). Doc("List the rules for the current user").
Returns(http.StatusOK, ok, models.SimpleRule{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/workspaces/{workspace}/namespaces"). ws.Route(ws.GET("/workspaces/{workspace}/namespaces").
To(tenant.ListNamespaces). To(tenant.ListNamespaces).
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Doc("List the namespaces for the current user"). Doc("List the namespaces for the current user").
Returns(http.StatusOK, ok, []v1.Namespace{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/workspaces/{workspace}/members/{username}/namespaces"). ws.Route(ws.GET("/workspaces/{workspace}/members/{username}/namespaces").
To(tenant.ListNamespaces). To(tenant.ListNamespaces).
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Param(ws.PathParameter("username", "workspace member's username")). Param(ws.PathParameter("username", "workspace member's username")).
Doc("List the namespaces for the workspace member"). Doc("List the namespaces for the workspace member").
Returns(http.StatusOK, ok, []v1.Namespace{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.POST("/workspaces/{workspace}/namespaces"). ws.Route(ws.POST("/workspaces/{workspace}/namespaces").
To(tenant.CreateNamespace). To(tenant.CreateNamespace).
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Doc("Create namespace"). Doc("Create namespace").
Returns(http.StatusOK, ok, []v1.Namespace{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.DELETE("/workspaces/{workspace}/namespaces/{namespace}"). ws.Route(ws.DELETE("/workspaces/{workspace}/namespaces/{namespace}").
To(tenant.DeleteNamespace). To(tenant.DeleteNamespace).
Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("workspace", "workspace name")).
Param(ws.PathParameter("namespace", "namespace")). Param(ws.PathParameter("namespace", "namespace")).
Doc("Delete namespace"). Doc("Delete namespace").
Returns(http.StatusOK, ok, errors.Error{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/workspaces/{workspace}/devops"). ws.Route(ws.GET("/workspaces/{workspace}/devops").
...@@ -101,8 +118,7 @@ func addWebService(c *restful.Container) error { ...@@ -101,8 +118,7 @@ func addWebService(c *restful.Container) error {
Required(false). Required(false).
DataFormat("key=%s,key~%s")). DataFormat("key=%s,key~%s")).
Doc("List devops projects for the current user"). Doc("List devops projects for the current user").
Writes([]devops.DevOpsProject{}).
Returns(http.StatusOK, RespOK, []devops.DevOpsProject{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.GET("/workspaces/{workspace}/members/{username}/devops"). ws.Route(ws.GET("/workspaces/{workspace}/members/{username}/devops").
To(tenant.ListDevopsProjects). To(tenant.ListDevopsProjects).
...@@ -115,9 +131,8 @@ func addWebService(c *restful.Container) error { ...@@ -115,9 +131,8 @@ func addWebService(c *restful.Container) error {
Param(ws.QueryParameter(params.ConditionsParam, "query conditions"). Param(ws.QueryParameter(params.ConditionsParam, "query conditions").
Required(false). Required(false).
DataFormat("key=%s,key~%s")). DataFormat("key=%s,key~%s")).
Returns(http.StatusOK, ok, models.PageableResponse{}).
Doc("List the devops projects for the workspace member"). Doc("List the devops projects for the workspace member").
Writes([]devops.DevOpsProject{}).
Returns(http.StatusOK, RespOK, []devops.DevOpsProject{}).
Metadata(restfulspec.KeyOpenAPITags, tags)) Metadata(restfulspec.KeyOpenAPITags, tags))
ws.Route(ws.POST("/workspaces/{workspace}/devops"). ws.Route(ws.POST("/workspaces/{workspace}/devops").
To(tenant.CreateDevopsProject). To(tenant.CreateDevopsProject).
......
...@@ -31,8 +31,8 @@ import ( ...@@ -31,8 +31,8 @@ import (
) )
type RoleList struct { type RoleList struct {
ClusterRoles []*v1.ClusterRole `json:"clusterRole" protobuf:"bytes,2,rep,name=clusterRoles"` ClusterRoles []*v1.ClusterRole `json:"clusterRole" description:"cluster role list"`
Roles []*v1.Role `json:"roles" protobuf:"bytes,2,rep,name=roles"` Roles []*v1.Role `json:"roles" description:"role list"`
} }
func ListRoleUsers(req *restful.Request, resp *restful.Response) { func ListRoleUsers(req *restful.Request, resp *restful.Response) {
......
...@@ -30,24 +30,24 @@ import ( ...@@ -30,24 +30,24 @@ import (
) )
type Spec struct { type Spec struct {
Token string `json:"token"` Token string `json:"token" description:"access token"`
} }
type Status struct { type Status struct {
Authenticated bool `json:"authenticated"` Authenticated bool `json:"authenticated" description:"is authenticated"`
User map[string]interface{} `json:"user,omitempty"` User map[string]interface{} `json:"user,omitempty" description:"user info"`
} }
type TokenReview struct { type TokenReview struct {
APIVersion string `json:"apiVersion"` APIVersion string `json:"apiVersion" description:"Kubernetes API version"`
Kind string `json:"kind"` Kind string `json:"kind" description:"kind of the API object"`
Spec *Spec `json:"spec,omitempty"` Spec *Spec `json:"spec,omitempty"`
Status *Status `json:"status,omitempty"` Status *Status `json:"status,omitempty" description:"token review status"`
} }
type LoginRequest struct { type LoginRequest struct {
Username string `json:"username"` Username string `json:"username" description:"username"`
Password string `json:"password"` Password string `json:"password" description:"password"`
} }
const ( const (
......
...@@ -25,7 +25,7 @@ import ( ...@@ -25,7 +25,7 @@ import (
) )
type Error struct { type Error struct {
Message string `json:"message"` Message string `json:"message" description:"error message"`
} }
var None = Error{Message: "success"} var None = Error{Message: "success"}
......
...@@ -38,28 +38,28 @@ import ( ...@@ -38,28 +38,28 @@ import (
) )
type Application struct { type Application struct {
Name string `json:"name"` Name string `json:"name" description:"application name"`
RepoName string `json:"repoName"` RepoName string `json:"repoName" description:"repo name"`
Runtime string `json:"namespace"` Runtime string `json:"namespace" description:"namespace"`
RuntimeId string `json:"runtime_id"` RuntimeId string `json:"runtime_id" description:"runtime id"`
Version string `json:"version"` Version string `json:"version" description:"application version"`
VersionId string `json:"version_id"` VersionId string `json:"version_id" description:"application version id"`
Status string `json:"status"` Status string `json:"status" description:"application status"`
UpdateTime time.Time `json:"updateTime"` UpdateTime time.Time `json:"updateTime" description:"update time"`
CreateTime time.Time `json:"createTime"` CreateTime time.Time `json:"createTime" description:"create name"`
App string `json:"app"` App string `json:"app" description:"application template name"`
AppId string `json:"app_id"` AppId string `json:"app_id" description:"application template id"`
Description string `json:"description,omitempty"` Description string `json:"description,omitempty" description:"application description"`
WorkLoads *workLoads `json:"workloads,omitempty"` WorkLoads *workLoads `json:"workloads,omitempty" description:"application workloads"`
Services []v1.Service `json:"services,omitempty"` Services []v1.Service `json:"services,omitempty" description:"application services"`
Ingresses []v1beta1.Ingress `json:"ingresses,omitempty"` Ingresses []v1beta1.Ingress `json:"ingresses,omitempty" description:"application ingresses"`
ClusterID string `json:"cluster_id"` ClusterID string `json:"cluster_id" description:"application id"`
} }
type workLoads struct { type workLoads struct {
Deployments []appsv1.Deployment `json:"deployments,omitempty"` Deployments []appsv1.Deployment `json:"deployments,omitempty" description:"deployment list"`
Statefulsets []appsv1.StatefulSet `json:"statefulsets,omitempty"` Statefulsets []appsv1.StatefulSet `json:"statefulsets,omitempty" description:"statefulset list"`
Daemonsets []appsv1.DaemonSet `json:"daemonsets,omitempty"` Daemonsets []appsv1.DaemonSet `json:"daemonsets,omitempty" description:"daemonset list"`
} }
func ListApplication(runtimeId string, conditions *params.Conditions, limit, offset int) (*models.PageableResponse, error) { func ListApplication(runtimeId string, conditions *params.Conditions, limit, offset int) (*models.PageableResponse, error) {
......
...@@ -11,8 +11,8 @@ import ( ...@@ -11,8 +11,8 @@ import (
) )
type AuthInfo struct { type AuthInfo struct {
RemoteUrl string `json:"remoteUrl"` RemoteUrl string `json:"remoteUrl" description:"git server url"`
SecretRef *corev1.SecretReference `json:"secretRef,omitempty"` SecretRef *corev1.SecretReference `json:"secretRef,omitempty" description:"auth secret reference"`
} }
func GitReadVerify(namespace string, authInfo AuthInfo) error { func GitReadVerify(namespace string, authInfo AuthInfo) error {
......
...@@ -48,6 +48,6 @@ type FluentbitFiltersResult struct { ...@@ -48,6 +48,6 @@ type FluentbitFiltersResult struct {
} }
type FluentbitOutputsResult struct { type FluentbitOutputsResult struct {
Status int `json:"status"` Status int `json:"status" description:"response status"`
Outputs []fb.OutputPlugin `json:"outputs,omitempty"` Outputs []fb.OutputPlugin `json:"outputs,omitempty" description:"array of fluent bit output plugins"`
} }
...@@ -47,19 +47,19 @@ const ( ...@@ -47,19 +47,19 @@ const (
) )
type FormatedLevelMetric struct { type FormatedLevelMetric struct {
MetricsLevel string `json:"metrics_level"` MetricsLevel string `json:"metrics_level" description:"metrics level, eg. cluster"`
Results []FormatedMetric `json:"results"` Results []FormatedMetric `json:"results" description:"actual array of results"`
} }
type FormatedMetric struct { type FormatedMetric struct {
MetricName string `json:"metric_name,omitempty"` MetricName string `json:"metric_name,omitempty" description:"metrics name, eg. scheduler_up_sum"`
Status string `json:"status"` Status string `json:"status" description:"result status, one of error, success"`
Data FormatedMetricData `json:"data,omitempty"` Data FormatedMetricData `json:"data,omitempty" description:"actual metrics result"`
} }
type FormatedMetricData struct { type FormatedMetricData struct {
Result []map[string]interface{} `json:"result"` Result []map[string]interface{} `json:"result" description:"result presenting metric labels, a series of time points and their instant values"`
ResultType string `json:"resultType"` ResultType string `json:"resultType" description:"result type, one of matrix, vector"`
} }
type MetricResultValues []MetricResultValue type MetricResultValues []MetricResultValue
......
...@@ -28,9 +28,9 @@ import ( ...@@ -28,9 +28,9 @@ import (
) )
type AuthInfo struct { type AuthInfo struct {
Username string `json:"username"` Username string `json:"username" description:"username"`
Password string `json:"password"` Password string `json:"password" description:"password"`
ServerHost string `json:"serverhost"` ServerHost string `json:"serverhost" description:"registry server host"`
} }
const loginSuccess = "Login Succeeded" const loginSuccess = "Login Succeeded"
......
...@@ -26,14 +26,14 @@ import ( ...@@ -26,14 +26,14 @@ import (
"kubesphere.io/kubesphere/pkg/models/resources" "kubesphere.io/kubesphere/pkg/models/resources"
) )
type workLoadStatus struct { type WorkLoadStatus struct {
Namespace string `json:"namespace"` Namespace string `json:"namespace" description:"namespace"`
Count map[string]int `json:"data"` Count map[string]int `json:"data" description:"unhealthy workload count"`
Items map[string]interface{} `json:"items,omitempty"` Items map[string]interface{} `json:"items,omitempty" description:"unhealthy workloads"`
} }
func GetNamespacesResourceStatus(namespace string) (*workLoadStatus, error) { func GetNamespacesResourceStatus(namespace string) (*WorkLoadStatus, error) {
res := workLoadStatus{Count: make(map[string]int), Namespace: namespace, Items: make(map[string]interface{})} res := WorkLoadStatus{Count: make(map[string]int), Namespace: namespace, Items: make(map[string]interface{})}
var notReadyList *models.PageableResponse var notReadyList *models.PageableResponse
var err error var err error
for _, resource := range []string{resources.Deployments, resources.StatefulSets, resources.DaemonSets, resources.PersistentVolumeClaims, resources.Jobs} { for _, resource := range []string{resources.Deployments, resources.StatefulSets, resources.DaemonSets, resources.PersistentVolumeClaims, resources.Jobs} {
...@@ -61,7 +61,7 @@ func GetNamespacesResourceStatus(namespace string) (*workLoadStatus, error) { ...@@ -61,7 +61,7 @@ func GetNamespacesResourceStatus(namespace string) (*workLoadStatus, error) {
return &res, nil return &res, nil
} }
func GetClusterResourceStatus() (*workLoadStatus, error) { func GetClusterResourceStatus() (*WorkLoadStatus, error) {
return GetNamespacesResourceStatus("") return GetNamespacesResourceStatus("")
} }
...@@ -25,8 +25,8 @@ import ( ...@@ -25,8 +25,8 @@ import (
) )
type PageableResponse struct { type PageableResponse struct {
Items []interface{} `json:"items"` Items []interface{} `json:"items" description:"paging data"`
TotalCount int `json:"total_count"` TotalCount int `json:"total_count" description:"total count"`
} }
type Workspace struct { type Workspace struct {
...@@ -47,8 +47,8 @@ type Rule struct { ...@@ -47,8 +47,8 @@ type Rule struct {
} }
type SimpleRule struct { type SimpleRule struct {
Name string `json:"name"` Name string `json:"name" description:"rule name"`
Actions []string `json:"actions"` Actions []string `json:"actions" description:"actions"`
} }
type User struct { type User struct {
...@@ -82,26 +82,26 @@ type Group struct { ...@@ -82,26 +82,26 @@ type Group struct {
} }
type Component struct { type Component struct {
Name string `json:"name"` Name string `json:"name" description:"component name"`
Namespace string `json:"namespace"` Namespace string `json:"namespace" description:"namespace"`
SelfLink string `json:"selfLink"` SelfLink string `json:"selfLink" description:"self link"`
Label interface{} `json:"label"` Label interface{} `json:"label" description:"labels"`
StartedAt time.Time `json:"startedAt"` StartedAt time.Time `json:"startedAt" description:"started time"`
TotalBackends int `json:"totalBackends"` TotalBackends int `json:"totalBackends" description:"total backends"`
HealthyBackends int `json:"healthyBackends"` HealthyBackends int `json:"healthyBackends" description:"healthy backends"`
} }
type PodInfo struct { type PodInfo struct {
Namespace string `json:"namespace"` Namespace string `json:"namespace" description:"namespace"`
Pod string `json:"pod"` Pod string `json:"pod" description:"pod name"`
Container string `json:"container"` Container string `json:"container" description:"container name"`
} }
type Token struct { type Token struct {
Token string `json:"access_token"` Token string `json:"access_token" description:"access token"`
} }
type ResourceQuota struct { type ResourceQuota struct {
Namespace string `json:"namespace"` Namespace string `json:"namespace" description:"namespace"`
Data corev1.ResourceQuotaStatus `json:"data"` Data corev1.ResourceQuotaStatus `json:"data" description:"resource quota status"`
} }
...@@ -286,49 +286,49 @@ func createQueryRequest(param QueryParameters) (int, []byte, error) { ...@@ -286,49 +286,49 @@ func createQueryRequest(param QueryParameters) (int, []byte, error) {
} }
type Response struct { type Response struct {
Status int `json:"status"` Status int `json:"status" description:"query status"`
Workspace string `json:"workspace,omitempty"` Workspace string `json:"workspace,omitempty" description:"workspace the query was performed against"`
Shards Shards `json:"_shards"` Shards Shards `json:"_shards" description:"tells shard information"`
Hits Hits `json:"hits"` Hits Hits `json:"hits" description:"search results"`
Aggregations json.RawMessage `json:"aggregations"` Aggregations json.RawMessage `json:"aggregations" description:"aggregation results"`
} }
type Shards struct { type Shards struct {
Total int64 `json:"total"` Total int64 `json:"total" description:"tells how many shards were searched"`
Successful int64 `json:"successful"` Successful int64 `json:"successful" description:"count of the successful searched shards"`
Skipped int64 `json:"skipped"` Skipped int64 `json:"skipped" description:"count of the skipped searched shards"`
Failed int64 `json:"failed"` Failed int64 `json:"failed" description:"count of the failed searched shards"`
} }
type Hits struct { type Hits struct {
Total int64 `json:"total"` Total int64 `json:"total" description:"total number of documents matching our search criteria"`
Hits []Hit `json:"hits"` Hits []Hit `json:"hits" description:"actual array of search results"`
} }
type Hit struct { type Hit struct {
Source Source `json:"_source"` Source Source `json:"_source" description:"search result item"`
HighLight HighLight `json:"highlight"` HighLight HighLight `json:"highlight" description:"highlighted log fragment"`
Sort []int64 `json:"sort"` Sort []int64 `json:"sort" description:"sort key for results"`
} }
type Source struct { type Source struct {
Log string `json:"log"` Log string `json:"log" description:"the log message"`
Time string `json:"time"` Time string `json:"time" description:"log timestamp"`
Kubernetes Kubernetes `json:"kubernetes"` Kubernetes Kubernetes `json:"kubernetes" description:"kubernetes addon information on the log"`
} }
type Kubernetes struct { type Kubernetes struct {
Namespace string `json:"namespace_name"` Namespace string `json:"namespace_name" description:"the namespace the log is from"`
Pod string `json:"pod_name"` Pod string `json:"pod_name" description:"the pod the log is from"`
Container string `json:"container_name"` Container string `json:"container_name" description:"the container the log is from"`
Host string `json:"host"` Host string `json:"host" description:"the node the log if from"`
} }
type HighLight struct { type HighLight struct {
LogHighLights []string `json:"log,omitempty"` LogHighLights []string `json:"log,omitempty" description:"log messages to highlight"`
NamespaceHighLights []string `json:"kubernetes.namespace_name.keyword,omitempty"` NamespaceHighLights []string `json:"kubernetes.namespace_name.keyword,omitempty" description:"namespaces to highlight"`
PodHighLights []string `json:"kubernetes.pod_name.keyword,omitempty"` PodHighLights []string `json:"kubernetes.pod_name.keyword,omitempty" description:"pods to highlight"`
ContainerHighLights []string `json:"kubernetes.container_name.keyword,omitempty"` ContainerHighLights []string `json:"kubernetes.container_name.keyword,omitempty" description:"containers to highlight"`
} }
type LogRecord struct { type LogRecord struct {
......
...@@ -64,24 +64,24 @@ type FluentBitStatus struct { ...@@ -64,24 +64,24 @@ type FluentBitStatus struct {
// Plugin struct for fluent-bit plugins // Plugin struct for fluent-bit plugins
type Plugin struct { type Plugin struct {
Type string `json:"type"` Type string `json:"type" description:"output plugin type, eg. fluentbit-output-es"`
Name string `json:"name"` Name string `json:"name" description:"output plugin name, eg. fluentbit-output-es"`
Parameters []Parameter `json:"parameters"` Parameters []Parameter `json:"parameters" description:"output plugin configuration parameters"`
} }
// Fluent-bit output plugins // Fluent-bit output plugins
type OutputPlugin struct { type OutputPlugin struct {
Plugin Plugin
Id string `json:"id"` Id string `json:"id,omitempty" description:"output plugin uuid"`
Enable bool `json:"enable"` Enable bool `json:"enable" description:"current output plugin status, one of true, false"`
Updatetime time.Time `json:"updatetime,omitempty"` Updatetime time.Time `json:"updatetime,omitempty" description:"last updatetime of the output plugin"`
} }
// Parameter generic parameter type to handle values from different sources // Parameter generic parameter type to handle values from different sources
type Parameter struct { type Parameter struct {
Name string `json:"name"` Name string `json:"name" description:"configuration parameter key, eg. Name. refer to fluent bit official doc for more information."`
ValueFrom *ValueFrom `json:"valueFrom,omitempty"` ValueFrom *ValueFrom `json:"valueFrom,omitempty"`
Value string `json:"value"` Value string `json:"value" description:"configuration parameter value, eg. es. refer to fluent bit official doc for more information."`
} }
// ValueFrom generic type to determine value origin // ValueFrom generic type to determine value origin
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册