Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/dataobj/explorer/service.go

60 lines
1.4 KiB

package explorer
import (
"context"
"encoding/json"
"net/http"
"github.com/go-kit/log"
"github.com/go-kit/log/level"
"github.com/grafana/dskit/services"
"github.com/thanos-io/objstore"
)
type Service struct {
*services.BasicService
bucket objstore.Bucket
logger log.Logger
}
func New(bucket objstore.Bucket, logger log.Logger) (*Service, error) {
s := &Service{
bucket: bucket,
logger: logger,
}
s.BasicService = services.NewBasicService(nil, s.running, nil)
return s, nil
}
func (s *Service) running(ctx context.Context) error {
level.Info(s.logger).Log("msg", "dataobj explorer is running")
<-ctx.Done()
return nil
}
func (s *Service) Handler() (string, http.Handler) {
mux := http.NewServeMux()
// API endpoints
mux.HandleFunc("/dataobj/api/v1/list", s.handleList)
mux.HandleFunc("/dataobj/api/v1/inspect", s.handleInspect)
mux.HandleFunc("/dataobj/api/v1/download", s.handleDownload)
mux.HandleFunc("/dataobj/api/v1/provider", s.handleProvider)
return "/dataobj", mux
}
func (s *Service) handleProvider(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
provider := s.bucket.Provider()
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(map[string]string{"provider": string(provider)}); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}