Function bodies 285 total
k8s.LoadDedicatedAIClusters function · go · L149-L160 (12 LOC)internal/infra/k8s/dac.go
func LoadDedicatedAIClusters(ctx context.Context, client dynamic.Interface) (map[string][]models.DedicatedAICluster, error) {
dacs, err := listDedicatedAIClusters(ctx, client)
if err != nil {
return nil, err
}
result := make(map[string][]models.DedicatedAICluster)
for _, dac := range dacs {
result[dac.TenantID] = append(result[dac.TenantID], dac)
}
return result, nil
}k8s.tenantIDFromLabels function · go · L162-L170 (9 LOC)internal/infra/k8s/dac.go
func tenantIDFromLabels(labels map[string]any) string {
value := labels["tenancy-id"]
if value != nil {
if str, ok := value.(string); ok {
return str
}
}
return "UNKNOWN_TENANCY"
}k8s.ListGpuNodes function · go · L24-L92 (69 LOC)internal/infra/k8s/gpu_node.go
func ListGpuNodes(ctx context.Context, clientset kubernetes.Interface, limit int) ([]models.GpuNode, error) {
nodes, err := clientset.CoreV1().Nodes().List(ctx, v1.ListOptions{
LabelSelector: "nvidia.com/gpu.present=true",
Limit: int64(limit),
})
if err != nil {
return nil, err
}
// 1. GPU allocation: as before, using processPodQueries (4 label selectors)
gpuAllocationMap := make(map[string]int64)
for _, node := range nodes.Items {
gpuAllocationMap[node.Name] = 0
}
err = processPodQueries(ctx, clientset, gpuPodSelectors, runningPodSelector,
getGpuAllocations,
func(node string, usage int64) {
gpuAllocationMap[node] += usage
})
if err != nil {
return nil, err
}
// 2. Pod issues: one extra query for all pods not Running/Succeeded
badPhaseSelector := "status.phase!=Running,status.phase!=Succeeded"
badPods, err := clientset.CoreV1().Pods("").List(ctx, v1.ListOptions{
FieldSelector: badPhaseSelector,
})
if err != nil {
return nil, err
}
podIk8s.getNodeIssues function · go · L95-L113 (19 LOC)internal/infra/k8s/gpu_node.go
func getNodeIssues(conditions []corev1.NodeCondition) []string {
issues := make([]string, 0)
for _, c := range conditions {
switch c.Type {
case corev1.NodeMemoryPressure,
corev1.NodeDiskPressure,
corev1.NodePIDPressure,
corev1.NodeNetworkUnavailable,
nodeCondGpuBus,
nodeCondGpuCount:
if c.Status == corev1.ConditionTrue {
issues = append(issues, c.Message)
}
case corev1.NodeReady:
// exhaustive check
}
}
return issues
}k8s.getPodReason function · go · L115-L128 (14 LOC)internal/infra/k8s/gpu_node.go
func getPodReason(p *corev1.Pod) string {
if p.Status.Reason != "" {
return p.Status.Reason
}
for _, cs := range p.Status.ContainerStatuses {
if cs.State.Waiting != nil {
return cs.State.Waiting.Reason
}
if cs.State.Terminated != nil {
return cs.State.Terminated.Reason
}
}
return "unknown"
}k8s.isNodeReady function · go · L130-L137 (8 LOC)internal/infra/k8s/gpu_node.go
func isNodeReady(conditions []corev1.NodeCondition) bool {
for _, condition := range conditions {
if condition.Type == corev1.NodeReady {
return condition.Status == corev1.ConditionTrue
}
}
return false
}k8s.LoadGpuNodes function · go · L143-L154 (12 LOC)internal/infra/k8s/gpu_node.go
func LoadGpuNodes(ctx context.Context, clientset kubernetes.Interface) (map[string][]models.GpuNode, error) {
nodes, err := ListGpuNodes(ctx, clientset, 0)
if err != nil {
return nil, err
}
result := make(map[string][]models.GpuNode)
for _, node := range nodes {
result[node.NodePool] = append(result[node.NodePool], node)
}
return result, nil
}Powered by Repobility — scan your code at https://repobility.com
k8s.PodCache.getPodStats method · go · L25-L76 (52 LOC)internal/infra/k8s/pod_cache.go
func (c PodCache) getPodStats(ctx context.Context, namespace string) PodStats {
pods := c.byNS[namespace]
idlePods, totalPods := 0, len(pods)
componentMap := make(map[string]struct{})
modelNameMap := make(map[string]struct{})
logger := logging.FromContext(ctx)
for _, item := range pods {
labels := getLabels(item)
if labels[appLabel] == reservationLabel {
idlePods++
continue
}
annos := getAnnotations(item)
if modelName, ok := annos[baseModelLabelV2]; ok {
modelNameMap[modelName] = struct{}{}
} else if modelName, ok := labels[baseModelLabelV1]; ok {
modelNameMap[modelName] = struct{}{}
} else {
logger.Errorw("workload pod without base model annotation/label",
"pod", item.GetName(), "namespace", item.GetNamespace())
}
if _, ok := labels[servingLabelV1]; ok {
componentMap[servingLabelV1] = struct{}{}
} else if _, ok := labels[servingLabelV2]; ok {
componentMap[servingLabelV2] = struct{}{}
} else if _, ok := labels[trainingLabelV2]; okk8s.getUniqeKey function · go · L78-L95 (18 LOC)internal/infra/k8s/pod_cache.go
func getUniqeKey(logger logging.Logger, m map[string]struct{}, namespace string) string {
if len(m) == 0 {
return ""
}
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
if len(keys) > 1 {
logger.Errorw("multiple configs found on workload pods in namespace",
"values", keys, "namespace", namespace)
return ""
}
return keys[0]
}k8s.getLabels function · go · L98-L110 (13 LOC)internal/infra/k8s/pod_cache.go
func getLabels(item *unstructured.Unstructured) map[string]string {
labels := make(map[string]string)
raw, found, _ := unstructured.NestedMap(item.Object, "metadata", "labels")
if !found {
return labels
}
for k, v := range raw {
if s, ok := v.(string); ok {
labels[k] = s
}
}
return labels
}k8s.getAnnotations function · go · L113-L125 (13 LOC)internal/infra/k8s/pod_cache.go
func getAnnotations(item *unstructured.Unstructured) map[string]string {
annos := make(map[string]string)
raw, found, _ := unstructured.NestedMap(item.Object, "metadata", "annotations")
if !found {
return annos
}
for k, v := range raw {
if s, ok := v.(string); ok {
annos[k] = s
}
}
return annos
}k8s.buildPodCache function · go · L127-L140 (14 LOC)internal/infra/k8s/pod_cache.go
func buildPodCache(ctx context.Context, client dynamic.Interface) (PodCache, error) {
cache := PodCache{byNS: make(map[string][]*unstructured.Unstructured)}
err := processPodQueries(ctx, client, gpuPodSelectors, runningPodSelector,
listPodsWithSelectors,
func(ns string, pods []*unstructured.Unstructured) {
cache.byNS[ns] = append(cache.byNS[ns], pods...)
})
if err != nil {
return cache, err
}
return cache, nil
}k8s.getGpuAllocations function · go · L36-L56 (21 LOC)internal/infra/k8s/pod_utils.go
func getGpuAllocations(
ctx context.Context,
clientset kubernetes.Interface,
labelSelector string,
fieldSelector string,
) (map[string]int64, error) {
pods, err := clientset.CoreV1().Pods("").List(ctx, v1.ListOptions{
LabelSelector: labelSelector,
FieldSelector: fieldSelector,
})
if err != nil {
return nil, fmt.Errorf("failed to list pods for selector %q in getGpuAllocations: %w", labelSelector, err)
}
usageMap := make(map[string]int64)
for _, pod := range pods.Items {
usageMap[pod.Spec.NodeName] += calculatePodGPUs(&pod)
}
return usageMap, nil
}k8s.calculatePodGPUs function · go · L58-L66 (9 LOC)internal/infra/k8s/pod_utils.go
func calculatePodGPUs(pod *corev1.Pod) int64 {
var total int64
for _, container := range pod.Spec.Containers {
if val, ok := container.Resources.Requests[gpuProperty]; ok {
total += val.Value()
}
}
return total
}k8s.listPodsWithSelectors function · go · L69-L95 (27 LOC)internal/infra/k8s/pod_utils.go
func listPodsWithSelectors(
ctx context.Context,
client dynamic.Interface,
labelSelector string,
fieldSelector string,
) (map[string][]*unstructured.Unstructured, error) {
gvr := schema.GroupVersionResource{
Group: "",
Version: "v1",
Resource: "pods",
}
list, err := client.Resource(gvr).List(ctx, v1.ListOptions{
LabelSelector: labelSelector,
FieldSelector: fieldSelector,
})
if err != nil {
return nil, err
}
podsMap := make(map[string][]*unstructured.Unstructured)
for i, pod := range list.Items {
ns := pod.GetNamespace()
podsMap[ns] = append(podsMap[ns], &list.Items[i])
}
return podsMap, nil
}Generated by Repobility's multi-pass static-analysis pipeline (https://repobility.com)
k8s.FormatAge function · go · L10-L21 (12 LOC)internal/infra/k8s/time_utils.go
func FormatAge(d time.Duration) string {
switch {
case d.Hours() >= 48:
return fmt.Sprintf("%dd", int(d.Hours())/24)
case d.Hours() >= 1:
return fmt.Sprintf("%dh", int(d.Hours()))
case d.Minutes() >= 1:
return fmt.Sprintf("%dm", int(d.Minutes()))
default:
return fmt.Sprintf("%ds", int(d.Seconds()))
}
}k8s.ParseAge function · go · L25-L48 (24 LOC)internal/infra/k8s/time_utils.go
func ParseAge(s string) int64 {
if len(s) < 2 {
return 0
}
unit := s[len(s)-1]
var mult int64
switch unit {
case 's':
mult = 1
case 'm':
mult = 60
case 'h':
mult = 3600
case 'd':
mult = 86400
default:
return 0
}
v, err := strconv.ParseInt(s[:len(s)-1], 10, 64)
if err != nil || v < 0 {
return 0
}
return v * mult
}production.NewLoader function · go · L26-L41 (16 LOC)internal/infra/loader/production/production.go
func NewLoader(ctx context.Context, metadataFile string) loader.Loader {
l := &Loader{
metadataFile: metadataFile,
metadata: &models.Metadata{},
}
if metadataFile != "" {
m, err := configloader.LoadMetadata(metadataFile)
if err != nil {
logging.FromContext(ctx).Errorw("failed to load metadata file", "file", metadataFile, "error", err)
} else {
l.metadata = m
}
}
return l
}production.Loader.LoadBaseModels method · go · L58-L64 (7 LOC)internal/infra/loader/production/production.go
func (Loader) LoadBaseModels(ctx context.Context, kubeCfg string, env models.Environment) ([]models.BaseModel, error) {
client, err := k8s.NewDynamicClientFromKubeConfig(kubeCfg, env.GetKubeContext())
if err != nil {
return nil, err
}
return k8s.LoadBaseModels(ctx, client)
}production.Loader.LoadGpuNodes method · go · L75-L81 (7 LOC)internal/infra/loader/production/production.go
func (Loader) LoadGpuNodes(ctx context.Context, kubeCfg string, env models.Environment) (map[string][]models.GpuNode, error) {
client, err := k8s.NewClientsetFromKubeConfig(kubeCfg, env.GetKubeContext())
if err != nil {
return nil, err
}
return k8s.LoadGpuNodes(ctx, client)
}production.Loader.LoadDedicatedAIClusters method · go · L87-L93 (7 LOC)internal/infra/loader/production/production.go
func (Loader) LoadDedicatedAIClusters(ctx context.Context, kubeCfg string, env models.Environment) (map[string][]models.DedicatedAICluster, error) {
client, err := k8s.NewDynamicClientFromKubeConfig(kubeCfg, env.GetKubeContext())
if err != nil {
return nil, err
}
return k8s.LoadDedicatedAIClusters(ctx, client)
}oci.GetComputeClient function · go · L20-L32 (13 LOC)internal/infra/oci/compute.go
func GetComputeClient(env models.Environment) (*core.ComputeClient, error) {
profile := strings.ToUpper(env.Realm)
provider, err := computeConfigProviderFunc(OciConfigPath, profile, "")
if err != nil {
return nil, fmt.Errorf("failed to get OCI config provider: %w", err)
}
client, err := computeClientFactory(provider)
if err != nil {
return nil, fmt.Errorf("failed to create compute client: %w", err)
}
client.SetRegion(env.Region)
return &client, nil
}oci.GetComputeManagementClient function · go · L37-L49 (13 LOC)internal/infra/oci/compute.go
func GetComputeManagementClient(env models.Environment) (*core.ComputeManagementClient, error) {
profile := strings.ToUpper(env.Realm)
provider, err := computeConfigProviderFunc(OciConfigPath, profile, "")
if err != nil {
return nil, fmt.Errorf("failed to get OCI config provider: %w", err)
}
client, err := computeMgmtClientFactory(provider)
if err != nil {
return nil, fmt.Errorf("failed to create compute management client: %w", err)
}
client.SetRegion(env.Region)
return &client, nil
}All rows above produced by Repobility · https://repobility.com
oci.getGenAIClientWithDeps function · go · L26-L48 (23 LOC)internal/infra/oci/genai.go
func getGenAIClientWithDeps(
env models.Environment,
providerFn configProviderFunc,
clientFn genAIClientFunc,
) (*generativeai.GenerativeAiClient, error) {
profile := strings.ToUpper(env.Realm)
provider, err := providerFn(OciConfigPath, profile, "")
if err != nil {
return nil, fmt.Errorf("failed to get OCI config provider: %w", err)
}
client, err := clientFn(provider)
if err != nil {
return nil, fmt.Errorf("failed to create GenerativeAI client: %w", err)
}
client.SetRegion(env.Region)
if env.Type != "prod" {
client.Host = getServiceEndpoint(client.Endpoint(), env.Type)
}
return &client, nil
}oci.GetGenAIClient function · go · L53-L59 (7 LOC)internal/infra/oci/genai.go
func GetGenAIClient(env models.Environment) (*generativeai.GenerativeAiClient, error) {
return getGenAIClientWithDeps(
env,
common.ConfigurationProviderForSessionTokenWithProfile,
generativeai.NewGenerativeAiClientWithConfigurationProvider,
)
}oci.getServiceEndpoint function · go · L62-L67 (6 LOC)internal/infra/oci/genai.go
func getServiceEndpoint(serviceEndpoint string, envType string) string {
prefix := strings.ReplaceAll(envType, "preprod", "ppe")
u, _ := url.Parse(serviceEndpoint)
u.Host = fmt.Sprintf("%s.%s", prefix, u.Host)
return u.String()
}terraform.getLocalAttributesDI function · go · L56-L75 (20 LOC)internal/infra/terraform/terraform.go
func getLocalAttributesDI(
ctx context.Context,
dirPath string,
listFilesFunc func(context.Context, string, string) ([]string, error),
updateLocalAttributesFunc func(string, hclsyntax.Attributes) error,
) (hclsyntax.Attributes, error) {
tfFiles, err := listFilesFunc(ctx, dirPath, ".tf")
if err != nil {
return nil, fmt.Errorf("failed to open file: %w", err)
}
attributes := make(hclsyntax.Attributes)
for _, file := range tfFiles {
if err := updateLocalAttributesFunc(file, attributes); err != nil {
return nil, fmt.Errorf("update local attributes: %w", err)
}
}
return attributes, nil
}terraform.updateLocalAttributes function · go · L84-L104 (21 LOC)internal/infra/terraform/terraform.go
func updateLocalAttributes(filepath string, attributes hclsyntax.Attributes) error {
parser := hclparse.NewParser()
file, diags := parser.ParseHCLFile(filepath)
if diags.HasErrors() {
return fmt.Errorf("terraform diagnostics error: %w", errors.New(diags.Error()))
}
// find `locals` block
for _, block := range file.Body.(*hclsyntax.Body).Blocks {
switch block.Type {
case localBlock:
maps.Copy(attributes, block.Body.Attributes)
case outputBlock:
key := block.Labels[0]
value := block.Body.Attributes[outputValue]
attributes[key] = value
}
}
return nil
}terraform.loadLocalValueMap function · go · L112-L220 (109 LOC)internal/infra/terraform/terraform.go
func loadLocalValueMap(ctx context.Context, dirPath string, env models.Environment) (map[string]cty.Value, error) { //nolint:cyclop
logger := logging.FromContext(ctx)
attributes, err := GetLocalAttributes(ctx, dirPath)
if err != nil {
return nil, fmt.Errorf("failed to decode HCL: %w", err)
}
executionTarget := cty.ObjectVal(map[string]cty.Value{
"region": cty.ObjectVal(map[string]cty.Value{
"realm": cty.StringVal(env.Realm),
"public_name": cty.StringVal(env.Region),
"public_domain_name": cty.StringVal("example.com"),
}),
"tenancy_ocid": cty.StringVal("ocid1.tenancy.oc1..example"),
"additional_locals": cty.ObjectVal(map[string]cty.Value{
"environment": cty.StringVal(env.Type),
}),
})
localObject := cty.ObjectVal(map[string]cty.Value{
"execution_target": executionTarget,
})
varObject := cty.ObjectVal(map[string]cty.Value{
"region": cty.StringVal(env.Region),
"environment": cty.StringVal(env.Type),
})
dataObject := cty.terraform.LoadServiceTenancies function · go · L226-L264 (39 LOC)internal/infra/terraform/terraform.go
func LoadServiceTenancies(ctx context.Context, repoPath string) ([]models.ServiceTenancy, error) {
dirPath := filepath.Join(repoPath, "shared_modules/shep_targets")
attributes, err := GetLocalAttributes(ctx, dirPath)
if err != nil {
return nil, fmt.Errorf("failed to parse attributes: %w", err)
}
tenancyMap := make(map[string]*models.ServiceTenancy)
for key, attribute := range attributes {
if key == "tenancy_name_mapping" ||
strings.HasPrefix(key, "group_") ||
key == "region_groups" {
continue
}
realm := strings.Split(key, "_")[0]
value, diags := attribute.Expr.Value(nil)
if diags.HasErrors() {
return nil, errors.New(diags.Error())
}
tenancy := getServiceTenancy(value, realm)
fullName := fmt.Sprintf("%s-%s", tenancy.Realm, tenancy.Name)
if t, ok := tenancyMap[fullName]; ok {
t.Regions = append(t.Regions, tenancy.Regions...)
} else {
tenancyMap[fullName] = tenancy
}
}
tenancies := make([]models.ServiceTenancy, 0, len(tenancyMap))
foterraform.getServiceTenancy function · go · L266-L289 (24 LOC)internal/infra/terraform/terraform.go
func getServiceTenancy(object cty.Value, realm string) *models.ServiceTenancy {
result := models.ServiceTenancy{
Realm: realm,
}
for name, value := range object.AsValueMap() {
switch name {
case "tenancy_name":
result.Name = value.AsString()
case "home_region":
result.HomeRegion = value.AsString()
case "regions":
var regions []string
for _, region := range value.AsValueSlice() {
regions = append(regions, region.AsString())
}
result.Regions = regions
case "environment":
result.Environment = value.AsString()
}
}
return &result
}Repobility · severity-and-effort ranking · https://repobility.com
terraform.LoadGpuPools function · go · L295-L325 (31 LOC)internal/infra/terraform/terraform.go
func LoadGpuPools(ctx context.Context, repoPath string, env models.Environment) ([]models.GpuPool, error) {
var gpuPools []models.GpuPool
// self-managed pools
dirPath := filepath.Join(repoPath, "shared_modules/instance_pools_config")
pools, err := loadGpuPools(ctx, dirPath, "env_instance_pools_config", false, env)
if err != nil {
return nil, fmt.Errorf("failed to parse HCL file: %w", err)
}
gpuPools = append(gpuPools, pools...)
// self-managed pools (cluster network)
dirPath = filepath.Join(repoPath, "shared_modules/cluster_networks_config")
pools, err = loadGpuPools(ctx, dirPath, "env_cluster_networks_config", false, env)
if err != nil {
return nil, fmt.Errorf("failed to parse HCL file: %w", err)
}
gpuPools = append(gpuPools, pools...)
// oke-managed pools
dirPath = filepath.Join(repoPath, "shared_modules/oci_oke_nodepools_config")
pools, err = loadGpuPools(ctx, dirPath, "env_nodepools_config", true, env)
if err != nil {
return nil, fmt.Errorf("failed to pterraform.loadGpuPools function · go · L327-L363 (37 LOC)internal/infra/terraform/terraform.go
func loadGpuPools(ctx context.Context, dirPath, poolConfigName string, isOkeManaged bool,
env models.Environment,
) ([]models.GpuPool, error) {
valueMap, err := loadLocalValueMap(ctx, dirPath, env)
if err != nil {
return nil, err
}
poolsValue, ok := valueMap[poolConfigName]
if !ok {
return nil, fmt.Errorf("node pools config %s not resolved", poolConfigName)
}
var gpuPools []models.GpuPool
for name, value := range poolsValue.AsValueMap() {
pool := models.GpuPool{Name: name, IsOkeManaged: isOkeManaged, CapacityType: "on-demand", Status: "..."}
for k, v := range value.AsValueMap() {
switch k {
case "shape":
pool.Shape = v.AsString()
case "size", "node_pool_size":
size, _ := v.AsBigFloat().Int64()
pool.Size = int(size)
case "capacity_type":
pool.CapacityType = v.AsString()
case "placement_logical_ad":
pool.AvailabilityDomain = extractAvailabilityDomain(v)
}
}
if strings.Contains(pool.Shape, "GPU") {
gpuPools = append(gpuPoolsterraform.extractAvailabilityDomain function · go · L365-L378 (14 LOC)internal/infra/terraform/terraform.go
func extractAvailabilityDomain(v cty.Value) string {
t := v.Type()
if t.IsPrimitiveType() && t.FriendlyName() == "string" {
return v.AsString()
} else if t.IsListType() || t.IsTupleType() {
if slice := v.AsValueSlice(); len(slice) > 0 {
s := slice[0].AsString()
if parts := strings.Split(s, "-AD-"); len(parts) == 2 {
return "AD-" + parts[1]
}
}
}
return ""
}terraform.LoadModelArtifacts function · go · L384-L419 (36 LOC)internal/infra/terraform/terraform.go
func LoadModelArtifacts(ctx context.Context, repoPath string, env models.Environment) (map[string][]models.ModelArtifact, error) {
dirPath := filepath.Join(repoPath, "shared_modules/tensorrt_models_config")
valueMap, err := loadLocalValueMap(ctx, dirPath, env)
if err != nil {
return nil, err
}
modelMapValue, ok := valueMap["all_models_map"]
if !ok {
return nil, fmt.Errorf("all_models_map: %w", ErrModelArtifactMapNotResolved)
}
modelArtifactMap := map[string][]models.ModelArtifact{}
for modelName, value := range modelMapValue.AsValueMap() {
modelArtifacts := make([]models.ModelArtifact, 0, 4)
for trtVersion, v1 := range value.AsValueMap() {
for gpuShape, v2 := range v1.AsValueMap() {
for gpuCount, v3 := range v2.AsValueMap() {
artifact := models.ModelArtifact{
Name: v3.AsString(),
TensorRTVersion: trtVersion,
GpuCount: extractGpuNumber(gpuCount),
GpuShape: gpuShape,
ModelName: modelName,
}
terraform.createAvailabilityDomains function · go · L427-L433 (7 LOC)internal/infra/terraform/terraform.go
func createAvailabilityDomains() cty.Value {
// data.oci_identity_availability_domains.ad_list.availability_domains
ad1 := cty.ObjectVal(map[string]cty.Value{"name": cty.StringVal("AD-1")})
ads := cty.ListVal([]cty.Value{ad1})
adsValue := cty.ObjectVal(map[string]cty.Value{"availability_domains": ads})
return cty.ObjectVal(map[string]cty.Value{"ad_list": adsValue})
}actions.CopyItemName function · go · L15-L33 (19 LOC)internal/ui/tui/actions/actions.go
func CopyItemName(item any, env models.Environment, logger logging.Logger) {
if item == nil {
logger.Errorw("no item selected for copying name")
return
}
if dac, ok := item.(*models.DedicatedAICluster); ok {
id := dac.GetID(env.Realm, env.Region)
if err := clipboardWriteAll(id); err != nil {
logger.Errorw("failed to copy id to clipboard", "error", err)
}
} else if to, ok := item.(models.NamedItem); ok {
if err := clipboardWriteAll(to.GetName()); err != nil {
logger.Errorw("failed to copy name to clipboard", "error", err)
}
} else {
logger.Errorw("unsupported item type for copying name", "item", item)
}
}actions.CopyTenantID function · go · L36-L54 (19 LOC)internal/ui/tui/actions/actions.go
func CopyTenantID(item any, env models.Environment, logger logging.Logger) {
if item == nil {
logger.Errorw("no item selected for copying tenant ID")
return
}
if dac, ok := item.(*models.DedicatedAICluster); ok {
tenantID := dac.GetTenantID(env.Realm)
if err := clipboardWriteAll(tenantID); err != nil {
logger.Errorw("failed to copy tenantID to clipboard", "error", err)
}
} else if to, ok := item.(models.TenancyOverride); ok {
if err := clipboardWriteAll(to.GetTenantID()); err != nil {
logger.Errorw("failed to copy tenantID to clipboard", "error", err)
}
} else {
logger.Errorw("unsupported item type for copying tenant ID", "item", item)
}
}actions.DeleteDedicatedAICluster function · go · L35-L76 (42 LOC)internal/ui/tui/actions/dac_actions.go
func DeleteDedicatedAICluster(ctx context.Context, dac *models.DedicatedAICluster, env models.Environment, logger logging.Logger) error {
ctx, cancel := context.WithTimeout(ctx, 10*time.Minute)
defer cancel()
client, err := getGenAIClient(env)
if err != nil {
return fmt.Errorf("failed to create GenerativeAI client: %w", err)
}
dacID := dac.GetID(env.Realm, env.Region)
getReq := generativeai.GetDedicatedAiClusterRequest{
DedicatedAiClusterId: &dacID,
}
getResp, err := client.GetDedicatedAiCluster(ctx, getReq)
if err != nil {
return fmt.Errorf("failed to get DedicatedAiCluster: %w", err)
}
logger.Infow("deleting DedicatedAiCluster", "id", getResp.Id, "name", getResp.DisplayName)
if err := deleteEndpointsInDAC(ctx, client, &getResp.DedicatedAiCluster, logger); err != nil {
return err
}
delReq := generativeai.DeleteDedicatedAiClusterRequest{
DedicatedAiClusterId: &dacID,
}
delResp, err := client.DeleteDedicatedAiCluster(ctx, delReq)
if err != nil {
return Powered by Repobility — scan your code at https://repobility.com
actions.deleteEndpointsInDAC function · go · L78-L120 (43 LOC)internal/ui/tui/actions/dac_actions.go
func deleteEndpointsInDAC(
ctx context.Context,
client genAI,
dac *generativeai.DedicatedAiCluster,
logger logging.Logger,
) error {
compartmentID := dac.CompartmentId
listReq := generativeai.ListEndpointsRequest{
CompartmentId: compartmentID,
}
listResp, err := client.ListEndpoints(ctx, listReq)
if err != nil {
return fmt.Errorf("failed to list endpoints: %w", err)
}
logger.Infow("endpoints found", "count", len(listResp.Items))
var count int32
const maxConcurrent = 5
sem := make(chan struct{}, maxConcurrent)
g, gctx := errgroup.WithContext(ctx)
for _, item := range listResp.Items {
if *item.DedicatedAiClusterId != *dac.Id {
continue
}
sem <- struct{}{}
count++
ep := item // capture loop variable
g.Go(func() error {
defer func() { <-sem }()
return deleteEndpoint(gctx, client, &ep, logger)
})
}
if err := g.Wait(); err != nil {
return err
}
logger.Infow("endpoints deleted", "count", count)
return nil
}actions.deleteEndpoint function · go · L122-L146 (25 LOC)internal/ui/tui/actions/dac_actions.go
func deleteEndpoint(
ctx context.Context,
client genAI,
endpoint *generativeai.EndpointSummary,
logger logging.Logger,
) error {
logger.Infow("deleting endpoint", "id", endpoint.Id, "name", endpoint.DisplayName)
delReq := generativeai.DeleteEndpointRequest{
EndpointId: endpoint.Id,
}
delResp, err := client.DeleteEndpoint(ctx, delReq)
if err != nil {
return fmt.Errorf("failed to delete endpoint: %w", err)
}
// Poll work request status before returning
if err := waitForWorkRequest(ctx, client, delResp.OpcWorkRequestId, logger); err != nil {
return fmt.Errorf("endpoint deletion did not complete successfully: %w", err)
}
logger.Infow("endpoint is deleted successfully", "id",
endpoint.Id, "opc-request-id", delResp.OpcRequestId)
return nil
}actions.waitForWorkRequest function · go · L148-L179 (32 LOC)internal/ui/tui/actions/dac_actions.go
func waitForWorkRequest(
ctx context.Context,
client genAI,
workRequestID *string,
logger logging.Logger,
) error {
const interval = 5 * time.Second
ticker := time.NewTicker(interval)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-ticker.C:
wrReq := generativeai.GetWorkRequestRequest{WorkRequestId: workRequestID}
wrResp, err := client.GetWorkRequest(ctx, wrReq)
if err != nil {
logger.Infow("failed to get work request status", "level", "warn", "workRequestId", *workRequestID, "err", err)
continue
}
status := string(wrResp.Status)
if status == "SUCCEEDED" {
return nil
}
if status == "FAILED" {
return fmt.Errorf("work request %s failed", *workRequestID)
}
// Otherwise, keep polling for Accepted/InProgress
}
}
}actions.SoftResetInstance function · go · L35-L62 (28 LOC)internal/ui/tui/actions/gpu_node_actions.go
func SoftResetInstance(
ctx context.Context,
node *models.GpuNode,
env models.Environment,
logger logging.Logger,
) error {
client, err := newComputeClient(env)
if err != nil {
return fmt.Errorf("failed to create compute client: %w", err)
}
logger.Infow("rebooting node", "id", node.ID, "name", node.Name)
resp, err := client.InstanceAction(ctx, core.InstanceActionRequest{
InstanceId: common.String(node.ID),
Action: core.InstanceActionActionSoftreset,
})
if err != nil {
reqID := ""
if resp.OpcRequestId != nil {
reqID = *resp.OpcRequestId
}
return fmt.Errorf("failed to soft reset instance: %w, request id: %s", err, reqID)
}
logger.Infow("reboot request is submitted successfully", "id",
node.ID, "opc-request-id", resp.OpcRequestId)
return nil
}actions.IncreasePoolSize function · go · L65-L97 (33 LOC)internal/ui/tui/actions/gpu_node_actions.go
func IncreasePoolSize(
ctx context.Context,
pool *models.GpuPool,
env models.Environment,
logger logging.Logger,
) error {
mgmtClient, err := newComputeMgmtClient(env)
if err != nil {
return fmt.Errorf("failed to create compute management client: %w", err)
}
if pool.ActualSize >= pool.Size {
return nil
}
newSize := pool.Size
logger.Infow("scaling up instance pool", "id", pool.ID, "name", pool.Name, "newSize", newSize)
resp, err := mgmtClient.UpdateInstancePool(ctx, core.UpdateInstancePoolRequest{
InstancePoolId: common.String(pool.ID),
UpdateInstancePoolDetails: core.UpdateInstancePoolDetails{
Size: common.Int(newSize),
},
})
if err != nil {
reqID := ""
if resp.OpcRequestId != nil {
reqID = *resp.OpcRequestId
}
return fmt.Errorf("failed to update instance pool: %w, request id: %s", err, reqID)
}
logger.Infow("scaling request is submitted successfully", "id",
pool.ID, "opc-request-id", resp.OpcRequestId)
return nil
}actions.TerminateInstance function · go · L100-L126 (27 LOC)internal/ui/tui/actions/gpu_node_actions.go
func TerminateInstance(
ctx context.Context,
node *models.GpuNode,
env models.Environment,
logger logging.Logger,
) error {
client, err := newComputeClient(env)
if err != nil {
return fmt.Errorf("failed to create compute client: %w", err)
}
logger.Infow("deleting node", "id", node.ID, "name", node.Name)
resp, err := client.TerminateInstance(ctx, core.TerminateInstanceRequest{
InstanceId: common.String(node.ID),
PreserveBootVolume: common.Bool(false),
})
if err != nil {
reqID := ""
if resp.OpcRequestId != nil {
reqID = *resp.OpcRequestId
}
return fmt.Errorf("failed to terminate instance: %w, request id: %s", err, reqID)
}
logger.Infow("deletion request is submitted successfully", "id",
node.ID, "opc-request-id", resp.OpcRequestId)
return nil
}actions.PopulateGpuPools function · go · L130-L171 (42 LOC)internal/ui/tui/actions/gpu_node_actions.go
func PopulateGpuPools(
ctx context.Context,
gpuPools []models.GpuPool,
env models.Environment,
compartmentID string,
) error {
if len(gpuPools) == 0 || compartmentID == "" {
return nil // nothing to do
}
mgmtClient, err := newComputeMgmtClient(env)
if err != nil {
return err
}
req := core.ListInstancePoolsRequest{
CompartmentId: &compartmentID,
}
resp, err := mgmtClient.ListInstancePools(ctx, req)
if err != nil {
reqID := ""
if resp.OpcRequestId != nil {
reqID = *resp.OpcRequestId
}
return fmt.Errorf("failed to list instance pools: %w, request id: %s", err, reqID)
}
gpuPoolMap := make(map[string]*models.GpuPool)
for i := range gpuPools {
gpuPoolMap[gpuPools[i].Name] = &gpuPools[i]
gpuPools[i].Status = "NONEXIST"
}
for _, summary := range resp.Items {
if pool, ok := gpuPoolMap[*summary.DisplayName]; ok {
pool.ID = *summary.Id
pool.ActualSize = *summary.Size
pool.Status = string(summary.LifecycleState)
}
}
return nil
}common.EditTarget.String method · go · L22-L33 (12 LOC)internal/ui/tui/common/edit_target.go
func (e EditTarget) String() string {
switch e {
case NoneTarget:
return "none"
case FilterTarget:
return "filter"
case AliasTarget:
return "alias"
default:
return "unknown"
}
}Generated by Repobility's multi-pass static-analysis pipeline (https://repobility.com)
common.InputMode.String method · go · L16-L27 (12 LOC)internal/ui/tui/common/input_mode.go
func (m InputMode) String() string {
switch m {
case UnknownInput:
return "unknown"
case EditInput:
return "edit"
case NormalInput:
return "normal"
default:
return "unknown"
}
}common.ViewMode.String method · go · L22-L39 (18 LOC)internal/ui/tui/common/view_mode.go
func (v ViewMode) String() string {
switch v {
case ListView:
return "List"
case DetailsView:
return "Details"
case LoadingView:
return "Loading"
case HelpView:
return "Help"
case ErrorView:
return "Error"
case ExportView:
return "Export"
default:
return "Unknown"
}
}tui.Model.copyItemNameCmd method · go · L9-L14 (6 LOC)internal/ui/tui/copy_cmd.go
func (m *Model) copyItemNameCmd(item any) tea.Cmd {
return func() tea.Msg {
actions.CopyItemName(item, m.environment, m.logger)
return nil
}
}