func startHoarder(ccmd *cobra.Command, args []string) error { // convert the log level logLvl := lumber.LvlInt(viper.GetString("log-level")) // configure the logger lumber.Prefix("[hoader]") lumber.Level(logLvl) // enable/start garbage collection if age config was changed if ccmd.Flag("clean-after").Changed { lumber.Debug("Starting garbage collector (data older than %vs)...\n", ccmd.Flag("clean-after").Value) // start garbage collector go collector.Start() } // set, and initialize, the backend driver if err := backends.Initialize(); err != nil { lumber.Error("Failed to initialize backend - %v", err) return err } // start the API if err := api.Start(); err != nil { lumber.Fatal("Failed to start API: ", err.Error()) return err } return nil }
func (t *Server) handleCall(id string, msg CallMsg) { log.Trace("Handling call message") var out string var err error if f, ok := t.rpcHooks[msg.ProcURI]; ok && f != nil { var res interface{} res, err = f(id, msg.ProcURI, msg.CallArgs...) if err != nil { var errorURI, desc string var details interface{} if er, ok := err.(RPCError); ok { errorURI = er.URI() desc = er.Description() details = er.Details() } else { errorURI = msg.ProcURI + "#generic-error" desc = err.Error() } if details != nil { out, err = CreateCallError(msg.CallID, errorURI, desc, details) } else { out, err = CreateCallError(msg.CallID, errorURI, desc) } } else { out, err = CreateCallResult(msg.CallID, res) } } else { log.Warn("RPC call not registered: %s", msg.ProcURI) out, err = CreateCallError(msg.CallID, "error:notimplemented", "RPC call '%s' not implemented", msg.ProcURI) } if err != nil { // whatever, let the client hang... log.Fatal("Error creating callError message: %s", err) return } if client, ok := t.clients[id]; ok { client <- out } }