logs-analyzer/signoz/pkg/query-service/app/integrations/repo.go
2024-09-02 22:47:30 +03:00

59 lines
1.5 KiB
Go

package integrations
import (
"context"
"database/sql/driver"
"encoding/json"
"github.com/pkg/errors"
"go.signoz.io/signoz/pkg/query-service/model"
)
// For serializing from db
func (c *InstalledIntegrationConfig) Scan(src interface{}) error {
if data, ok := src.([]byte); ok {
return json.Unmarshal(data, &c)
}
return nil
}
// For serializing to db
func (c *InstalledIntegrationConfig) Value() (driver.Value, error) {
filterSetJson, err := json.Marshal(c)
if err != nil {
return nil, errors.Wrap(err, "could not serialize integration config to JSON")
}
return filterSetJson, nil
}
type InstalledIntegrationsRepo interface {
list(context.Context) ([]InstalledIntegration, *model.ApiError)
get(
ctx context.Context, integrationIds []string,
) (map[string]InstalledIntegration, *model.ApiError)
upsert(
ctx context.Context,
integrationId string,
config InstalledIntegrationConfig,
) (*InstalledIntegration, *model.ApiError)
delete(ctx context.Context, integrationId string) *model.ApiError
}
type AvailableIntegrationsRepo interface {
list(context.Context) ([]IntegrationDetails, *model.ApiError)
get(
ctx context.Context, integrationIds []string,
) (map[string]IntegrationDetails, *model.ApiError)
// AvailableIntegrationsRepo implementations are expected to cache
// details of installed integrations for quick retrieval.
//
// For v0 only bundled integrations are available, later versions
// are expected to add methods in this interface for pinning installed
// integration details in local cache.
}