main.go
package main
import (
"context"
"embed"
"flag"
"os"
"path"
"kd/backend/config"
"kd/backend/logwrap"
"kd/backend/services"
"github.com/wailsapp/wails/v2"
wailslogger "github.com/wailsapp/wails/v2/pkg/logger"
"github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
)
//go:embed all:frontend/dist
var assets embed.FS
func main() {
var err error
logger := logwrap.New("logger", os.Stdout, true)
logger.SetLevel(logwrap.INFO)
wailsLogLevel := wailslogger.INFO
var (
debugFlag = flag.Bool("debug", false, "debug")
traceFlag = flag.Bool("trace", false, "trace")
)
flag.Parse()
if *debugFlag {
logger.SetLevel(logwrap.DEBUG)
wailsLogLevel = wailslogger.DEBUG
}
if *traceFlag {
wailsLogLevel = wailslogger.TRACE
}
kubeConfigPath, ok := os.LookupEnv("KUBECONFIG")
if !ok {
homeDir, err := os.UserHomeDir()
if err != nil {
logger.Error(err.Error())
os.Exit(1)
}
kubeConfigPath = path.Join(homeDir, ".kube", "config.yaml")
}
configOpts := []config.OptFunc{
config.WithDebug(*debugFlag),
}
conf, err := config.NewConfig(kubeConfigPath, configOpts...)
if err != nil {
logger.Error(err.Error())
os.Exit(1)
}
clusterSvc := services.Cluster()
secretsSvc := services.Secrets()
persistentVolumeClaimsSvc := services.PersistentVolumeClaims()
persistentVolumesSvc := services.PersistentVolumes()
httpsrvSvc := services.Httpsrv()
err = wails.Run(&options.App{
Title: "kd",
Width: 1024,
Height: 768,
AssetServer: &assetserver.Options{
Assets: assets,
},
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
OnStartup: func(ctx context.Context) {
clusterSvc.Start(ctx, conf, logger)
secretsSvc.Start(ctx, conf, logger)
persistentVolumeClaimsSvc.Start(ctx, conf, logger)
persistentVolumesSvc.Start(ctx, conf, logger)
httpsrvSvc.Start(ctx, conf, logger)
},
Bind: []interface{}{
clusterSvc,
secretsSvc,
httpsrvSvc,
persistentVolumeClaimsSvc,
persistentVolumesSvc,
},
LogLevel: wailsLogLevel,
})
if err != nil {
logger.Error(err.Error())
os.Exit(1)
}
}