@@ -19,6 +19,7 @@ import (
1919 "strconv"
2020 "strings"
2121 "syscall"
22+ "time"
2223
2324 "github.com/google/uuid"
2425
@@ -86,6 +87,7 @@ func main() {
8687 trace := flag .String ("trace-file" , "" , "Trace output file (defaults to stderr)" )
8788 stdinExit := flag .Bool ("stdinexit" , false , "Press any key to exit" )
8889 dir := flag .String ("load" , "" , "Load model from directory" )
90+ saveDir := flag .String ("save" , "" , "Save model into directory" )
8991
9092 flag .IntVar (& model .DelayConfig .Delay , "delay" , model .DelayConfig .Delay , "Method response delay across all methods" )
9193 methodDelayP := flag .String ("method-delay" , "" , "Delay per method on the form 'method1:delay1,method2:delay2...'" )
@@ -239,6 +241,38 @@ func main() {
239241 }()
240242 }
241243
244+ // Auto-save only when model state changes
245+
246+ go func () {
247+
248+ ticker := time .NewTicker (3 * time .Hour )
249+
250+ defer ticker .Stop ()
251+
252+ for range ticker .C {
253+
254+ if model != nil && model .Dirty () {
255+
256+ log .Println ("[vcsim] Detected in-memory change, saving model..." )
257+
258+ if err := model .Save (* saveDir ); err != nil {
259+
260+ log .Printf ("[vcsim] Auto-save failed: %v" , err )
261+
262+ } else {
263+
264+ model .ClearDirty ()
265+
266+ log .Println ("[vcsim] Auto-save completed successfully." )
267+
268+ }
269+
270+ }
271+
272+ }
273+
274+ }()
275+
242276 <- sig
243277
244278 model .Remove ()
0 commit comments