Files
kandev/apps/backend/internal/kubernetes/sessions_cache.go
T
2026-09-24 07:37:17 +01:00

40 lines
1.2 KiB
Go

package kubernetes
import (
"context"
"github.com/kandev/kandev/internal/task/models"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kubeclient "k8s.io/client-go/kubernetes"
)
type environmentStatusResult struct {
record *models.KubernetesEnvironment
err error
}
type podStatusResult struct {
pod *corev1.Pod
err error
}
// A request projects one observed physical state onto every authorized session.
// Identity and task authorization remain checked separately for every row.
type sessionStatusCache struct {
client kubeclient.Interface
environments map[string]environmentStatusResult
pods map[string]podStatusResult
}
func newSessionStatusCache(client kubeclient.Interface) *sessionStatusCache {
return &sessionStatusCache{client: client, environments: make(map[string]environmentStatusResult), pods: make(map[string]podStatusResult)}
}
func (c *sessionStatusCache) pod(ctx context.Context, namespace, name string) (*corev1.Pod, error) {
key := namespace + "/" + name
result, exists := c.pods[key]
if !exists {
result.pod, result.err = c.client.CoreV1().Pods(namespace).Get(ctx, name, metav1.GetOptions{})
c.pods[key] = result
}
return result.pod, result.err
}