register.go 22.8 KB
Newer Older
H
hongming 已提交
1
/*
H
hongming 已提交
2
Copyright 2019 The KubeSphere Authors.
H
hongming 已提交
3

H
hongming 已提交
4 5 6
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
H
hongming 已提交
7

H
hongming 已提交
8
    http://www.apache.org/licenses/LICENSE-2.0
H
hongming 已提交
9

H
hongming 已提交
10 11 12 13 14
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
H
hongming 已提交
15
*/
H
hongming 已提交
16

H
hongming 已提交
17 18 19 20 21
package v1alpha2

import (
	"github.com/emicklei/go-restful"
	"github.com/emicklei/go-restful-openapi"
H
hongming 已提交
22
	corev1 "k8s.io/api/core/v1"
H
hongming 已提交
23
	"k8s.io/apimachinery/pkg/runtime/schema"
H
hongming 已提交
24
	"k8s.io/client-go/kubernetes"
H
hongming 已提交
25
	"kubesphere.io/kubesphere/pkg/api"
R
root 已提交
26
	auditingv1alpha1 "kubesphere.io/kubesphere/pkg/api/auditing/v1alpha1"
J
junotx 已提交
27
	eventsv1alpha1 "kubesphere.io/kubesphere/pkg/api/events/v1alpha1"
H
huanggze 已提交
28
	loggingv1alpha2 "kubesphere.io/kubesphere/pkg/api/logging/v1alpha2"
H
hongming 已提交
29
	tenantv1alpha2 "kubesphere.io/kubesphere/pkg/apis/tenant/v1alpha2"
H
hongming 已提交
30
	"kubesphere.io/kubesphere/pkg/apiserver/authorization/authorizer"
H
hongming 已提交
31
	"kubesphere.io/kubesphere/pkg/apiserver/runtime"
H
hongming 已提交
32
	kubesphere "kubesphere.io/kubesphere/pkg/client/clientset/versioned"
H
hongming 已提交
33
	"kubesphere.io/kubesphere/pkg/constants"
34
	"kubesphere.io/kubesphere/pkg/informers"
H
hongming 已提交
35
	"kubesphere.io/kubesphere/pkg/models"
H
hongming 已提交
36
	"kubesphere.io/kubesphere/pkg/models/iam/am"
H
hongming 已提交
37
	"kubesphere.io/kubesphere/pkg/server/errors"
R
root 已提交
38
	"kubesphere.io/kubesphere/pkg/simple/client/auditing"
J
junotx 已提交
39
	"kubesphere.io/kubesphere/pkg/simple/client/events"
H
huanggze 已提交
40
	"kubesphere.io/kubesphere/pkg/simple/client/logging"
R
runzexia 已提交
41
	"net/http"
H
hongming 已提交
42 43
)

R
runzexia 已提交
44 45 46
const (
	GroupName = "tenant.kubesphere.io"
)
H
hongming 已提交
47 48 49

var GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha2"}

H
hongming 已提交
50 51 52 53
func Resource(resource string) schema.GroupResource {
	return GroupVersion.WithResource(resource).GroupResource()
}

H
hongming 已提交
54
func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8sclient kubernetes.Interface,
55
	ksclient kubesphere.Interface, evtsClient events.Client, loggingClient logging.Client,
H
hongming 已提交
56
	auditingclient auditing.Client, am am.AccessManagementInterface, authorizer authorizer.Authorizer) error {
H
hongming 已提交
57 58
	mimePatch := []string{restful.MIME_JSON, runtime.MimeMergePatchJson, runtime.MimeJsonPatchJson}

H
hongming 已提交
59
	ws := runtime.NewWebService(GroupVersion)
H
hongming 已提交
60
	handler := newTenantHandler(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer)
H
hongming 已提交
61

62 63 64 65
	ws.Route(ws.GET("/clusters").
		To(handler.ListClusters).
		Doc("List clusters available to users").
		Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
H
hongming 已提交
66
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.UserResourceTag}))
Z
zryfish 已提交
67

H
hongming 已提交
68 69 70 71 72
	ws.Route(ws.POST("/workspaces").
		To(handler.CreateWorkspace).
		Reads(tenantv1alpha2.WorkspaceTemplate{}).
		Returns(http.StatusOK, api.StatusOK, tenantv1alpha2.WorkspaceTemplate{}).
		Doc("Create workspace.").
H
hongming 已提交
73
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag}))
Z
zryfish 已提交
74

H
hongming 已提交
75 76
	ws.Route(ws.DELETE("/workspaces/{workspace}").
		To(handler.DeleteWorkspace).
Z
zryfish 已提交
77
		Param(ws.PathParameter("workspace", "workspace name")).
H
hongming 已提交
78 79
		Returns(http.StatusOK, api.StatusOK, errors.None).
		Doc("Delete workspace.").
H
hongming 已提交
80
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag}))
Z
zryfish 已提交
81

H
hongming 已提交
82 83
	ws.Route(ws.PUT("/workspaces/{workspace}").
		To(handler.UpdateWorkspace).
Z
zryfish 已提交
84
		Param(ws.PathParameter("workspace", "workspace name")).
H
hongming 已提交
85 86 87
		Reads(tenantv1alpha2.WorkspaceTemplate{}).
		Returns(http.StatusOK, api.StatusOK, tenantv1alpha2.WorkspaceTemplate{}).
		Doc("Update workspace.").
H
hongming 已提交
88
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag}))
Z
zryfish 已提交
89

H
hongming 已提交
90 91
	ws.Route(ws.PATCH("/workspaces/{workspace}").
		To(handler.PatchWorkspace).
Z
zryfish 已提交
92
		Param(ws.PathParameter("workspace", "workspace name")).
H
hongming 已提交
93 94 95 96
		Consumes(mimePatch...).
		Reads(tenantv1alpha2.WorkspaceTemplate{}).
		Returns(http.StatusOK, api.StatusOK, tenantv1alpha2.WorkspaceTemplate{}).
		Doc("Update workspace.").
H
hongming 已提交
97
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag}))
Z
zryfish 已提交
98

H
hongming 已提交
99
	ws.Route(ws.GET("/workspaces").
H
hongming 已提交
100 101
		To(handler.ListWorkspaces).
		Returns(http.StatusOK, api.StatusOK, models.PageableResponse{}).
R
Ray Zhou 已提交
102
		Doc("List all workspaces that belongs to the current user").
H
hongming 已提交
103
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag}))
Z
zryfish 已提交
104

H
hongming 已提交
105 106
	ws.Route(ws.GET("/workspaces/{workspace}").
		To(handler.DescribeWorkspace).
Z
zryfish 已提交
107
		Param(ws.PathParameter("workspace", "workspace name")).
108
		Returns(http.StatusOK, api.StatusOK, tenantv1alpha2.WorkspaceTemplate{}).
H
hongming 已提交
109
		Doc("Describe workspace.").
H
hongming 已提交
110
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag}))
Z
zryfish 已提交
111

H
hongming 已提交
112 113
	ws.Route(ws.GET("/workspaces/{workspace}/clusters").
		To(handler.ListWorkspaceClusters).
Z
zryfish 已提交
114
		Param(ws.PathParameter("workspace", "workspace name")).
115
		Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
H
hongming 已提交
116
		Doc("List clusters authorized to the specified workspace.").
H
hongming 已提交
117
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag}))
H
hongming 已提交
118

H
hongming 已提交
119 120 121
	ws.Route(ws.GET("/namespaces").
		To(handler.ListNamespaces).
		Doc("List the namespaces for the current user").
H
hongming 已提交
122
		Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
H
hongming 已提交
123
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
124

H
hongming 已提交
125 126 127
	ws.Route(ws.GET("/federatednamespaces").
		To(handler.ListFederatedNamespaces).
		Doc("List the federated namespaces for the current user").
H
hongming 已提交
128
		Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
H
hongming 已提交
129
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
130

H
hongming 已提交
131 132 133 134
	ws.Route(ws.GET("/workspaces/{workspace}/federatednamespaces").
		To(handler.ListFederatedNamespaces).
		Param(ws.PathParameter("workspace", "workspace name")).
		Doc("List the federated namespaces of the specified workspace for the current user").
H
hongming 已提交
135
		Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
H
hongming 已提交
136
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
137

H
hongming 已提交
138
	ws.Route(ws.GET("/workspaces/{workspace}/namespaces").
H
hongming 已提交
139
		To(handler.ListNamespaces).
H
hongming 已提交
140
		Param(ws.PathParameter("workspace", "workspace name")).
R
Ray Zhou 已提交
141
		Doc("List the namespaces of the specified workspace for the current user").
H
hongming 已提交
142
		Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
H
hongming 已提交
143
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
144

H
hongming 已提交
145 146 147 148 149
	ws.Route(ws.GET("/workspaces/{workspace}/devops").
		To(handler.ListDevOpsProjects).
		Param(ws.PathParameter("workspace", "workspace name")).
		Doc("List the devops projects of the specified workspace for the current user").
		Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
H
hongming 已提交
150
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.DevOpsProjectTag}))
Z
zryfish 已提交
151

H
hongming 已提交
152 153 154 155 156 157 158
	ws.Route(ws.GET("/workspaces/{workspace}/workspacemembers/{workspacemember}/devops").
		To(handler.ListDevOpsProjects).
		Param(ws.PathParameter("workspace", "workspace name")).
		Param(ws.PathParameter("workspacemember", "workspacemember username")).
		Doc("List the devops projects of specified workspace for the workspace member").
		Reads(corev1.Namespace{}).
		Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
H
hongming 已提交
159
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.DevOpsProjectTag}))
Z
zryfish 已提交
160

H
hongming 已提交
161 162 163
	ws.Route(ws.GET("/workspaces/{workspace}/namespaces/{namespace}").
		To(handler.DescribeNamespace).
		Param(ws.PathParameter("workspace", "workspace name")).
Z
zryfish 已提交
164
		Param(ws.PathParameter("namespace", "project name")).
H
hongming 已提交
165
		Doc("Retrieve namespace details.").
H
hongming 已提交
166
		Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
H
hongming 已提交
167
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
168

H
hongming 已提交
169 170 171
	ws.Route(ws.DELETE("/workspaces/{workspace}/namespaces/{namespace}").
		To(handler.DeleteNamespace).
		Param(ws.PathParameter("workspace", "workspace name")).
Z
zryfish 已提交
172
		Param(ws.PathParameter("namespace", "project name")).
H
hongming 已提交
173 174
		Doc("Delete namespace.").
		Returns(http.StatusOK, api.StatusOK, errors.None).
H
hongming 已提交
175
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
176

H
hongming 已提交
177 178 179 180 181
	ws.Route(ws.POST("/workspaces/{workspace}/namespaces").
		To(handler.CreateNamespace).
		Param(ws.PathParameter("workspace", "workspace name")).
		Doc("List the namespaces of the specified workspace for the current user").
		Reads(corev1.Namespace{}).
H
hongming 已提交
182
		Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
H
hongming 已提交
183
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
184

H
hongming 已提交
185 186 187 188 189 190 191
	ws.Route(ws.GET("/workspaces/{workspace}/workspacemembers/{workspacemember}/namespaces").
		To(handler.ListNamespaces).
		Param(ws.PathParameter("workspace", "workspace name")).
		Param(ws.PathParameter("workspacemember", "workspacemember username")).
		Doc("List the namespaces of the specified workspace for the workspace member").
		Reads(corev1.Namespace{}).
		Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
H
hongming 已提交
192
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
193

H
hongming 已提交
194 195 196
	ws.Route(ws.PUT("/workspaces/{workspace}/namespaces/{namespace}").
		To(handler.UpdateNamespace).
		Param(ws.PathParameter("workspace", "workspace name")).
Z
zryfish 已提交
197
		Param(ws.PathParameter("namespace", "project name")).
H
hongming 已提交
198
		Reads(corev1.Namespace{}).
H
hongming 已提交
199
		Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
H
hongming 已提交
200
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
Z
zryfish 已提交
201

H
hongming 已提交
202 203 204 205
	ws.Route(ws.PATCH("/workspaces/{workspace}/namespaces/{namespace}").
		To(handler.PatchNamespace).
		Consumes(mimePatch...).
		Param(ws.PathParameter("workspace", "workspace name")).
Z
zryfish 已提交
206
		Param(ws.PathParameter("namespace", "project name")).
H
hongming 已提交
207
		Reads(corev1.Namespace{}).
H
hongming 已提交
208
		Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
H
hongming 已提交
209
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.NamespaceTag}))
H
hongming 已提交
210

J
junotx 已提交
211 212 213
	ws.Route(ws.GET("/events").
		To(handler.Events).
		Doc("Query events against the cluster").
H
huanggze 已提交
214
		Param(ws.QueryParameter("operation", "Operation type. This can be one of three types: `query` (for querying events), `statistics` (for retrieving statistical data), `histogram` (for displaying events count by time interval). Defaults to query.").DefaultValue("query")).
J
junotx 已提交
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
		Param(ws.QueryParameter("workspace_filter", "A comma-separated list of workspaces. This field restricts the query to specified workspaces. For example, the following filter matches the workspace my-ws and demo-ws: `my-ws,demo-ws`.")).
		Param(ws.QueryParameter("workspace_search", "A comma-separated list of keywords. Differing from **workspace_filter**, this field performs fuzzy matching on workspaces. For example, the following value limits the query to workspaces whose name contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.")).
		Param(ws.QueryParameter("involved_object_namespace_filter", "A comma-separated list of namespaces. This field restricts the query to specified `involvedObject.namespace`.")).
		Param(ws.QueryParameter("involved_object_namespace_search", "A comma-separated list of keywords. Differing from **involved_object_namespace_filter**, this field performs fuzzy matching on `involvedObject.namespace`")).
		Param(ws.QueryParameter("involved_object_name_filter", "A comma-separated list of names. This field restricts the query to specified `involvedObject.name`.")).
		Param(ws.QueryParameter("involved_object_name_search", "A comma-separated list of keywords. Differing from **involved_object_name_filter**, this field performs fuzzy matching on `involvedObject.name`.")).
		Param(ws.QueryParameter("involved_object_kind_filter", "A comma-separated list of kinds. This field restricts the query to specified `involvedObject.kind`.")).
		Param(ws.QueryParameter("reason_filter", "A comma-separated list of reasons. This field restricts the query to specified `reason`.")).
		Param(ws.QueryParameter("reason_search", "A comma-separated list of keywords. Differing from **reason_filter**, this field performs fuzzy matching on `reason`.")).
		Param(ws.QueryParameter("message_search", "A comma-separated list of keywords. This field performs fuzzy matching on `message`.")).
		Param(ws.QueryParameter("type_filter", "Type of event matching on `type`. This can be one of two types: `Warning`, `Normal`")).
		Param(ws.QueryParameter("start_time", "Start time of query (limits `lastTimestamp`). The format is a string representing seconds since the epoch, eg. 1136214245.")).
		Param(ws.QueryParameter("end_time", "End time of query (limits `lastTimestamp`). The format is a string representing seconds since the epoch, eg. 1136214245.")).
		Param(ws.QueryParameter("interval", "Time interval. It requires **operation** is set to `histogram`. The format is [0-9]+[smhdwMqy]. Defaults to 15m (i.e. 15 min).").DefaultValue("15m")).
		Param(ws.QueryParameter("sort", "Sort order. One of asc, desc. This field sorts events by `lastTimestamp`.").DataType("string").DefaultValue("desc")).
		Param(ws.QueryParameter("from", "The offset from the result set. This field returns query results from the specified offset. It requires **operation** is set to `query`. Defaults to 0 (i.e. from the beginning of the result set).").DataType("integer").DefaultValue("0").Required(false)).
		Param(ws.QueryParameter("size", "Size of result set to return. It requires **operation** is set to `query`. Defaults to 10 (i.e. 10 event records).").DataType("integer").DefaultValue("10").Required(false)).
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.EventsQueryTag}).
		Writes(eventsv1alpha1.APIResponse{}).
		Returns(http.StatusOK, api.StatusOK, eventsv1alpha1.APIResponse{}))

H
huanggze 已提交
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
	ws.Route(ws.GET("/logs").
		To(handler.QueryLogs).
		Doc("Query logs against the cluster.").
		Param(ws.QueryParameter("operation", "Operation type. This can be one of four types: query (for querying logs), statistics (for retrieving statistical data), histogram (for displaying log count by time interval) and export (for exporting logs). Defaults to query.").DefaultValue("query").DataType("string").Required(false)).
		Param(ws.QueryParameter("namespaces", "A comma-separated list of namespaces. This field restricts the query to specified namespaces. For example, the following filter matches the namespace my-ns and demo-ns: `my-ns,demo-ns`").DataType("string").Required(false)).
		Param(ws.QueryParameter("namespace_query", "A comma-separated list of keywords. Differing from **namespaces**, this field performs fuzzy matching on namespaces. For example, the following value limits the query to namespaces whose name contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.").DataType("string").Required(false)).
		Param(ws.QueryParameter("workloads", "A comma-separated list of workloads. This field restricts the query to specified workloads. For example, the following filter matches the workload my-wl and demo-wl: `my-wl,demo-wl`").DataType("string").Required(false)).
		Param(ws.QueryParameter("workload_query", "A comma-separated list of keywords. Differing from **workloads**, this field performs fuzzy matching on workloads. For example, the following value limits the query to workloads whose name contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.").DataType("string").Required(false)).
		Param(ws.QueryParameter("pods", "A comma-separated list of pods. This field restricts the query to specified pods. For example, the following filter matches the pod my-po and demo-po: `my-po,demo-po`").DataType("string").Required(false)).
		Param(ws.QueryParameter("pod_query", "A comma-separated list of keywords. Differing from **pods**, this field performs fuzzy matching on pods. For example, the following value limits the query to pods whose name contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.").DataType("string").Required(false)).
		Param(ws.QueryParameter("containers", "A comma-separated list of containers. This field restricts the query to specified containers. For example, the following filter matches the container my-cont and demo-cont: `my-cont,demo-cont`").DataType("string").Required(false)).
		Param(ws.QueryParameter("container_query", "A comma-separated list of keywords. Differing from **containers**, this field performs fuzzy matching on containers. For example, the following value limits the query to containers whose name contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.").DataType("string").Required(false)).
		Param(ws.QueryParameter("log_query", "A comma-separated list of keywords. The query returns logs which contain at least one keyword. Case-insensitive matching. For example, if the field is set to `err,INFO`, the query returns any log containing err(ERR,Err,...) *OR* INFO(info,InFo,...).").DataType("string").Required(false)).
		Param(ws.QueryParameter("interval", "Time interval. It requires **operation** is set to histogram. The format is [0-9]+[smhdwMqy]. Defaults to 15m (i.e. 15 min).").DefaultValue("15m").DataType("string").Required(false)).
		Param(ws.QueryParameter("start_time", "Start time of query. Default to 0. The format is a string representing seconds since the epoch, eg. 1559664000.").DataType("string").Required(false)).
		Param(ws.QueryParameter("end_time", "End time of query. Default to now. The format is a string representing seconds since the epoch, eg. 1559664000.").DataType("string").Required(false)).
		Param(ws.QueryParameter("sort", "Sort order. One of asc, desc. This field sorts logs by timestamp.").DataType("string").DefaultValue("desc").Required(false)).
		Param(ws.QueryParameter("from", "The offset from the result set. This field returns query results from the specified offset. It requires **operation** is set to query. Defaults to 0 (i.e. from the beginning of the result set).").DataType("integer").DefaultValue("0").Required(false)).
		Param(ws.QueryParameter("size", "Size of result to return. It requires **operation** is set to query. Defaults to 10 (i.e. 10 log records).").DataType("integer").DefaultValue("10").Required(false)).
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.LogQueryTag}).
		Writes(loggingv1alpha2.APIResponse{}).
		Returns(http.StatusOK, api.StatusOK, loggingv1alpha2.APIResponse{})).
		Consumes(restful.MIME_JSON, restful.MIME_XML).
		Produces(restful.MIME_JSON, "text/plain")

R
root 已提交
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278
	ws.Route(ws.GET("/auditing/events").
		To(handler.Auditing).
		Doc("Query auditing events against the cluster").
		Param(ws.QueryParameter("operation", "Operation type. This can be one of three types: `query` (for querying events), `statistics` (for retrieving statistical data), `histogram` (for displaying events count by time interval). Defaults to query.").DefaultValue("query")).
		Param(ws.QueryParameter("workspace_filter", "A comma-separated list of workspaces. This field restricts the query to specified workspaces. For example, the following filter matches the workspace my-ws and demo-ws: `my-ws,demo-ws`.")).
		Param(ws.QueryParameter("workspace_search", "A comma-separated list of keywords. Differing from **workspace_filter**, this field performs fuzzy matching on workspaces. For example, the following value limits the query to workspaces whose name contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.")).
		Param(ws.QueryParameter("objectref_namespace_filter", "A comma-separated list of namespaces. This field restricts the query to specified `ObjectRef.Namespace`.")).
		Param(ws.QueryParameter("objectref_namespace_search", "A comma-separated list of keywords. Differing from **objectref_namespace_filter**, this field performs fuzzy matching on `ObjectRef.Namespace`.")).
		Param(ws.QueryParameter("objectref_name_filter", "A comma-separated list of names. This field restricts the query to specified `ObjectRef.Name`.")).
		Param(ws.QueryParameter("objectref_name_search", "A comma-separated list of keywords. Differing from **objectref_name_filter**, this field performs fuzzy matching on `ObjectRef.Name`.")).
		Param(ws.QueryParameter("level_filter", "A comma-separated list of levels. This know values are Metadata, Request, RequestResponse.")).
		Param(ws.QueryParameter("verb_filter", "A comma-separated list of verbs. This field restricts the query to specified verb. This field restricts the query to specified `Verb`.")).
		Param(ws.QueryParameter("user_filter", "A comma-separated list of user. This field restricts the query to specified user. For example, the following filter matches the user user1 and user2: `user1,user2`.")).
		Param(ws.QueryParameter("user_search", "A comma-separated list of keywords. Differing from **user_filter**, this field performs fuzzy matching on 'User.username'. For example, the following value limits the query to user whose name contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.")).
		Param(ws.QueryParameter("group_search", "A comma-separated list of keywords. This field performs fuzzy matching on 'User.Groups'. For example, the following value limits the query to group which contains the word my(My,MY,...) *OR* demo(Demo,DemO,...): `my,demo`.")).
		Param(ws.QueryParameter("source_ip_search", "A comma-separated list of keywords. This field performs fuzzy matching on 'SourceIPs'. For example, the following value limits the query to SourceIPs which contains 127.0 *OR* 192.168.: `127.0,192.168.`.")).
		Param(ws.QueryParameter("objectref_resource_filter", "A comma-separated list of resource. This field restricts the query to specified ip. This field restricts the query to specified `ObjectRef.Resource`.")).
		Param(ws.QueryParameter("objectref_subresource_filter", "A comma-separated list of subresource. This field restricts the query to specified subresource. This field restricts the query to specified `ObjectRef.Subresource`.")).
279 280
		Param(ws.QueryParameter("response_code_filter", "A comma-separated list of response status code. This field restricts the query to specified response status code. This field restricts the query to specified `ResponseStatus.code`.")).
		Param(ws.QueryParameter("response_status_filter", "A comma-separated list of response status. This field restricts the query to specified response status. This field restricts the query to specified `ResponseStatus.status`.")).
R
root 已提交
281 282 283 284 285 286 287 288 289 290
		Param(ws.QueryParameter("start_time", "Start time of query (limits `RequestReceivedTimestamp`). The format is a string representing seconds since the epoch, eg. 1136214245.")).
		Param(ws.QueryParameter("end_time", "End time of query (limits `RequestReceivedTimestamp`). The format is a string representing seconds since the epoch, eg. 1136214245.")).
		Param(ws.QueryParameter("interval", "Time interval. It requires **operation** is set to `histogram`. The format is [0-9]+[smhdwMqy]. Defaults to 15m (i.e. 15 min).").DefaultValue("15m")).
		Param(ws.QueryParameter("sort", "Sort order. One of asc, desc. This field sorts events by `RequestReceivedTimestamp`.").DataType("string").DefaultValue("desc")).
		Param(ws.QueryParameter("from", "The offset from the result set. This field returns query results from the specified offset. It requires **operation** is set to `query`. Defaults to 0 (i.e. from the beginning of the result set).").DataType("integer").DefaultValue("0").Required(false)).
		Param(ws.QueryParameter("size", "Size of result set to return. It requires **operation** is set to `query`. Defaults to 10 (i.e. 10 event records).").DataType("integer").DefaultValue("10").Required(false)).
		Metadata(restfulspec.KeyOpenAPITags, []string{constants.AuditingQueryTag}).
		Writes(auditingv1alpha1.APIResponse{}).
		Returns(http.StatusOK, api.StatusOK, auditingv1alpha1.APIResponse{}))

H
hongming 已提交
291 292 293
	c.Add(ws)
	return nil
}