194 lines
4.9 KiB
Go
194 lines
4.9 KiB
Go
package integrations
|
|
|
|
import (
|
|
"context"
|
|
"slices"
|
|
"testing"
|
|
|
|
"go.signoz.io/signoz/pkg/query-service/app/dashboards"
|
|
"go.signoz.io/signoz/pkg/query-service/app/logparsingpipeline"
|
|
"go.signoz.io/signoz/pkg/query-service/model"
|
|
v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
|
|
"go.signoz.io/signoz/pkg/query-service/rules"
|
|
"go.signoz.io/signoz/pkg/query-service/utils"
|
|
)
|
|
|
|
func NewTestIntegrationsManager(t *testing.T) *Manager {
|
|
testDB := utils.NewQueryServiceDBForTests(t)
|
|
|
|
installedIntegrationsRepo, err := NewInstalledIntegrationsSqliteRepo(testDB)
|
|
if err != nil {
|
|
t.Fatalf("could not init sqlite DB for installed integrations: %v", err)
|
|
}
|
|
|
|
return &Manager{
|
|
availableIntegrationsRepo: &TestAvailableIntegrationsRepo{},
|
|
installedIntegrationsRepo: installedIntegrationsRepo,
|
|
}
|
|
}
|
|
|
|
type TestAvailableIntegrationsRepo struct{}
|
|
|
|
func (t *TestAvailableIntegrationsRepo) list(
|
|
ctx context.Context,
|
|
) ([]IntegrationDetails, *model.ApiError) {
|
|
return []IntegrationDetails{
|
|
{
|
|
IntegrationSummary: IntegrationSummary{
|
|
Id: "test-integration-1",
|
|
Title: "Test Integration 1",
|
|
Description: "A test integration",
|
|
Author: IntegrationAuthor{
|
|
Name: "signoz",
|
|
Email: "integrations@signoz.io",
|
|
HomePage: "https://signoz.io",
|
|
},
|
|
Icon: `data:image/svg+xml;utf8,<svg ... > ... </svg>`,
|
|
},
|
|
Categories: []string{"testcat1", "testcat2"},
|
|
Overview: "test integration overview",
|
|
Configuration: []IntegrationConfigStep{
|
|
{
|
|
Title: "Step 1",
|
|
Instructions: "Set source attrib on your signals",
|
|
},
|
|
},
|
|
DataCollected: DataCollectedForIntegration{
|
|
Logs: []CollectedLogAttribute{},
|
|
Metrics: []CollectedMetric{},
|
|
},
|
|
Assets: IntegrationAssets{
|
|
Logs: LogsAssets{
|
|
Pipelines: []logparsingpipeline.PostablePipeline{
|
|
{
|
|
Name: "pipeline1",
|
|
Alias: "pipeline1",
|
|
Enabled: true,
|
|
Filter: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{
|
|
Key: v3.AttributeKey{
|
|
Key: "source",
|
|
DataType: v3.AttributeKeyDataTypeString,
|
|
Type: v3.AttributeKeyTypeTag,
|
|
},
|
|
Operator: "=",
|
|
Value: "nginx",
|
|
},
|
|
},
|
|
},
|
|
Config: []logparsingpipeline.PipelineOperator{
|
|
{
|
|
OrderId: 1,
|
|
ID: "add",
|
|
Type: "add",
|
|
Field: "attributes.test",
|
|
Value: "val",
|
|
Enabled: true,
|
|
Name: "test add",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Dashboards: []dashboards.Data{},
|
|
Alerts: []rules.PostableRule{},
|
|
},
|
|
ConnectionTests: &IntegrationConnectionTests{
|
|
Logs: &LogsConnectionTest{
|
|
AttributeKey: "source",
|
|
AttributeValue: "nginx",
|
|
},
|
|
},
|
|
}, {
|
|
IntegrationSummary: IntegrationSummary{
|
|
Id: "test-integration-2",
|
|
Title: "Test Integration 2",
|
|
Description: "Another test integration",
|
|
Author: IntegrationAuthor{
|
|
Name: "signoz",
|
|
Email: "integrations@signoz.io",
|
|
HomePage: "https://signoz.io",
|
|
},
|
|
Icon: `data:image/svg+xml;utf8,<svg ... > ... </svg>`,
|
|
},
|
|
Categories: []string{"testcat1", "testcat2"},
|
|
Overview: "test integration overview",
|
|
Configuration: []IntegrationConfigStep{
|
|
{
|
|
Title: "Step 1",
|
|
Instructions: "Set source attrib on your signals",
|
|
},
|
|
},
|
|
DataCollected: DataCollectedForIntegration{
|
|
Logs: []CollectedLogAttribute{},
|
|
Metrics: []CollectedMetric{},
|
|
},
|
|
Assets: IntegrationAssets{
|
|
Logs: LogsAssets{
|
|
Pipelines: []logparsingpipeline.PostablePipeline{
|
|
{
|
|
Name: "pipeline2",
|
|
Alias: "pipeline2",
|
|
Enabled: true,
|
|
Filter: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{
|
|
Key: v3.AttributeKey{
|
|
Key: "source",
|
|
DataType: v3.AttributeKeyDataTypeString,
|
|
Type: v3.AttributeKeyTypeTag,
|
|
},
|
|
Operator: "=",
|
|
Value: "redis",
|
|
},
|
|
},
|
|
},
|
|
Config: []logparsingpipeline.PipelineOperator{
|
|
{
|
|
OrderId: 1,
|
|
ID: "add",
|
|
Type: "add",
|
|
Field: "attributes.test",
|
|
Value: "val",
|
|
Enabled: true,
|
|
Name: "test add",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Dashboards: []dashboards.Data{},
|
|
Alerts: []rules.PostableRule{},
|
|
},
|
|
ConnectionTests: &IntegrationConnectionTests{
|
|
Logs: &LogsConnectionTest{
|
|
AttributeKey: "source",
|
|
AttributeValue: "nginx",
|
|
},
|
|
},
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func (t *TestAvailableIntegrationsRepo) get(
|
|
ctx context.Context, ids []string,
|
|
) (map[string]IntegrationDetails, *model.ApiError) {
|
|
availableIntegrations, apiErr := t.list(ctx)
|
|
if apiErr != nil {
|
|
return nil, apiErr
|
|
}
|
|
|
|
result := map[string]IntegrationDetails{}
|
|
|
|
for _, ai := range availableIntegrations {
|
|
if slices.Contains(ids, ai.Id) {
|
|
result[ai.Id] = ai
|
|
}
|
|
}
|
|
|
|
return result, nil
|
|
}
|