lash/attack-of-the-clones #57
| @ -8,6 +8,7 @@ import ( | |||||||
| 	"path" | 	"path" | ||||||
| 
 | 
 | ||||||
| 	"git.defalsify.org/vise.git/logging" | 	"git.defalsify.org/vise.git/logging" | ||||||
|  | 	"git.defalsify.org/vise.git/engine" | ||||||
| 
 | 
 | ||||||
| 	"git.grassecon.net/grassrootseconomics/sarafu-vise/config" | 	"git.grassecon.net/grassrootseconomics/sarafu-vise/config" | ||||||
| 	"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application" | 	"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application" | ||||||
| @ -18,6 +19,7 @@ import ( | |||||||
| var ( | var ( | ||||||
| 	logg      = logging.NewVanilla().WithContextKey("SessionId") | 	logg      = logging.NewVanilla().WithContextKey("SessionId") | ||||||
| 	scriptDir = path.Join("services", "registration") | 	scriptDir = path.Join("services", "registration") | ||||||
|  | 	menuSeparator = ": " | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
| @ -25,6 +27,8 @@ func main() { | |||||||
| 
 | 
 | ||||||
| 	override := config.NewOverride() | 	override := config.NewOverride() | ||||||
| 	var sessionId string | 	var sessionId string | ||||||
|  | 	var size uint | ||||||
|  | 	var engineDebug bool | ||||||
| 
 | 
 | ||||||
| 	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") | 	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") | ||||||
| 	flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") | 	flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") | ||||||
| @ -32,6 +36,8 @@ func main() { | |||||||
| 
 | 
 | ||||||
| 	flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") | 	flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") | ||||||
| 	flag.StringVar(&override.StateConn, "state", "?", "state store connection string") | 	flag.StringVar(&override.StateConn, "state", "?", "state store connection string") | ||||||
|  | 	flag.BoolVar(&engineDebug, "d", false, "use engine debug output") | ||||||
|  | 	flag.UintVar(&size, "s", 160, "max size of output") | ||||||
| 	flag.Parse() | 	flag.Parse() | ||||||
| 
 | 
 | ||||||
| 	config.Apply(override) | 	config.Apply(override) | ||||||
| @ -50,7 +56,18 @@ func main() { | |||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	cfg := engine.Config{ | ||||||
|  | 		Root:              "root", | ||||||
|  | 		SessionId:         sessionId, | ||||||
|  | 		OutputSize:        uint32(size), | ||||||
|  | 		FlagCount:         uint32(128), | ||||||
|  | 		MenuSeparator:     menuSeparator, | ||||||
|  | 		EngineDebug:       engineDebug, | ||||||
|  | 		ResetOnEmptyInput: true, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	x := cmd.NewCmd(sessionId, flagParser) | 	x := cmd.NewCmd(sessionId, flagParser) | ||||||
|  | 	x = x.WithEngine(cfg) | ||||||
| 	err = x.Parse(flag.Args()) | 	err = x.Parse(flag.Args()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Fprintf(os.Stderr, "cmd parse fail: %v\n", err) | 		fmt.Fprintf(os.Stderr, "cmd parse fail: %v\n", err) | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @ -3,7 +3,7 @@ module git.grassecon.net/grassrootseconomics/sarafu-vise | |||||||
| go 1.23.4 | go 1.23.4 | ||||||
| 
 | 
 | ||||||
| require ( | require ( | ||||||
| 	git.defalsify.org/vise.git v0.3.1 | 	git.defalsify.org/vise.git v0.3.2-0.20250326034808-b9c2294cbf1a | ||||||
| 	git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d | 	git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d | ||||||
| 	git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250310093912-8145b4bd004b | 	git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250310093912-8145b4bd004b | ||||||
| 	git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2 | 	git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2 | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							| @ -1,5 +1,5 @@ | |||||||
| git.defalsify.org/vise.git v0.3.1 h1:A6FhMcur09ft/JzUPGXR+KpA17fltfeBnasyvLMZmq4= | git.defalsify.org/vise.git v0.3.2-0.20250326034808-b9c2294cbf1a h1:5uLBUZC6armYgBPkuNEsQPtqT3qZxRfNP4HUdkhjm4I= | ||||||
| git.defalsify.org/vise.git v0.3.1/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= | git.defalsify.org/vise.git v0.3.2-0.20250326034808-b9c2294cbf1a/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= | ||||||
| git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d h1:5mzLas+jxTUtusOKx4XvU+n2QvrV/mH17MnJRy46siQ= | git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d h1:5mzLas+jxTUtusOKx4XvU+n2QvrV/mH17MnJRy46siQ= | ||||||
| git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= | git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= | ||||||
| git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250310093912-8145b4bd004b h1:xiTpaqWWoF5qcnarY/9ZkT6aVdnKwqztb2gzIahJn4w= | git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250310093912-8145b4bd004b h1:xiTpaqWWoF5qcnarY/9ZkT6aVdnKwqztb2gzIahJn4w= | ||||||
|  | |||||||
| @ -5,6 +5,10 @@ import ( | |||||||
| 	"fmt" | 	"fmt" | ||||||
| 
 | 
 | ||||||
| 	"git.defalsify.org/vise.git/logging" | 	"git.defalsify.org/vise.git/logging" | ||||||
|  | 	"git.defalsify.org/vise.git/engine" | ||||||
|  | 	"git.defalsify.org/vise.git/persist" | ||||||
|  | 	"git.defalsify.org/vise.git/resource" | ||||||
|  | 	"git.defalsify.org/vise.git/state" | ||||||
| 	"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application" | 	"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application" | ||||||
| 	"git.grassecon.net/grassrootseconomics/visedriver/storage" | 	"git.grassecon.net/grassrootseconomics/visedriver/storage" | ||||||
| ) | ) | ||||||
| @ -20,6 +24,8 @@ type Cmd struct { | |||||||
| 	cmd        int | 	cmd        int | ||||||
| 	enable     bool | 	enable     bool | ||||||
| 	exec       func(ctx context.Context, ss storage.StorageService) error | 	exec       func(ctx context.Context, ss storage.StorageService) error | ||||||
|  | 	engineConfig	*engine.Config | ||||||
|  | 	st	*state.State | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func NewCmd(sessionId string, flagParser *application.FlagManager) *Cmd { | func NewCmd(sessionId string, flagParser *application.FlagManager) *Cmd { | ||||||
| @ -29,10 +35,71 @@ func NewCmd(sessionId string, flagParser *application.FlagManager) *Cmd { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (c *Cmd) WithEngine(engineConfig engine.Config) *Cmd { | ||||||
|  | 	c.engineConfig = &engineConfig | ||||||
|  | 	return c | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (c *Cmd) Exec(ctx context.Context, ss storage.StorageService) error { | func (c *Cmd) Exec(ctx context.Context, ss storage.StorageService) error { | ||||||
| 	return c.exec(ctx, ss) | 	return c.exec(ctx, ss) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (c *Cmd) engine(ctx context.Context, rs resource.Resource, pe *persist.Persister) (engine.Engine, error) { | ||||||
|  | 	if c.engineConfig == nil { | ||||||
|  | 		return nil, fmt.Errorf("engine config missing") | ||||||
|  | 	} | ||||||
|  | 	en := engine.NewEngine(*c.engineConfig, rs) | ||||||
|  | 
 | ||||||
|  | 	st := pe.GetState() | ||||||
|  | 	if st == nil { | ||||||
|  | 		return nil, fmt.Errorf("persister state fail") | ||||||
|  | 	} | ||||||
|  | 	en = en.WithState(st) | ||||||
|  | 	st.UseDebug() | ||||||
|  | 	ca := pe.GetMemory() | ||||||
|  | 	if ca == nil { | ||||||
|  | 		return nil, fmt.Errorf("persister cache fail") | ||||||
|  | 	} | ||||||
|  | 	en = en.WithMemory(ca) | ||||||
|  | 	logg.DebugCtxf(ctx, "state loaded", "state", st) | ||||||
|  | 	return en, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Cmd) execReset(ctx context.Context, ss storage.StorageService) error { | ||||||
|  | 	pe, err := ss.GetPersister(ctx) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("get persister error: %v", err) | ||||||
|  | 	} | ||||||
|  | 	rs, err := ss.GetResource(ctx) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("get resource error: %v", err) | ||||||
|  | 	} | ||||||
|  | 	dbResource, ok := rs.(*resource.DbResource) | ||||||
|  | 	if !ok { | ||||||
|  | 		return fmt.Errorf("get dbresource error: %v", err) | ||||||
|  | 	} | ||||||
|  | 	err = pe.Load(c.engineConfig.SessionId) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("persister load error: %v", err) | ||||||
|  | 	} | ||||||
|  | 	en, err := c.engine(ctx, dbResource, pe) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	_, err = en.(*engine.DefaultEngine).Reset(ctx, false) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	st := pe.GetState() | ||||||
|  | 	logg.DebugCtxf(ctx, "state after reset", "state", st) | ||||||
|  | 
 | ||||||
|  | 	err = pe.Save(c.engineConfig.SessionId) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (c *Cmd) execAdmin(ctx context.Context, ss storage.StorageService) error { | func (c *Cmd) execAdmin(ctx context.Context, ss storage.StorageService) error { | ||||||
| 	pe, err := ss.GetPersister(ctx) | 	pe, err := ss.GetPersister(ctx) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -76,6 +143,15 @@ func (c *Cmd) parseCmdAdmin(cmd string, param string, more []string) (bool, erro | |||||||
| 	return false, nil | 	return false, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (c *Cmd) parseCmdReset(cmd string, param string, more []string) (bool, error) { | ||||||
|  | 	if cmd == "reset" { | ||||||
|  | 		c.enable = false | ||||||
|  | 		c.exec = c.execReset | ||||||
|  | 		return true, nil | ||||||
|  | 	} | ||||||
|  | 	return false, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (c *Cmd) Parse(args []string) error { | func (c *Cmd) Parse(args []string) error { | ||||||
| 	if len(args) < 2 { | 	if len(args) < 2 { | ||||||
| 		return fmt.Errorf("Wrong number of arguments: %v", args) | 		return fmt.Errorf("Wrong number of arguments: %v", args) | ||||||
| @ -92,5 +168,14 @@ func (c *Cmd) Parse(args []string) error { | |||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	r, err = c.parseCmdReset(cmd, param, args) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if r { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 	return fmt.Errorf("unknown subcommand: %s", cmd) | 	return fmt.Errorf("unknown subcommand: %s", cmd) | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user