core

package
v0.1.0-alpha.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2025 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrQueryNotFound       = fmt.Errorf("saved query not found")
	ErrQueryTypeRequired   = fmt.Errorf("query type is required")
	ErrInvalidQueryType    = fmt.Errorf("invalid query type: must be 'logchefql' or 'sql'")
	ErrInvalidQueryContent = fmt.Errorf("invalid query content format or values")
)
View Source
var (
	ErrSessionNotFound = errors.New("session not found")
	ErrSessionExpired  = errors.New("session expired")
)

Session-specific errors

View Source
var (
	// ErrUserNotFound is returned when a user is not found.
	ErrUserNotFound = errors.New("user not found")
	// ErrCannotDeleteLastAdmin is returned when attempting to delete or deactivate the last admin.
	ErrCannotDeleteLastAdmin = errors.New("cannot delete or deactivate the last admin user")
	// ErrUserAlreadyExists is returned when trying to create a user that already exists.
	ErrUserAlreadyExists = errors.New("user already exists")
	// ErrTeamAlreadyExists is returned when trying to create a team that already exists.
	ErrTeamAlreadyExists = errors.New("team already exists")
	// ErrInvalidRole is returned for invalid user or team roles.
	ErrInvalidRole = errors.New("invalid role specified")
	// ErrInvalidStatus is returned for invalid user status.
	ErrInvalidStatus = errors.New("invalid status specified")

	// Define team/source errors here temporarily for IsNotFoundError, or reference from other files.
	// Ideally, these would live in teams.go and source.go respectively.
	ErrTeamNotFound = errors.New("team not found")
)
View Source
var ErrSourceAlreadyExists = fmt.Errorf("source already exists")
View Source
var ErrSourceNotFound = fmt.Errorf("source not found")

ErrSourceNotFound is returned when a source is not found

Functions

func AddTeamMember

func AddTeamMember(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, userID models.UserID, role models.TeamRole) error

AddTeamMember adds a user to a team with a specified role. If the user is already a member, it updates their role.

func AddTeamSource

func AddTeamSource(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, sourceID models.SourceID) error

AddTeamSource associates a source with a team.

func CheckSourceConnectionStatus

func CheckSourceConnectionStatus(ctx context.Context, chDB *clickhouse.Manager, log *slog.Logger, source *models.Source) bool

CheckSourceConnectionStatus checks the connection status for a given source. It returns true if the source is connected and the table is queryable, false otherwise.

func CreateSession

func CreateSession(ctx context.Context, db *sqlite.DB, log *slog.Logger, userID models.UserID, duration time.Duration, maxConcurrent int) (*models.Session, error)

CreateSession creates a new session for a user, respecting concurrent session limits.

func CreateSource

func CreateSource(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, name string, autoCreateTable bool, conn models.ConnectionInfo, description string, ttlDays int, metaTSField string, metaSeverityField string, customSchema string) (*models.Source, error)

CreateSource creates a new source, validates connection, and optionally creates the table.

func CreateTeam

func CreateTeam(ctx context.Context, db *sqlite.DB, log *slog.Logger, name, description string) (*models.Team, error)

CreateTeam creates a new team in the database.

func CreateTeamSourceQuery

func CreateTeamSourceQuery(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, sourceID models.SourceID, name, description, queryContentJSON, queryType string) (*models.SavedTeamQuery, error)

CreateTeamSourceQuery creates a new saved query for a team and source.

func CreateUser

func CreateUser(ctx context.Context, db *sqlite.DB, log *slog.Logger, email, fullName string, role models.UserRole, status models.UserStatus) (*models.User, error)

CreateUser creates a new user in the database.

func DeleteSource

func DeleteSource(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, id models.SourceID) error

DeleteSource deletes a source from SQLite and removes its connection from the manager

func DeleteTeam

func DeleteTeam(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID) error

DeleteTeam deletes a team and its associations (members, sources, queries).

func DeleteTeamSourceQuery

func DeleteTeamSourceQuery(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, sourceID models.SourceID, queryID int) error

DeleteTeamSourceQuery deletes a specific saved query.

func DeleteUser

func DeleteUser(ctx context.Context, db *sqlite.DB, log *slog.Logger, id models.UserID) error

DeleteUser deletes a user from the database.

func GetSource

func GetSource(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, id models.SourceID) (*models.Source, error)

GetSource retrieves a source by ID including connection status and schema

func GetSourceHealth

func GetSourceHealth(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, id models.SourceID) (models.SourceHealth, error)

GetSourceHealth retrieves the health status of a source from the ClickHouse manager

func GetSourceSchema

func GetSourceSchema(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, sourceID models.SourceID) ([]models.ColumnInfo, error)

GetSourceSchema retrieves the schema (column information) for a specific source from ClickHouse.

func GetSourcesWithDetails

func GetSourcesWithDetails(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, sourceIDs []models.SourceID) ([]*models.Source, error)

GetSourcesWithDetails retrieves multiple sources with their full details including schema This is more efficient than calling GetSource multiple times for a list of sources

func GetTeam

func GetTeam(ctx context.Context, db *sqlite.DB, id models.TeamID) (*models.Team, error)

GetTeam retrieves a specific team by its ID.

func GetTeamByName

func GetTeamByName(ctx context.Context, db *sqlite.DB, name string) (*models.Team, error)

GetTeamByName retrieves a specific team by its name.

func GetTeamMember

func GetTeamMember(ctx context.Context, db *sqlite.DB, teamID models.TeamID, userID models.UserID) (*models.TeamMember, error)

GetTeamMember retrieves a specific member's details within a team.

func GetTeamSourceQuery

func GetTeamSourceQuery(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, sourceID models.SourceID, queryID int) (*models.SavedTeamQuery, error)

GetTeamSourceQuery retrieves a specific saved query by its ID, team ID, and source ID.

func GetUser

func GetUser(ctx context.Context, db *sqlite.DB, id models.UserID) (*models.User, error)

GetUser retrieves a specific user by their ID.

func GetUserByEmail

func GetUserByEmail(ctx context.Context, db *sqlite.DB, email string) (*models.User, error)

GetUserByEmail retrieves a specific user by their email address.

func InitAdminUsers

func InitAdminUsers(ctx context.Context, db *sqlite.DB, log *slog.Logger, adminEmails []string) error

InitAdminUsers ensures that specified admin users exist and are configured correctly.

func InitializeSource

func InitializeSource(ctx context.Context, chDB *clickhouse.Manager, source *models.Source) error

InitializeSource adds a source connection to the ClickHouse manager. It assumes the source object contains valid connection details.

func IsNotFoundError

func IsNotFoundError(err error) bool

IsNotFoundError checks if the error is a known not found error. TODO: Refactor to check errors defined in respective packages (users, teams, source) if errors are split.

func IsTeamAdmin

func IsTeamAdmin(ctx context.Context, db *sqlite.DB, teamID models.TeamID, userID models.UserID) (bool, error)

IsTeamAdmin checks if a user is an admin of a specific team.

func IsTeamMember

func IsTeamMember(ctx context.Context, db *sqlite.DB, teamID models.TeamID, userID models.UserID) (bool, error)

IsTeamMember checks if a user is a member of a specific team.

func ListQueriesForTeamAndSource

func ListQueriesForTeamAndSource(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, sourceID models.SourceID) ([]*models.SavedTeamQuery, error)

ListQueriesForTeamAndSource retrieves all saved queries associated with a specific team and source.

func ListSourceTeams

func ListSourceTeams(ctx context.Context, db *sqlite.DB, sourceID models.SourceID) ([]*models.Team, error)

ListSourceTeams returns all teams that have access to a specific source.

func ListSources

func ListSources(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger) ([]*models.Source, error)

ListSources returns all sources with their connection status and schema details

func ListSourcesForUser

func ListSourcesForUser(ctx context.Context, db *sqlite.DB, userID models.UserID) ([]*models.Source, error)

ListSourcesForUser returns all unique sources a user has access to across all teams.

func ListTeamMembers

func ListTeamMembers(ctx context.Context, db *sqlite.DB, teamID models.TeamID) ([]*models.TeamMember, error)

ListTeamMembers returns all members of a specific team.

func ListTeamSources

func ListTeamSources(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, teamID models.TeamID) ([]*models.Source, error)

ListTeamSources returns basic information for all sources associated with a specific team, including their connection status fetched from the ClickHouse manager's cache.

func ListTeams

func ListTeams(ctx context.Context, db *sqlite.DB) ([]*models.Team, error)

ListTeams returns all teams from the database.

func ListTeamsForUser

func ListTeamsForUser(ctx context.Context, db *sqlite.DB, userID models.UserID) ([]*models.Team, error)

ListTeamsForUser returns all teams a user is a member of.

func ListTeamsWithAccessToSource

func ListTeamsWithAccessToSource(ctx context.Context, db *sqlite.DB, log *slog.Logger, sourceID models.SourceID, userID models.UserID) ([]*models.Team, error)

ListTeamsWithAccessToSource returns teams accessible by a user for a given source. This involves multiple DB calls and might be better placed closer to the handler.

func ListUsers

func ListUsers(ctx context.Context, db *sqlite.DB) ([]*models.User, error)

ListUsers returns all users from the database.

func ParseSourceID

func ParseSourceID(sourceIDStr string) (models.SourceID, error)

ParseSourceID converts a string source ID to models.SourceID. Utility function often needed in handlers.

func ParseTeamID

func ParseTeamID(teamIDStr string) (models.TeamID, error)

ParseTeamID converts a string team ID to models.TeamID. Utility function often needed in handlers.

func ParseUserID

func ParseUserID(userIDStr string) (models.UserID, error)

ParseUserID converts a string user ID to models.UserID. Utility function often needed in handlers.

func QueryLogs

func QueryLogs(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, sourceID models.SourceID, params clickhouse.LogQueryParams) (*models.QueryResult, error)

QueryLogs retrieves logs from a specific source based on the provided parameters.

func RemoveTeamMember

func RemoveTeamMember(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, userID models.UserID) error

RemoveTeamMember removes a user from a team.

func RemoveTeamSource

func RemoveTeamSource(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, sourceID models.SourceID) error

RemoveTeamSource removes the association between a source and a team.

func RevokeSession

func RevokeSession(ctx context.Context, db *sqlite.DB, log *slog.Logger, sessionID models.SessionID) error

RevokeSession deletes a specific session by its ID.

func RevokeUserSessions

func RevokeUserSessions(ctx context.Context, db *sqlite.DB, log *slog.Logger, userID models.UserID) error

RevokeUserSessions deletes all sessions for a specific user.

func TeamHasSourceAccess

func TeamHasSourceAccess(ctx context.Context, db *sqlite.DB, teamID models.TeamID, sourceID models.SourceID) (bool, error)

TeamHasSourceAccess checks if a specific team has access to a specific source.

func UpdateSource

func UpdateSource(ctx context.Context, db *sqlite.DB, log *slog.Logger, id models.SourceID, description string, ttlDays int) (*models.Source, error)

UpdateSource updates an existing source's mutable fields (description, ttlDays)

func UpdateTeam

func UpdateTeam(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, updateData models.Team) error

UpdateTeam updates an existing team's mutable fields (name, description).

func UpdateTeamMemberRole

func UpdateTeamMemberRole(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, userID models.UserID, newRole models.TeamRole) error

UpdateTeamMemberRole changes the role of an existing team member.

func UpdateTeamSourceQuery

func UpdateTeamSourceQuery(ctx context.Context, db *sqlite.DB, log *slog.Logger, teamID models.TeamID, sourceID models.SourceID, queryID int, name, description, queryContentJSON, queryType string) (*models.SavedTeamQuery, error)

UpdateTeamSourceQuery updates an existing saved query.

func UpdateUser

func UpdateUser(ctx context.Context, db *sqlite.DB, log *slog.Logger, userID models.UserID, updateData models.User) error

UpdateUser updates an existing user's information. Only non-empty fields in the `updateData` struct are applied.

func UserHasAccessToTeamSource

func UserHasAccessToTeamSource(ctx context.Context, db *sqlite.DB, log *slog.Logger, userID models.UserID, teamID models.TeamID, sourceID models.SourceID) (bool, error)

UserHasAccessToTeamSource checks if a user has access to a specific source through a specific team. This is the proper way to check access - requiring both team membership and team-source linkage.

func ValidateConnection

ValidateConnection validates a connection to a ClickHouse database using temporary client

func ValidateConnectionWithColumns

func ValidateConnectionWithColumns(ctx context.Context, chDB *clickhouse.Manager, log *slog.Logger, conn models.ConnectionInfo, tsField, severityField string) (*models.ConnectionValidationResult, error)

ValidateConnectionWithColumns validates a connection and checks specified column types.

func ValidateSavedQueryContent

func ValidateSavedQueryContent(contentJSON string) error

ValidateSavedQueryContent validates the JSON structure and basic rules of the query content.

func ValidateSession

func ValidateSession(ctx context.Context, db *sqlite.DB, log *slog.Logger, sessionID models.SessionID) (*models.Session, error)

ValidateSession checks if a session ID is valid and not expired. It returns the session details if valid, or an appropriate error.

Types

type HistogramParams

type HistogramParams struct {
	StartTime time.Time
	EndTime   time.Time
	Window    string // e.g., "1m", "5m", "1h"
	Query     string // Optional filter query (WHERE clause part)
	GroupBy   string // Optional field to group by
}

HistogramParams defines parameters specifically for histogram queries. Keeping it separate allows for specific validation or processing.

type HistogramResponse

type HistogramResponse struct {
	Granularity string                     `json:"granularity"`
	Data        []clickhouse.HistogramData `json:"data"`
}

HistogramResponse structures the response for histogram data.

func GetHistogramData

func GetHistogramData(ctx context.Context, db *sqlite.DB, chDB *clickhouse.Manager, log *slog.Logger, sourceID models.SourceID, params HistogramParams) (*HistogramResponse, error)

GetHistogramData fetches histogram data for a specific source and time range. It uses the source's configured timestamp field.

type SourceStats

type SourceStats struct {
	TableStats  *clickhouse.TableStat        `json:"table_stats"`
	ColumnStats []clickhouse.TableColumnStat `json:"column_stats"`
}

SourceStats represents the combined statistics for a ClickHouse table Define locally as it was defined within the source service previously

func GetSourceStats

func GetSourceStats(ctx context.Context, chDB *clickhouse.Manager, log *slog.Logger, source *models.Source) (*SourceStats, error)

GetSourceStats retrieves statistics for a specific source (ClickHouse table)

type ValidationError

type ValidationError struct {
	Field   string
	Message string
	Err     error // Original error (optional)
}

ValidationError represents a validation error, potentially wrapping an original error.

func (*ValidationError) Error

func (e *ValidationError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL