diff --git a/cmd/http.go b/cmd/http.go index 5438f96..28ba364 100644 --- a/cmd/http.go +++ b/cmd/http.go @@ -43,8 +43,6 @@ func NewHTTPCommand() *cobra.Command { l := svr.Logger() - l.Error("test") - r := repo.New(l, args[0], repo.NewHistory(l, @@ -69,15 +67,15 @@ func NewHTTPCommand() *cobra.Command { })) svr.AddServices( + service.NewGoRoutine(l, "repo", func(ctx context.Context, l *zap.Logger) error { + return r.Start(ctx) + }), service.NewHTTP(l, "http", addressFlag(v), handler.NewHTTP(l, r, handler.WithBasePath(basePathFlag(v))), middleware.Telemetry(), middleware.Logger(), middleware.Recover(), ), - service.NewGoRoutine(l, "repo", func(ctx context.Context, l *zap.Logger) error { - return r.Start(ctx) - }), ) svr.Run() diff --git a/pkg/handler/http.go b/pkg/handler/http.go index e2f6160..6e4b540 100644 --- a/pkg/handler/http.go +++ b/pkg/handler/http.go @@ -18,8 +18,8 @@ import ( type ( HTTP struct { l *zap.Logger - basePath string repo *repo.Repo + basePath string } HTTPOption func(*HTTP) ) @@ -92,22 +92,22 @@ func (h *HTTP) ServeHTTP(w http.ResponseWriter, r *http.Request) { // ~ Private methods // ------------------------------------------------------------------------------------------------ -func (h *HTTP) handleRequest(r *repo.Repo, handler Route, jsonBytes []byte, source string) ([]byte, error) { +func (h *HTTP) handleRequest(r *repo.Repo, route Route, jsonBytes []byte, source string) ([]byte, error) { start := time.Now() - reply, err := h.executeRequest(r, handler, jsonBytes, source) + reply, err := h.executeRequest(r, route, jsonBytes, source) result := "success" if err != nil { result = "error" } - metrics.ServiceRequestCounter.WithLabelValues(string(handler), result, source).Inc() - metrics.ServiceRequestDuration.WithLabelValues(string(handler), result, source).Observe(time.Since(start).Seconds()) + metrics.ServiceRequestCounter.WithLabelValues(string(route), result, source).Inc() + metrics.ServiceRequestDuration.WithLabelValues(string(route), result, source).Observe(time.Since(start).Seconds()) return reply, err } -func (h *HTTP) executeRequest(r *repo.Repo, handler Route, jsonBytes []byte, source string) (replyBytes []byte, err error) { +func (h *HTTP) executeRequest(r *repo.Repo, route Route, jsonBytes []byte, source string) (replyBytes []byte, err error) { var ( reply interface{} apiErr error @@ -123,7 +123,7 @@ func (h *HTTP) executeRequest(r *repo.Repo, handler Route, jsonBytes []byte, sou metrics.ContentRequestCounter.WithLabelValues(source).Inc() // handle and process - switch handler { + switch route { // case HandlerGetRepo: // This case is handled prior to handleRequest being called. // since the resulting bytes are written directly in to the http.ResponseWriter / net.Connection case RouteGetURIs: @@ -147,7 +147,7 @@ func (h *HTTP) executeRequest(r *repo.Repo, handler Route, jsonBytes []byte, sou reply = r.Update() }) default: - reply = responses.NewError(1, "unknown handler: "+string(handler)) + reply = responses.NewError(1, "unknown route: "+string(route)) } // error handling diff --git a/pkg/repo/repo.go b/pkg/repo/repo.go index 81c55ab..909b849 100644 --- a/pkg/repo/repo.go +++ b/pkg/repo/repo.go @@ -282,7 +282,6 @@ func (r *Repo) Update() (updateResponse *responses.Update) { updateResponse.Stats.NumberOfNodes += len(dimension.Directory) updateResponse.Stats.NumberOfURIs += len(dimension.URIDirectory) } - r.loaded.Store(true) } updateResponse.Stats.OwnRuntime = floatSeconds(time.Since(start).Nanoseconds()) - updateResponse.Stats.RepoRuntime return updateResponse @@ -325,7 +324,9 @@ func (r *Repo) Start(ctx context.Context) error { l.Debug("starting poll routine") return r.PollRoutine(gCtx) }) - } else if !r.Loaded() { + } + + if !r.Loaded() { l.Debug("trying to update initial state") if resp := r.Update(); !resp.Success { l.Error("failed to update initial state", @@ -335,6 +336,8 @@ func (r *Repo) Start(ctx context.Context) error { zap.Float64("own_runtime", resp.Stats.OwnRuntime), zap.Float64("repo_runtime", resp.Stats.RepoRuntime), ) + } else { + r.loaded.Store(true) } }