virtigo/main.go

112 lines
1.8 KiB
Go

// Copyright 2024 WIT.COM Inc Licensed GPL 3.0
package main
import (
"embed"
"net/url"
"os"
"path/filepath"
"github.com/google/uuid"
"go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/protobuf/virtpb"
"go.wit.com/log"
)
// sent via -ldflags
var VERSION string
var BUILDTIME string
var ARGNAME string = "virtigo"
//go:embed resources/*
var resources embed.FS
func main() {
me = new(virtigoT)
gui.InitArg()
me.pp = arg.MustParse(&argv)
if argv.Bash {
argv.doBash()
os.Exit(0)
}
if len(argv.BashAuto) != 0 {
argv.doBashAuto()
os.Exit(0)
}
if me.pp == nil {
me.pp.WriteHelp(os.Stdout)
os.Exit(0)
}
if os.Getenv("VIRTIGO_HOME") == "" {
homeDir, _ := os.UserHomeDir()
fullpath := filepath.Join(homeDir, ".config/virtigo")
os.Setenv("VIRTIGO_HOME", fullpath)
}
me.clusters = virtpb.NewClusters()
if argv.List != nil {
err := me.clusters.ConfigLoad()
if err != nil {
badExit(err)
}
doList()
okExit("virtigo list")
}
if argv.Droplet != nil {
exit(doDroplet())
}
if argv.Admin {
err := me.clusters.ConfigLoad()
if err != nil {
badExit(err)
}
doAdminGui()
okExit("admin close")
}
if argv.Server != "" {
log.Info("start admin interface")
me.admin = new(adminT)
var err error
me.admin.url, err = url.Parse(argv.Server)
if err != nil {
badExit(err)
}
err = me.clusters.ConfigLoad()
if err != nil {
clusters := virtpb.NewClusters()
c := new(virtpb.Cluster)
c.Uuid = uuid.New().String()
c.URL = append(c.URL, argv.Server)
clusters.Append(c)
virtpb.ConfigWriteTEXT(clusters, "cluster.text")
badExit(err)
}
me.admin.doAdminGui()
okExit("admin close")
}
if argv.Daemon {
if err := doDaemon(); err != nil {
badExit(err)
}
okExit("")
}
// sit here
go startHTTP()
doGui()
}