k9s/internal/model/types.go

149 lines
3.3 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package model
import (
"context"
"time"
"github.com/derailed/k9s/internal/client"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/model1"
"github.com/derailed/k9s/internal/view/cmd"
"github.com/derailed/tview"
"github.com/sahilm/fuzzy"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
)
const (
maxReaderRetryInterval = 2 * time.Minute
defaultReaderRefreshRate = 5 * time.Second
)
// ResourceViewerListener listens to viewing resource events.
type ResourceViewerListener interface {
ResourceChanged(lines []string, matches fuzzy.Matches)
ResourceFailed(error)
}
// ViewerToggleOpts represents a collection of viewing options.
type ViewerToggleOpts map[string]bool
// ResourceViewer represents a viewed resource.
type ResourceViewer interface {
GetPath() string
Filter(string)
GVR() *client.GVR
ClearFilter()
Peek() []string
SetOptions(context.Context, ViewerToggleOpts)
Watch(context.Context) error
Refresh(context.Context) error
AddListener(ResourceViewerListener)
RemoveListener(ResourceViewerListener)
}
// EncDecResourceViewer interface extends the ResourceViewer interface and
// adds a `Toggle` that allows the user to switch between encoded or decoded
// state of the view.
type EncDecResourceViewer interface {
ResourceViewer
Toggle()
}
// Igniter represents a runnable view.
type Igniter interface {
// Start starts a component.
Init(ctx context.Context) error
// Start starts a component.
Start()
// Stop terminates a component.
Stop()
}
// Hinter represent a menu mnemonic provider.
type Hinter interface {
// Hints returns a collection of menu hints.
Hints() MenuHints
// ExtraHints returns additional hints.
ExtraHints() map[string]string
}
// Primitive represents a UI primitive.
type Primitive interface {
tview.Primitive
// Name returns the view name.
Name() string
}
// Commander tracks prompt status.
type Commander interface {
// InCmdMode checks if prompt is active.
InCmdMode() bool
}
// Component represents a ui component.
type Component interface {
Primitive
Igniter
Hinter
Commander
Filterer
Viewer
}
// Viewer represents a resource viewer.
type Viewer interface {
// SetCommand sets the current command.
SetCommand(*cmd.Interpreter)
}
type Filterer interface {
SetFilter(string)
SetLabelSelector(labels.Selector)
}
// Cruder performs crud operations.
type Cruder interface {
// List returns a collection of resources.
List(ctx context.Context, ns string) ([]runtime.Object, error)
// Get returns a resource instance.
Get(ctx context.Context, path string) (runtime.Object, error)
}
// Lister represents a resource lister.
type Lister interface {
Cruder
// Init initializes a resource.
Init(ns, gvr string, f dao.Factory)
}
// Describer represents a resource describer.
type Describer interface {
// ToYAML return resource yaml.
ToYAML(ctx context.Context, path string) (string, error)
// Describe returns a resource description.
Describe(client client.Connection, gvr, path string) (string, error)
}
// TreeRenderer represents an xray node.
type TreeRenderer interface {
Render(ctx context.Context, ns string, o any) error
}
// ResourceMeta represents model info about a resource.
type ResourceMeta struct {
DAO dao.Accessor
Renderer model1.Renderer
TreeRenderer TreeRenderer
}