penguin/monok8s

k8s image for Mono Gateway Dev Kit

clitools/pkg/controller/osimage/helpers.go

raw ยท 1002 bytes

package osimage

import (
	"fmt"
	"os"
	"strings"
	"sync"

	monov1alpha1 "example.com/monok8s/pkg/apis/monok8s/v1alpha1"
)

var (
	bootStateOnce sync.Once
	bootState     map[string]string
	bootStateErr  error
)

func PercentOf(done, total int64) int64 {
	if total <= 0 {
		return 0
	}
	p := (done * 100) / total
	if p < 0 {
		return 0
	}
	if p > 100 {
		return 100
	}
	return p
}

func ReadBootState() (map[string]string, error) {
	bootStateOnce.Do(func() {
		data, err := os.ReadFile(monov1alpha1.BootStateFile)
		if err != nil {
			bootStateErr = err
			return
		}

		out := make(map[string]string)

		for _, line := range strings.Split(string(data), "\n") {
			line = strings.TrimSpace(line)
			if line == "" || strings.HasPrefix(line, "#") {
				continue
			}

			k, v, ok := strings.Cut(line, "=")
			if !ok {
				bootStateErr = fmt.Errorf("invalid line: %q", line)
				return
			}

			out[strings.TrimSpace(k)] = strings.TrimSpace(v)
		}

		bootState = out
	})

	return bootState, bootStateErr
}