Files
full/all/cmd/main/main.go

63 lines
1.3 KiB
Go
Raw Normal View History

package main
import (
"context"
"flag"
2026-08-10 11:42:45 +08:00
"fmt"
"net/http"
"os"
"os/signal"
2026-08-10 11:42:45 +08:00
"regexp"
"strings"
"syscall"
"time"
"bsm/full/all/internal/config"
"bsm/full/all/internal/impl"
allserver "bsm/full/all/internal/server"
2026-08-10 11:16:02 +08:00
"bsm/full/all/internal/service"
)
var ServiceKey = "default"
2026-08-10 11:42:45 +08:00
var workspacePattern = regexp.MustCompile(`^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$`)
func normalizeWorkspace(value string) (string, error) {
value = strings.ToLower(strings.TrimSpace(value))
if !workspacePattern.MatchString(value) {
return "", fmt.Errorf("workspace must match %s", workspacePattern.String())
}
return value, nil
}
func main() {
workspace := flag.String("workspace", ServiceKey, "workspace used to select etc/{workspace}_{runtime}.yaml")
flag.Parse()
2026-08-10 11:42:45 +08:00
value, err := normalizeWorkspace(*workspace)
if err != nil {
panic(err)
}
2026-08-10 11:42:45 +08:00
ServiceKey = value
config.New(ServiceKey)
impl.NewImpl()
2026-08-10 11:16:02 +08:00
srv := allserver.New()
if err := service.Expose(srv); err != nil {
panic(err)
}
stop := make(chan os.Signal, 1)
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-stop
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
_ = srv.Stop(ctx)
}()
2026-08-10 11:16:02 +08:00
if err := srv.Start(config.Spec.Addr); err != nil && err != http.ErrServerClosed {
panic(err)
}
}