* Add lint rules * Backend decoupling - Add standalone files - Add graphite query type - Add logger to Service - Create logger in the ProvideService method - Use a pointer for the HTTP client provider - Update logger usage everywhere - Update tracer type - Replace simplejson with json - Add dummy CallResource and CheckHealth methods - Update tests * Update ConfigEditor imports * Update types imports * Update datasource - Switch to using semver package - Update imports * Update store imports * Update helper imports and notification creation * Update context import * Update version numbers and logic * Copy array_move from core * Test updates * Add required files and update plugin.json * Update core references and packages * Remove commented code * Update wire * Lint * Fix import * Copy null type * More lint * Update snapshot * Refactor backend - Split query logic into separate file - Move utils to separate file * Add health-check logic - Support backend healthcheck if the FF is enabled * Remove query import support as unneeded * Add test * Add util function for decoding responses * Add events types * Add resource handler * Add events handler and generic resource req handler * Tests * Update frontend - Add types - Update events function to support backend requests * Lint and typing * Lint * Add tests * Review * Review * Fix packages * Fix merge issues
48 lines
993 B
Go
48 lines
993 B
Go
package graphite
|
|
|
|
import (
|
|
"compress/flate"
|
|
"compress/gzip"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/andybalholm/brotli"
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
)
|
|
|
|
func decode(encoding string, original io.ReadCloser) ([]byte, error) {
|
|
var reader io.Reader
|
|
var err error
|
|
switch encoding {
|
|
case "gzip":
|
|
reader, err = gzip.NewReader(original)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer func() {
|
|
if err := reader.(io.ReadCloser).Close(); err != nil {
|
|
backend.Logger.Warn("Failed to close reader body", "err", err)
|
|
}
|
|
}()
|
|
case "deflate":
|
|
reader = flate.NewReader(original)
|
|
defer func() {
|
|
if err := reader.(io.ReadCloser).Close(); err != nil {
|
|
backend.Logger.Warn("Failed to close reader body", "err", err)
|
|
}
|
|
}()
|
|
case "br":
|
|
reader = brotli.NewReader(original)
|
|
case "":
|
|
reader = original
|
|
default:
|
|
return nil, fmt.Errorf("unexpected encoding type %v", err)
|
|
}
|
|
|
|
body, err := io.ReadAll(reader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return body, nil
|
|
}
|