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))
}
}()
}