Skip to content

Commit

Permalink
improve custom headers in alerts, fix #483
Browse files Browse the repository at this point in the history
  • Loading branch information
Slach committed Oct 28, 2024
1 parent df928cd commit 32e139d
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 49 deletions.
4 changes: 2 additions & 2 deletions docker/grafana/alerting/unified_alerts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ groups:
relativeTimeRange:
from: 600
to: 0
# clickhouse
datasourceUid: P7E099F39B84EA795
# clickhouse-x-auth-http
datasourceUid: P3B5EB012C49EA995
model:
database: default
dateColDataType: ""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: 1

datasources:
- name: clickhouse-x-auth
- name: clickhouse-x-auth-http
type: vertamedia-clickhouse-datasource
access: proxy
url: http://clickhouse:8123
Expand All @@ -10,12 +10,12 @@ datasources:
jsonData:
addCorsHeader: true
serverName: "clickhouse"
tlsAuth: true
tlsAuthWithCACert: true
usePOST: true
useYandexCloudAuthorization: true
xHeaderUser: "demo"
# @todo remove workaround after merge https://github.com/grafana/grafana/pull/80858
dataSourceUrl: "https://clickhouse:8443"
dataSourceUrl: "http://clickhouse:8123"
httpHeaderName1: "test-header"
secureJsonData:
xHeaderKey: "demo"
httpHeaderValue1: "test-value"
60 changes: 19 additions & 41 deletions pkg/datasource_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
"strings"

"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
Expand All @@ -22,20 +23,11 @@ type DatasourceSettings struct {
CompressionType string `json:"compressionType,omitempty"`
TLSSkipVerify bool `json:"tlsSkipVerify"`

CustomHeaders map[string]string
HttpHeaderName1 string `json:"httpHeaderName1,omitempty"`
HttpHeaderName2 string `json:"httpHeaderName2,omitempty"`
HttpHeaderName3 string `json:"httpHeaderName3,omitempty"`
HttpHeaderName4 string `json:"httpHeaderName4,omitempty"`
HttpHeaderName5 string `json:"httpHeaderName5,omitempty"`
HttpHeaderName6 string `json:"httpHeaderName6,omitempty"`
HttpHeaderName7 string `json:"httpHeaderName7,omitempty"`
HttpHeaderName8 string `json:"httpHeaderName8,omitempty"`
HttpHeaderName9 string `json:"httpHeaderName9,omitempty"`
HttpHeaderName10 string `json:"httpHeaderName10,omitempty"`
CustomHeaders map[string]string `json:"-,omitempty"`
}

func NewDatasourceSettings(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {

var dsSettings = DatasourceSettings{}

err := json.Unmarshal(settings.JSONData, &dsSettings)
Expand All @@ -44,37 +36,23 @@ func NewDatasourceSettings(ctx context.Context, settings backend.DataSourceInsta
}

dsSettings.CustomHeaders = make(map[string]string)
for i := 1; i <= 11; i++ {
headerName := ""
switch i {
case 1:
headerName = dsSettings.HttpHeaderName1
case 2:
headerName = dsSettings.HttpHeaderName2
case 3:
headerName = dsSettings.HttpHeaderName3
case 4:
headerName = dsSettings.HttpHeaderName4
case 5:
headerName = dsSettings.HttpHeaderName5
case 6:
headerName = dsSettings.HttpHeaderName6
case 7:
headerName = dsSettings.HttpHeaderName7
case 8:
headerName = dsSettings.HttpHeaderName8
case 9:
headerName = dsSettings.HttpHeaderName9
case 10:
headerName = dsSettings.HttpHeaderName10
case 11:
return nil, fmt.Errorf("too many custom headers")
}
if headerName == "" {
break

var tmpMap = make(map[string]interface{})
err = json.Unmarshal(settings.JSONData, &tmpMap)
if err != nil {
return nil, fmt.Errorf("unable to parse settings json %s. Error: %w", settings.JSONData, err)
}

for headerKey, value := range tmpMap {
if len(headerKey) >= 14 && headerKey[:14] == "httpHeaderName" {
headerName := value.(string)
valueKey := strings.Replace(headerKey, "httpHeaderName", "httpHeaderValue", 1)
if decryptedHeaderValue, exists := settings.DecryptedSecureJSONData[valueKey]; !exists {
return nil, fmt.Errorf("%s not present in settings.DecryptedSecureJSONData", valueKey)
} else {
dsSettings.CustomHeaders[headerName] = decryptedHeaderValue
}
}
headerValue := settings.DecryptedSecureJSONData[fmt.Sprintf("httpHeaderValue%d", i)]
dsSettings.CustomHeaders[headerName] = headerValue
}

dsSettings.Instance = settings
Expand Down
2 changes: 0 additions & 2 deletions pkg/datasource_settings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ func TestNewDatasourceSettings(t *testing.T) {
require.Equal(t, true, dsSettings.UseCompression)
require.Equal(t, "gzip", dsSettings.CompressionType)
require.Equal(t, false, dsSettings.TLSSkipVerify)
require.Equal(t, "header1", dsSettings.HttpHeaderName1)
require.Equal(t, "value1", dsSettings.CustomHeaders["header1"])
require.Equal(t, "header2", dsSettings.HttpHeaderName2)
require.Equal(t, "value2", dsSettings.CustomHeaders["header2"])
}

0 comments on commit 32e139d

Please sign in to comment.