func()

in cmd/otelinmemexporter/http.go [36:74]


func (s *server) Start() {
	r := mux.NewRouter()

	r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		if err := json.NewEncoder(w).Encode(s.store.GetAll()); err != nil {
			w.WriteHeader(http.StatusInternalServerError)
			s.logger.Warn("failed to encode response", zap.Error(err))
		}
	}).Methods(http.MethodGet)

	r.HandleFunc("/{key:.*}", func(w http.ResponseWriter, r *http.Request) {
		key := mux.Vars(r)["key"]
		enc := json.NewEncoder(w)
		val, err := s.store.Get(key)
		if err != nil {
			w.WriteHeader(http.StatusBadRequest)
			if err := enc.Encode(map[string]string{"err": err.Error()}); err != nil {
				s.logger.Warn("failed to encode response", zap.Error(err))
			}
			return
		}
		if err := enc.Encode(map[string]map[string]float64{key: val}); err != nil {
			w.WriteHeader(http.StatusInternalServerError)
			s.logger.Warn("failed to encode response", zap.Error(err))
		}
	}).Methods(http.MethodGet)

	r.HandleFunc("/reset", func(w http.ResponseWriter, r *http.Request) {
		s.store.Reset()
		w.WriteHeader(http.StatusOK)
	}).Methods(http.MethodPost)

	go func() {
		s.logger.Info("Starting http server for serving in-memory exporter API", zap.String("endpoint", s.endpoint))
		if err := http.ListenAndServe(s.endpoint, r); err != nil {
			s.logger.Error("failed to start server for in memory exporter", zap.Error(err))
		}
	}()
}