analytics

package
v1.1.2 Latest Latest
Warning

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

Go to latest
Published: Jul 15, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AnalyticsRequest

type AnalyticsRequest struct {
	DriverID    int64
	From        time.Time
	To          time.Time
	GroupBy     []GroupByDimension
	Granularity Granularity
	SeriesIDs   []int64
	CarIDs      []int64
	TrackIDs    []int64
}

AnalyticsRequest contains the parameters for an analytics query.

type AnalyticsResult

type AnalyticsResult struct {
	Summary    Summary
	GroupedBy  []GroupedSummary
	TimeSeries []PeriodSummary
}

AnalyticsResult contains the computed analytics.

type Dimensions

type Dimensions struct {
	SeriesIDs []int64
	CarIDs    []int64
	TrackIDs  []int64
}

Dimensions contains the unique series, cars, and tracks a driver has raced.

type Granularity

type Granularity string

Granularity represents the time bucketing level for time series data.

const (
	GranularityDay   Granularity = "day"
	GranularityWeek  Granularity = "week"
	GranularityMonth Granularity = "month"
	GranularityYear  Granularity = "year"
)

func (Granularity) IsValid

func (g Granularity) IsValid() bool

IsValid checks if the granularity value is valid.

type GroupByDimension

type GroupByDimension string

GroupByDimension represents a dimension to group results by.

const (
	GroupBySeries GroupByDimension = "series"
	GroupByCar    GroupByDimension = "car"
	GroupByTrack  GroupByDimension = "track"
)

func (GroupByDimension) IsValid

func (g GroupByDimension) IsValid() bool

IsValid checks if the groupBy dimension value is valid.

type GroupedSummary

type GroupedSummary struct {
	SeriesID *int64
	CarID    *int64
	TrackID  *int64
	Summary  Summary
}

GroupedSummary contains stats for a specific dimension grouping.

type PeriodSummary

type PeriodSummary struct {
	Period  string
	Summary Summary
}

PeriodSummary contains stats for a time period.

type Service

type Service struct {
	// contains filtered or unexported fields
}

Service provides analytics computations over race data.

func NewService

func NewService(store Store) *Service

NewService creates a new analytics service.

func (*Service) GetAnalytics

func (s *Service) GetAnalytics(ctx context.Context, req AnalyticsRequest) (*AnalyticsResult, error)

GetAnalytics computes analytics for the given request.

func (*Service) GetDimensions

func (s *Service) GetDimensions(ctx context.Context, driverID int64, from, to time.Time) (*Dimensions, error)

GetDimensions returns the unique series, cars, and tracks the driver has raced within the specified time range.

type Store

type Store interface {
	GetDriverSessionsByTimeRange(ctx context.Context, driverID int64, from, to time.Time, filters ...store.SessionFilter) ([]store.DriverSession, error)
}

Store defines the data access interface needed by the analytics service.

type Summary

type Summary struct {
	RaceCount int

	// iRating
	IRatingStart int
	IRatingEnd   int
	IRatingDelta int
	IRatingGain  int
	IRatingLoss  int

	// CPI (Compliance Points Index)
	CPIStart float64
	CPIEnd   float64
	CPIDelta float64
	CPIGain  float64
	CPILoss  float64

	// Position stats
	Podiums           int
	Top5Finishes      int
	Wins              int
	AvgFinishPosition float64
	AvgStartPosition  float64
	PositionsGained   float64

	// Incidents
	TotalIncidents int
	AvgIncidents   float64
}

Summary contains aggregated statistics for a set of races.

Jump to

Keyboard shortcuts

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