Source

core hello world / broker_server.ml

Diff from to

broker_server.ml

 (* First, we build the implementations *)
 
 let publish_impl (dir,_) msg =
-  Log.Global.info "Message published";
   return (Directory.publish dir msg)
 
 let subscribe_impl (dir,_) topic ~aborted =
-  Log.Global.info "Subscription started";
   return (
     match Directory.subscribe dir topic with
     | None -> Error "Unknown topic"
   )
 
 let dump_impl (dir,_) () =
-  Log.Global.info "Dump requested";
   return (Directory.dump dir)
 
 let shutdown_impl (_,stop) () =
-  Log.Global.info "Shutdown requested";
+  Log.Global.info "Shutdown request";
   Ivar.fill_if_empty stop ();
   return ()
 
   Command.Spec.(
     empty
     +> Common.port_arg ()
+    +> flag "-fg" no_arg ~doc:" Run in the foreground (daemonize is the default)"
   )
-  (fun port () ->
+  (fun port fg () ->
     (* We use a blocking call to get the working directory, because the Async
        scheduler isn't running yet.
     *)
     let basedir = Core.Std.Unix.getcwd () in
-(*
-    let finish_daemonize =
-      unstage
-        (Daemon.daemonize_wait ()
-           ~redirect_stdout:`Do_not_redirect
-           ~redirect_stderr:`Do_not_redirect
-           ~cd:basedir)
-    in
-*)
+    let logfile = basedir ^/ "broker.log" in
+    if not fg then
+      Daemon.daemonize ()
+        ~redirect_stdout:(`File_append logfile)
+        ~redirect_stderr:(`File_append logfile)
+        ~cd:basedir;
     Log.Global.set_output
-      [ Log.Output.file `Text ~filename:(basedir ^/ "broker.log") ];
-    return () >>= fun () ->
-(*    finish_daemonize ();*)
-    Log.Global.info "Starting broker";
+      [ Log.Output.file `Text ~filename:logfile ];
+    Log.Global.info "Starting up";
     let stop = Ivar.create () in
     let directory = Directory.create () in
-    Log.Global.info "Starting server";
     Common.start_server ()
       ~stop:(Ivar.read stop)
       ~port
       ~implementations
       ~env:(directory,stop)
+    >>| fun () ->
+    Log.Global.info "Shutting down"
   )
 
 let () = Command.run command