mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Zipkin: Run health check through backend * Mark some errors as downstream * Update pkg/tsdb/zipkin/zipkin.go Co-authored-by: Will Browne <wbrowne@users.noreply.github.com> * Use errors.New where error formatting is not needed * Remove executable in plugin.json * Fix joining the path * Keep logger as global and then create from context * Close the res body --------- Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package zipkin
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
|
|
)
|
|
|
|
type ZipkinClient struct {
|
|
logger log.Logger
|
|
url string
|
|
httpClient *http.Client
|
|
}
|
|
|
|
func New(url string, hc *http.Client, logger log.Logger) (ZipkinClient, error) {
|
|
client := ZipkinClient{
|
|
logger: logger,
|
|
url: url,
|
|
httpClient: hc,
|
|
}
|
|
return client, nil
|
|
}
|
|
|
|
// Services returns list of services
|
|
// https://zipkin.io/zipkin-api/#/default/get_services
|
|
func (z *ZipkinClient) Services() ([]string, error) {
|
|
services := []string{}
|
|
u, err := url.JoinPath(z.url, "/api/v2/services")
|
|
if err != nil {
|
|
return services, backend.DownstreamError(fmt.Errorf("failed to join url: %w", err))
|
|
}
|
|
res, err := z.httpClient.Get(u)
|
|
if err != nil {
|
|
return services, err
|
|
}
|
|
|
|
defer func() {
|
|
if err = res.Body.Close(); err != nil {
|
|
z.logger.Error("Failed to close response body", "error", err)
|
|
}
|
|
}()
|
|
if err := json.NewDecoder(res.Body).Decode(&services); err != nil {
|
|
return services, err
|
|
}
|
|
return services, err
|
|
}
|