update codebeat linter
parent
85970d8525
commit
64fb916d65
|
|
@ -3,26 +3,26 @@
|
||||||
"TOO_MANY_IVARS": [
|
"TOO_MANY_IVARS": [
|
||||||
8,
|
8,
|
||||||
10,
|
10,
|
||||||
14,
|
12,
|
||||||
20
|
15
|
||||||
],
|
],
|
||||||
"LOC": [
|
"LOC": [
|
||||||
|
30,
|
||||||
50,
|
50,
|
||||||
60,
|
|
||||||
80,
|
80,
|
||||||
100
|
100
|
||||||
],
|
],
|
||||||
"TOTAL_LOC": [
|
"TOTAL_LOC": [
|
||||||
300,
|
200,
|
||||||
400,
|
400,
|
||||||
600,
|
500,
|
||||||
1000
|
600
|
||||||
],
|
],
|
||||||
"TOO_MANY_FUNCTIONS": [
|
"TOO_MANY_FUNCTIONS": [
|
||||||
|
20,
|
||||||
30,
|
30,
|
||||||
40,
|
40,
|
||||||
50,
|
50
|
||||||
60
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -65,17 +65,13 @@ type (
|
||||||
CanIAccess(ns, rvg string, verbs []string) (bool, error)
|
CanIAccess(ns, rvg string, verbs []string) (bool, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
clients struct {
|
// APIClient represents a Kubernetes api client.
|
||||||
|
APIClient struct {
|
||||||
client kubernetes.Interface
|
client kubernetes.Interface
|
||||||
dClient dynamic.Interface
|
dClient dynamic.Interface
|
||||||
nsClient dynamic.NamespaceableResourceInterface
|
nsClient dynamic.NamespaceableResourceInterface
|
||||||
mxsClient *versioned.Clientset
|
mxsClient *versioned.Clientset
|
||||||
cachedDiscovery *disk.CachedDiscoveryClient
|
cachedDiscovery *disk.CachedDiscoveryClient
|
||||||
}
|
|
||||||
|
|
||||||
// APIClient represents a Kubernetes api client.
|
|
||||||
APIClient struct {
|
|
||||||
clients
|
|
||||||
config *Config
|
config *Config
|
||||||
useMetricServer bool
|
useMetricServer bool
|
||||||
mx sync.Mutex
|
mx sync.Mutex
|
||||||
|
|
|
||||||
|
|
@ -9,31 +9,24 @@ import (
|
||||||
"github.com/gdamore/tcell"
|
"github.com/gdamore/tcell"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TableExtender struct {
|
|
||||||
extraActionsFn func(ui.KeyActions)
|
|
||||||
colorerFn ui.ColorerFunc
|
|
||||||
decorateFn decorateFn
|
|
||||||
enterFn enterFn
|
|
||||||
}
|
|
||||||
|
|
||||||
// MasterDetail presents a master-detail viewer.
|
// MasterDetail presents a master-detail viewer.
|
||||||
type MasterDetail struct {
|
type MasterDetail struct {
|
||||||
*PageStack
|
*PageStack
|
||||||
*TableExtender
|
|
||||||
|
|
||||||
master *Table
|
master *Table
|
||||||
details *Details
|
details *Details
|
||||||
currentNS string
|
currentNS string
|
||||||
title string
|
title string
|
||||||
|
extraActionsFn func(ui.KeyActions)
|
||||||
|
enterFn enterFn
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMasterDetail returns a new master-detail viewer.
|
// NewMasterDetail returns a new master-detail viewer.
|
||||||
func NewMasterDetail(title, ns string) *MasterDetail {
|
func NewMasterDetail(title, ns string) *MasterDetail {
|
||||||
return &MasterDetail{
|
return &MasterDetail{
|
||||||
PageStack: NewPageStack(),
|
PageStack: NewPageStack(),
|
||||||
TableExtender: &TableExtender{},
|
title: title,
|
||||||
title: title,
|
currentNS: ns,
|
||||||
currentNS: ns,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,12 +67,12 @@ func (m *MasterDetail) Hints() model.MenuHints {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Protocol...
|
||||||
|
|
||||||
func (m *MasterDetail) setExtraActionsFn(f ActionsFunc) {
|
func (m *MasterDetail) setExtraActionsFn(f ActionsFunc) {
|
||||||
m.extraActionsFn = f
|
m.extraActionsFn = f
|
||||||
}
|
}
|
||||||
|
|
||||||
// Protocol...
|
|
||||||
|
|
||||||
func (m *MasterDetail) setEnterFn(f enterFn) {
|
func (m *MasterDetail) setEnterFn(f enterFn) {
|
||||||
m.enterFn = f
|
m.enterFn = f
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,11 @@ type (
|
||||||
enterFn func(app *App, ns, resource, selection string)
|
enterFn func(app *App, ns, resource, selection string)
|
||||||
decorateFn func(resource.TableData) resource.TableData
|
decorateFn func(resource.TableData) resource.TableData
|
||||||
|
|
||||||
viewerCapability struct {
|
viewer struct {
|
||||||
|
gvr string
|
||||||
|
kind string
|
||||||
|
namespaced bool
|
||||||
|
verbs metav1.Verbs
|
||||||
viewFn viewFn
|
viewFn viewFn
|
||||||
listFn listFn
|
listFn listFn
|
||||||
enterFn enterFn
|
enterFn enterFn
|
||||||
|
|
@ -25,15 +29,6 @@ type (
|
||||||
decorateFn decorateFn
|
decorateFn decorateFn
|
||||||
}
|
}
|
||||||
|
|
||||||
viewer struct {
|
|
||||||
viewerCapability
|
|
||||||
|
|
||||||
gvr string
|
|
||||||
kind string
|
|
||||||
namespaced bool
|
|
||||||
verbs metav1.Verbs
|
|
||||||
}
|
|
||||||
|
|
||||||
viewers map[string]viewer
|
viewers map[string]viewer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -74,12 +69,10 @@ func allCRDs(c k8s.Connection, vv viewers) {
|
||||||
}
|
}
|
||||||
|
|
||||||
vv[gvrs] = viewer{
|
vv[gvrs] = viewer{
|
||||||
gvr: gvrs,
|
gvr: gvrs,
|
||||||
kind: meta.Kind,
|
kind: meta.Kind,
|
||||||
viewerCapability: viewerCapability{
|
viewFn: listFunc(resource.NewCustomList(c, meta.Namespaced, "", gvrs)),
|
||||||
viewFn: listFunc(resource.NewCustomList(c, meta.Namespaced, "", gvrs)),
|
colorerFn: ui.DefaultColorer,
|
||||||
colorerFn: ui.DefaultColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -177,242 +170,172 @@ func resourceViews(c k8s.Connection, m viewers) {
|
||||||
|
|
||||||
func coreRes(vv viewers) {
|
func coreRes(vv viewers) {
|
||||||
vv["v1/nodes"] = viewer{
|
vv["v1/nodes"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewNode,
|
||||||
viewFn: NewNode,
|
listFn: resource.NewNodeList,
|
||||||
listFn: resource.NewNodeList,
|
colorerFn: nsColorer,
|
||||||
colorerFn: nsColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/namespaces"] = viewer{
|
vv["v1/namespaces"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewNamespace,
|
||||||
viewFn: NewNamespace,
|
listFn: resource.NewNamespaceList,
|
||||||
listFn: resource.NewNamespaceList,
|
colorerFn: nsColorer,
|
||||||
colorerFn: nsColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/pods"] = viewer{
|
vv["v1/pods"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewPod,
|
||||||
viewFn: NewPod,
|
listFn: resource.NewPodList,
|
||||||
listFn: resource.NewPodList,
|
colorerFn: podColorer,
|
||||||
colorerFn: podColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/serviceaccounts"] = viewer{
|
vv["v1/serviceaccounts"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewServiceAccountList,
|
||||||
listFn: resource.NewServiceAccountList,
|
enterFn: showSAPolicy,
|
||||||
enterFn: showSAPolicy,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/services"] = viewer{
|
vv["v1/services"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewService,
|
||||||
viewFn: NewService,
|
listFn: resource.NewServiceList,
|
||||||
listFn: resource.NewServiceList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/configmaps"] = viewer{
|
vv["v1/configmaps"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewConfigMapList,
|
||||||
listFn: resource.NewConfigMapList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/persistentvolumes"] = viewer{
|
vv["v1/persistentvolumes"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewPersistentVolumeList,
|
||||||
listFn: resource.NewPersistentVolumeList,
|
colorerFn: pvColorer,
|
||||||
colorerFn: pvColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/persistentvolumeclaims"] = viewer{
|
vv["v1/persistentvolumeclaims"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewPersistentVolumeClaimList,
|
||||||
listFn: resource.NewPersistentVolumeClaimList,
|
colorerFn: pvcColorer,
|
||||||
colorerFn: pvcColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/secrets"] = viewer{
|
vv["v1/secrets"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewSecret,
|
||||||
viewFn: NewSecret,
|
listFn: resource.NewSecretList,
|
||||||
listFn: resource.NewSecretList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/endpoints"] = viewer{
|
vv["v1/endpoints"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewEndpointsList,
|
||||||
listFn: resource.NewEndpointsList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/events"] = viewer{
|
vv["v1/events"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewEventList,
|
||||||
listFn: resource.NewEventList,
|
colorerFn: evColorer,
|
||||||
colorerFn: evColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["v1/replicationcontrollers"] = viewer{
|
vv["v1/replicationcontrollers"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewScalableResource,
|
||||||
viewFn: NewScalableResource,
|
listFn: resource.NewReplicationControllerList,
|
||||||
listFn: resource.NewReplicationControllerList,
|
colorerFn: rsColorer,
|
||||||
colorerFn: rsColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func miscRes(vv viewers) {
|
func miscRes(vv viewers) {
|
||||||
vv["storage.k8s.io/v1/storageclasses"] = viewer{
|
vv["storage.k8s.io/v1/storageclasses"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewStorageClassList,
|
||||||
listFn: resource.NewStorageClassList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["contexts"] = viewer{
|
vv["contexts"] = viewer{
|
||||||
gvr: "contexts",
|
gvr: "contexts",
|
||||||
kind: "Contexts",
|
kind: "Contexts",
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewContext,
|
||||||
viewFn: NewContext,
|
listFn: resource.NewContextList,
|
||||||
listFn: resource.NewContextList,
|
colorerFn: ctxColorer,
|
||||||
colorerFn: ctxColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["users"] = viewer{
|
vv["users"] = viewer{
|
||||||
gvr: "users",
|
gvr: "users",
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewSubject,
|
||||||
viewFn: NewSubject,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["groups"] = viewer{
|
vv["groups"] = viewer{
|
||||||
gvr: "groups",
|
gvr: "groups",
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewSubject,
|
||||||
viewFn: NewSubject,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["portforwards"] = viewer{
|
vv["portforwards"] = viewer{
|
||||||
gvr: "portforwards",
|
gvr: "portforwards",
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewPortForward,
|
||||||
viewFn: NewPortForward,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["benchmarks"] = viewer{
|
vv["benchmarks"] = viewer{
|
||||||
gvr: "benchmarks",
|
gvr: "benchmarks",
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewBench,
|
||||||
viewFn: NewBench,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["screendumps"] = viewer{
|
vv["screendumps"] = viewer{
|
||||||
gvr: "screendumps",
|
gvr: "screendumps",
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewScreenDump,
|
||||||
viewFn: NewScreenDump,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func appsRes(vv viewers) {
|
func appsRes(vv viewers) {
|
||||||
vv["apps/v1/deployments"] = viewer{
|
vv["apps/v1/deployments"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewDeploy,
|
||||||
viewFn: NewDeploy,
|
listFn: resource.NewDeploymentList,
|
||||||
listFn: resource.NewDeploymentList,
|
colorerFn: dpColorer,
|
||||||
colorerFn: dpColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["apps/v1/replicasets"] = viewer{
|
vv["apps/v1/replicasets"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewReplicaSet,
|
||||||
viewFn: NewReplicaSet,
|
listFn: resource.NewReplicaSetList,
|
||||||
listFn: resource.NewReplicaSetList,
|
colorerFn: rsColorer,
|
||||||
colorerFn: rsColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["apps/v1/statefulsets"] = viewer{
|
vv["apps/v1/statefulsets"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewStatefulSet,
|
||||||
viewFn: NewStatefulSet,
|
listFn: resource.NewStatefulSetList,
|
||||||
listFn: resource.NewStatefulSetList,
|
colorerFn: stsColorer,
|
||||||
colorerFn: stsColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["apps/v1/daemonsets"] = viewer{
|
vv["apps/v1/daemonsets"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewDaemonSet,
|
||||||
viewFn: NewDaemonSet,
|
listFn: resource.NewDaemonSetList,
|
||||||
listFn: resource.NewDaemonSetList,
|
colorerFn: dpColorer,
|
||||||
colorerFn: dpColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func authRes(vv viewers) {
|
func authRes(vv viewers) {
|
||||||
vv["rbac.authorization.k8s.io/v1/clusterroles"] = viewer{
|
vv["rbac.authorization.k8s.io/v1/clusterroles"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewClusterRoleList,
|
||||||
listFn: resource.NewClusterRoleList,
|
enterFn: showRBAC,
|
||||||
enterFn: showRBAC,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["rbac.authorization.k8s.io/v1/clusterrolebindings"] = viewer{
|
vv["rbac.authorization.k8s.io/v1/clusterrolebindings"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewClusterRoleBindingList,
|
||||||
listFn: resource.NewClusterRoleBindingList,
|
enterFn: showClusterRole,
|
||||||
enterFn: showClusterRole,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["rbac.authorization.k8s.io/v1/rolebindings"] = viewer{
|
vv["rbac.authorization.k8s.io/v1/rolebindings"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewRoleBindingList,
|
||||||
listFn: resource.NewRoleBindingList,
|
enterFn: showRole,
|
||||||
enterFn: showRole,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["rbac.authorization.k8s.io/v1/roles"] = viewer{
|
vv["rbac.authorization.k8s.io/v1/roles"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewRoleList,
|
||||||
listFn: resource.NewRoleList,
|
enterFn: showRBAC,
|
||||||
enterFn: showRBAC,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func extRes(vv viewers) {
|
func extRes(vv viewers) {
|
||||||
vv["apiextensions.k8s.io/v1/customresourcedefinitions"] = viewer{
|
vv["apiextensions.k8s.io/v1/customresourcedefinitions"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewCustomResourceDefinitionList,
|
||||||
listFn: resource.NewCustomResourceDefinitionList,
|
enterFn: showCRD,
|
||||||
enterFn: showCRD,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["apiextensions.k8s.io/v1beta1/customresourcedefinitions"] = viewer{
|
vv["apiextensions.k8s.io/v1beta1/customresourcedefinitions"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewCustomResourceDefinitionList,
|
||||||
listFn: resource.NewCustomResourceDefinitionList,
|
enterFn: showCRD,
|
||||||
enterFn: showCRD,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func netRes(vv viewers) {
|
func netRes(vv viewers) {
|
||||||
vv["networking.k8s.io/v1/networkpolicies"] = viewer{
|
vv["networking.k8s.io/v1/networkpolicies"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewNetworkPolicyList,
|
||||||
listFn: resource.NewNetworkPolicyList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["extensions/v1beta1/ingresses"] = viewer{
|
vv["extensions/v1beta1/ingresses"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewIngressList,
|
||||||
listFn: resource.NewIngressList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func batchRes(vv viewers) {
|
func batchRes(vv viewers) {
|
||||||
vv["batch/v1beta1/cronjobs"] = viewer{
|
vv["batch/v1beta1/cronjobs"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewCronJob,
|
||||||
viewFn: NewCronJob,
|
listFn: resource.NewCronJobList,
|
||||||
listFn: resource.NewCronJobList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vv["batch/v1/jobs"] = viewer{
|
vv["batch/v1/jobs"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
viewFn: NewJob,
|
||||||
viewFn: NewJob,
|
listFn: resource.NewJobList,
|
||||||
listFn: resource.NewJobList,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func policyRes(vv viewers) {
|
func policyRes(vv viewers) {
|
||||||
vv["policy/v1beta1/poddisruptionbudgets"] = viewer{
|
vv["policy/v1beta1/poddisruptionbudgets"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewPDBList,
|
||||||
listFn: resource.NewPDBList,
|
colorerFn: pdbColorer,
|
||||||
colorerFn: pdbColorer,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func hpaRes(vv viewers) {
|
func hpaRes(vv viewers) {
|
||||||
vv["autoscaling/v1/horizontalpodautoscalers"] = viewer{
|
vv["autoscaling/v1/horizontalpodautoscalers"] = viewer{
|
||||||
viewerCapability: viewerCapability{
|
listFn: resource.NewHorizontalPodAutoscalerV1List,
|
||||||
listFn: resource.NewHorizontalPodAutoscalerV1List,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ type Resource struct {
|
||||||
path *string
|
path *string
|
||||||
envFn envFn
|
envFn envFn
|
||||||
gvr string
|
gvr string
|
||||||
|
colorerFn ui.ColorerFunc
|
||||||
|
decorateFn decorateFn
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewResource returns a new viewer.
|
// NewResource returns a new viewer.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue