diff --git a/.codebeatsettings b/.codebeatsettings new file mode 100644 index 00000000..f7365e93 --- /dev/null +++ b/.codebeatsettings @@ -0,0 +1,28 @@ +{ + "GOLANG": { + "TOO_MANY_IVARS": [ + 8, + 10, + 14, + 20 + ], + "LOC": [ + 50, + 60, + 80, + 100 + ], + "TOTAL_LOC": [ + 300, + 400, + 600, + 1000 + ], + "TOO_MANY_FUNCTIONS": [ + 30, + 40, + 50, + 60 + ] + } +} \ No newline at end of file diff --git a/internal/view/registrar.go b/internal/view/registrar.go index a795d44c..b0854296 100644 --- a/internal/view/registrar.go +++ b/internal/view/registrar.go @@ -17,11 +17,7 @@ type ( enterFn func(app *App, ns, resource, selection string) decorateFn func(resource.TableData) resource.TableData - viewer struct { - gvr string - kind string - namespaced bool - verbs metav1.Verbs + viewerCapability struct { viewFn viewFn listFn listFn enterFn enterFn @@ -29,6 +25,15 @@ type ( decorateFn decorateFn } + viewer struct { + viewerCapability + + gvr string + kind string + namespaced bool + verbs metav1.Verbs + } + viewers map[string]viewer ) @@ -69,10 +74,12 @@ func allCRDs(c k8s.Connection, vv viewers) { } vv[gvrs] = viewer{ - gvr: gvrs, - kind: meta.Kind, - viewFn: listFunc(resource.NewCustomList(c, meta.Namespaced, "", gvrs)), - colorerFn: ui.DefaultColorer, + gvr: gvrs, + kind: meta.Kind, + viewerCapability: viewerCapability{ + viewFn: listFunc(resource.NewCustomList(c, meta.Namespaced, "", gvrs)), + colorerFn: ui.DefaultColorer, + }, } } } @@ -170,172 +177,242 @@ func resourceViews(c k8s.Connection, m viewers) { func coreRes(vv viewers) { vv["v1/nodes"] = viewer{ - viewFn: NewNode, - listFn: resource.NewNodeList, - colorerFn: nsColorer, + viewerCapability: viewerCapability{ + viewFn: NewNode, + listFn: resource.NewNodeList, + colorerFn: nsColorer, + }, } vv["v1/namespaces"] = viewer{ - viewFn: NewNamespace, - listFn: resource.NewNamespaceList, - colorerFn: nsColorer, + viewerCapability: viewerCapability{ + viewFn: NewNamespace, + listFn: resource.NewNamespaceList, + colorerFn: nsColorer, + }, } vv["v1/pods"] = viewer{ - viewFn: NewPod, - listFn: resource.NewPodList, - colorerFn: podColorer, + viewerCapability: viewerCapability{ + viewFn: NewPod, + listFn: resource.NewPodList, + colorerFn: podColorer, + }, } vv["v1/serviceaccounts"] = viewer{ - listFn: resource.NewServiceAccountList, - enterFn: showSAPolicy, + viewerCapability: viewerCapability{ + listFn: resource.NewServiceAccountList, + enterFn: showSAPolicy, + }, } vv["v1/services"] = viewer{ - viewFn: NewService, - listFn: resource.NewServiceList, + viewerCapability: viewerCapability{ + viewFn: NewService, + listFn: resource.NewServiceList, + }, } vv["v1/configmaps"] = viewer{ - listFn: resource.NewConfigMapList, + viewerCapability: viewerCapability{ + listFn: resource.NewConfigMapList, + }, } vv["v1/persistentvolumes"] = viewer{ - listFn: resource.NewPersistentVolumeList, - colorerFn: pvColorer, + viewerCapability: viewerCapability{ + listFn: resource.NewPersistentVolumeList, + colorerFn: pvColorer, + }, } vv["v1/persistentvolumeclaims"] = viewer{ - listFn: resource.NewPersistentVolumeClaimList, - colorerFn: pvcColorer, + viewerCapability: viewerCapability{ + listFn: resource.NewPersistentVolumeClaimList, + colorerFn: pvcColorer, + }, } vv["v1/secrets"] = viewer{ - viewFn: NewSecret, - listFn: resource.NewSecretList, + viewerCapability: viewerCapability{ + viewFn: NewSecret, + listFn: resource.NewSecretList, + }, } vv["v1/endpoints"] = viewer{ - listFn: resource.NewEndpointsList, + viewerCapability: viewerCapability{ + listFn: resource.NewEndpointsList, + }, } vv["v1/events"] = viewer{ - listFn: resource.NewEventList, - colorerFn: evColorer, + viewerCapability: viewerCapability{ + listFn: resource.NewEventList, + colorerFn: evColorer, + }, } vv["v1/replicationcontrollers"] = viewer{ - viewFn: NewScalableResource, - listFn: resource.NewReplicationControllerList, - colorerFn: rsColorer, + viewerCapability: viewerCapability{ + viewFn: NewScalableResource, + listFn: resource.NewReplicationControllerList, + colorerFn: rsColorer, + }, } } func miscRes(vv viewers) { vv["storage.k8s.io/v1/storageclasses"] = viewer{ - listFn: resource.NewStorageClassList, + viewerCapability: viewerCapability{ + listFn: resource.NewStorageClassList, + }, } vv["contexts"] = viewer{ - gvr: "contexts", - kind: "Contexts", - viewFn: NewContext, - listFn: resource.NewContextList, - colorerFn: ctxColorer, + gvr: "contexts", + kind: "Contexts", + viewerCapability: viewerCapability{ + viewFn: NewContext, + listFn: resource.NewContextList, + colorerFn: ctxColorer, + }, } vv["users"] = viewer{ - gvr: "users", - viewFn: NewSubject, + gvr: "users", + viewerCapability: viewerCapability{ + viewFn: NewSubject, + }, } vv["groups"] = viewer{ - gvr: "groups", - viewFn: NewSubject, + gvr: "groups", + viewerCapability: viewerCapability{ + viewFn: NewSubject, + }, } vv["portforwards"] = viewer{ - gvr: "portforwards", - viewFn: NewPortForward, + gvr: "portforwards", + viewerCapability: viewerCapability{ + viewFn: NewPortForward, + }, } vv["benchmarks"] = viewer{ - gvr: "benchmarks", - viewFn: NewBench, + gvr: "benchmarks", + viewerCapability: viewerCapability{ + viewFn: NewBench, + }, } vv["screendumps"] = viewer{ - gvr: "screendumps", - viewFn: NewScreenDump, + gvr: "screendumps", + viewerCapability: viewerCapability{ + viewFn: NewScreenDump, + }, } } func appsRes(vv viewers) { vv["apps/v1/deployments"] = viewer{ - viewFn: NewDeploy, - listFn: resource.NewDeploymentList, - colorerFn: dpColorer, + viewerCapability: viewerCapability{ + viewFn: NewDeploy, + listFn: resource.NewDeploymentList, + colorerFn: dpColorer, + }, } vv["apps/v1/replicasets"] = viewer{ - viewFn: NewReplicaSet, - listFn: resource.NewReplicaSetList, - colorerFn: rsColorer, + viewerCapability: viewerCapability{ + viewFn: NewReplicaSet, + listFn: resource.NewReplicaSetList, + colorerFn: rsColorer, + }, } vv["apps/v1/statefulsets"] = viewer{ - viewFn: NewStatefulSet, - listFn: resource.NewStatefulSetList, - colorerFn: stsColorer, + viewerCapability: viewerCapability{ + viewFn: NewStatefulSet, + listFn: resource.NewStatefulSetList, + colorerFn: stsColorer, + }, } vv["apps/v1/daemonsets"] = viewer{ - viewFn: NewDaemonSet, - listFn: resource.NewDaemonSetList, - colorerFn: dpColorer, + viewerCapability: viewerCapability{ + viewFn: NewDaemonSet, + listFn: resource.NewDaemonSetList, + colorerFn: dpColorer, + }, } } func authRes(vv viewers) { vv["rbac.authorization.k8s.io/v1/clusterroles"] = viewer{ - listFn: resource.NewClusterRoleList, - enterFn: showRBAC, + viewerCapability: viewerCapability{ + listFn: resource.NewClusterRoleList, + enterFn: showRBAC, + }, } vv["rbac.authorization.k8s.io/v1/clusterrolebindings"] = viewer{ - listFn: resource.NewClusterRoleBindingList, - enterFn: showClusterRole, + viewerCapability: viewerCapability{ + listFn: resource.NewClusterRoleBindingList, + enterFn: showClusterRole, + }, } vv["rbac.authorization.k8s.io/v1/rolebindings"] = viewer{ - listFn: resource.NewRoleBindingList, - enterFn: showRole, + viewerCapability: viewerCapability{ + listFn: resource.NewRoleBindingList, + enterFn: showRole, + }, } vv["rbac.authorization.k8s.io/v1/roles"] = viewer{ - listFn: resource.NewRoleList, - enterFn: showRBAC, + viewerCapability: viewerCapability{ + listFn: resource.NewRoleList, + enterFn: showRBAC, + }, } } func extRes(vv viewers) { vv["apiextensions.k8s.io/v1/customresourcedefinitions"] = viewer{ - listFn: resource.NewCustomResourceDefinitionList, - enterFn: showCRD, + viewerCapability: viewerCapability{ + listFn: resource.NewCustomResourceDefinitionList, + enterFn: showCRD, + }, } vv["apiextensions.k8s.io/v1beta1/customresourcedefinitions"] = viewer{ - listFn: resource.NewCustomResourceDefinitionList, - enterFn: showCRD, + viewerCapability: viewerCapability{ + listFn: resource.NewCustomResourceDefinitionList, + enterFn: showCRD, + }, } } func netRes(vv viewers) { vv["networking.k8s.io/v1/networkpolicies"] = viewer{ - listFn: resource.NewNetworkPolicyList, + viewerCapability: viewerCapability{ + listFn: resource.NewNetworkPolicyList, + }, } vv["extensions/v1beta1/ingresses"] = viewer{ - listFn: resource.NewIngressList, + viewerCapability: viewerCapability{ + listFn: resource.NewIngressList, + }, } } func batchRes(vv viewers) { vv["batch/v1beta1/cronjobs"] = viewer{ - viewFn: NewCronJob, - listFn: resource.NewCronJobList, + viewerCapability: viewerCapability{ + viewFn: NewCronJob, + listFn: resource.NewCronJobList, + }, } vv["batch/v1/jobs"] = viewer{ - viewFn: NewJob, - listFn: resource.NewJobList, + viewerCapability: viewerCapability{ + viewFn: NewJob, + listFn: resource.NewJobList, + }, } } func policyRes(vv viewers) { vv["policy/v1beta1/poddisruptionbudgets"] = viewer{ - listFn: resource.NewPDBList, - colorerFn: pdbColorer, + viewerCapability: viewerCapability{ + listFn: resource.NewPDBList, + colorerFn: pdbColorer, + }, } } func hpaRes(vv viewers) { vv["autoscaling/v1/horizontalpodautoscalers"] = viewer{ - listFn: resource.NewHorizontalPodAutoscalerV1List, + viewerCapability: viewerCapability{ + listFn: resource.NewHorizontalPodAutoscalerV1List, + }, } }