profiling

package
v0.0.0-...-e825a9d Latest Latest
Warning

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

Go to latest
Published: May 26, 2021 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Unknown Priority = 0
	Low              = 1
	High             = 2
)
View Source
const RedisQueueName = "sessions"
View Source
const RedisQueueTag = "profiler service"

Variables

This section is empty.

Functions

func CookieForDimmingDecision

func CookieForDimmingDecision(decision bool) *fasthttp.Cookie

func CookieForPriority

func CookieForPriority(priority Priority) *fasthttp.Cookie

func HasDimmingDecisionCookie

func HasDimmingDecisionCookie(request *fasthttp.Request) bool

func ReadDimmingDecisionCookie

func ReadDimmingDecisionCookie(request *fasthttp.Request) bool

func RequestHasPriorityCookie

func RequestHasPriorityCookie(request *fasthttp.Request) bool

func RequestHasPriorityLowOrHighCookie

func RequestHasPriorityLowOrHighCookie(request *fasthttp.Request) bool

Types

type InfluxDBRequestWriter

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

func NewInfluxDBRequestWriter

func NewInfluxDBRequestWriter(addr, authToken, org, bucket string) *InfluxDBRequestWriter

func (*InfluxDBRequestWriter) Write

func (w *InfluxDBRequestWriter) Write(sessionID string, method string, path string)

type Priority

type Priority int

func (Priority) String

func (p Priority) String() string

type PriorityFetcher

type PriorityFetcher interface {
	// Profile instructs the profiler to generate a priority for a session.
	Profile(sessionID string)
	// Fetch retrieves a priority for a session from a key-value store.
	Fetch(sessionID string) (Priority, error)
}

type ProfiledRequestAggregator

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

ProfiledRequestAggregator captures data used to ensure high priority requests are dimmed when low priority requests are exhausted and vice-versa. The aggregator is implemented using atomic integers such that overhead added to requests is reduced. The counters decay over time to approximate a sliding window of requests without having to store the timestamps of requests.

func NewProfiledRequestAggregator

func NewProfiledRequestAggregator() *ProfiledRequestAggregator

func (*ProfiledRequestAggregator) GetHighPriorityVisits

func (a *ProfiledRequestAggregator) GetHighPriorityVisits() int32

func (*ProfiledRequestAggregator) GetLowPriorityVisits

func (a *ProfiledRequestAggregator) GetLowPriorityVisits() int32

func (*ProfiledRequestAggregator) MarkHighPriorityVisit

func (a *ProfiledRequestAggregator) MarkHighPriorityVisit()

func (*ProfiledRequestAggregator) MarkLowPriorityVisit

func (a *ProfiledRequestAggregator) MarkLowPriorityVisit()

type Profiler

type Profiler struct {
	Priorities                               PriorityFetcher
	Requests                                 RequestWriter
	Aggregator                               *ProfiledRequestAggregator
	LowPriorityDimmingProbability            float64
	LowPriorityDimmingProbabilityMultiplier  float64
	HighPriorityDimmingProbability           float64
	HighPriorityDimmingProbabilityMultiplier float64
}

func (*Profiler) DimmingDecisionProbabilityForPriorityCookie

func (p *Profiler) DimmingDecisionProbabilityForPriorityCookie(request *fasthttp.Request) float64

func (*Profiler) MarkProfiledRequestByPriorityCookie

func (p *Profiler) MarkProfiledRequestByPriorityCookie(request *fasthttp.Request)

type RedisPriorityFetcher

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

func NewRedisPriorityFetcher

func NewRedisPriorityFetcher(addr string, password string, prioritiesDB int, queueDB int) (*RedisPriorityFetcher, error)

func (*RedisPriorityFetcher) Fetch

func (f *RedisPriorityFetcher) Fetch(sessionID string) (Priority, error)

func (*RedisPriorityFetcher) Profile

func (f *RedisPriorityFetcher) Profile(sessionID string)

type RequestWriter

type RequestWriter interface {
	// Write logs a session request allowing the session behaviour to be
	// profiled.
	Write(sessionID string, method string, path string)
}

Jump to

Keyboard shortcuts

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