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, ... `, }, 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, ... `, }, 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 }