mirror of
https://github.com/mentos1386/zdravko.git
synced 2024-11-29 18:51:22 +00:00
132 lines
3 KiB
Go
132 lines
3 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"log"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
|
||
|
"go.temporal.io/server/common/config"
|
||
|
"go.temporal.io/server/schema/sqlite"
|
||
|
"go.temporal.io/server/temporal"
|
||
|
|
||
|
t "code.tjo.space/mentos1386/zdravko/pkg/temporal"
|
||
|
|
||
|
"go.temporal.io/server/common/authorization"
|
||
|
tlog "go.temporal.io/server/common/log"
|
||
|
|
||
|
uiserver "github.com/temporalio/ui-server/v2/server"
|
||
|
uiconfig "github.com/temporalio/ui-server/v2/server/config"
|
||
|
uiserveroptions "github.com/temporalio/ui-server/v2/server/server_options"
|
||
|
)
|
||
|
|
||
|
func backendServer() {
|
||
|
cfg := t.NewConfig()
|
||
|
|
||
|
logger := tlog.NewZapLogger(tlog.BuildZapLogger(tlog.Config{
|
||
|
Stdout: true,
|
||
|
Level: "info",
|
||
|
OutputFile: "",
|
||
|
}))
|
||
|
|
||
|
sqlConfig := cfg.Persistence.DataStores[t.PersistenceStoreName].SQL
|
||
|
|
||
|
// Apply migrations if file does not already exist
|
||
|
if _, err := os.Stat(sqlConfig.DatabaseName); os.IsNotExist(err) {
|
||
|
// Check if any of the parent dirs are missing
|
||
|
dir := filepath.Dir(sqlConfig.DatabaseName)
|
||
|
if _, err := os.Stat(dir); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if err := sqlite.SetupSchema(sqlConfig); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Pre-create namespaces
|
||
|
var namespaces []*sqlite.NamespaceConfig
|
||
|
for _, ns := range []string{"default"} {
|
||
|
namespaces = append(namespaces, sqlite.NewNamespaceConfig(cfg.ClusterMetadata.CurrentClusterName, ns, false))
|
||
|
}
|
||
|
if err := sqlite.CreateNamespaces(sqlConfig, namespaces...); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
authorizer, err := authorization.GetAuthorizerFromConfig(&cfg.Global.Authorization)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
claimMapper, err := authorization.GetClaimMapperFromConfig(&cfg.Global.Authorization, logger)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
ctx := context.Background()
|
||
|
interruptChan := make(chan interface{}, 1)
|
||
|
go func() {
|
||
|
if doneChan := ctx.Done(); doneChan != nil {
|
||
|
s := <-doneChan
|
||
|
interruptChan <- s
|
||
|
} else {
|
||
|
s := <-temporal.InterruptCh()
|
||
|
interruptChan <- s
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
temporal, err := temporal.NewServer(
|
||
|
temporal.WithConfig(cfg),
|
||
|
temporal.ForServices(temporal.DefaultServices),
|
||
|
temporal.WithLogger(logger),
|
||
|
temporal.WithAuthorizer(authorizer),
|
||
|
temporal.WithClaimMapper(func(cfg *config.Config) authorization.ClaimMapper {
|
||
|
return claimMapper
|
||
|
}),
|
||
|
temporal.InterruptOn(interruptChan),
|
||
|
)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
log.Println("Starting temporal server")
|
||
|
if err := temporal.Start(); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
err = temporal.Stop()
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
func frontendServer() {
|
||
|
cfg := &uiconfig.Config{
|
||
|
Host: "0.0.0.0",
|
||
|
Port: 8223,
|
||
|
TemporalGRPCAddress: "localhost:7233",
|
||
|
EnableUI: true,
|
||
|
UIAssetPath: "",
|
||
|
Codec: uiconfig.Codec{
|
||
|
Endpoint: "",
|
||
|
},
|
||
|
CORS: uiconfig.CORS{
|
||
|
CookieInsecure: true,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
server := uiserver.NewServer(uiserveroptions.WithConfigProvider(cfg))
|
||
|
|
||
|
log.Println("Starting temporal ui server")
|
||
|
if err := server.Start(); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
go func() {
|
||
|
frontendServer()
|
||
|
}()
|
||
|
backendServer()
|
||
|
}
|