analytics

package
v1.6.1-rc4 Latest Latest
Warning

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

Go to latest
Published: Aug 19, 2022 License: MPL-2.0 Imports: 18 Imported by: 4

Documentation

Index

Constants

View Source
const (
	AgggregateMixedCollectionName = "tyk_analytics_aggregates"
	MongoAggregatePrefix          = "mongo-pump-aggregate"
	AggregateSQLTable             = "tyk_aggregated"
)
View Source
const SQLTable = "tyk_analytics"
View Source
const UptimeSQLTable = "tyk_uptime_analytics"

Variables

This section is empty.

Functions

func AggregateData

func AggregateData(data []interface{}, trackAllPaths bool, ignoreTagPrefixList []string, storeAnalyticPerMinute bool) map[string]AnalyticsRecordAggregate

AggregateData calculates aggregated data, returns map orgID => aggregated analytics data

func AggregateUptimeData added in v1.5.0

func AggregateUptimeData(data []UptimeReportData) map[string]UptimeReportAggregate

func OnConflictAssignments added in v1.5.0

func OnConflictAssignments(tableName string, tempTable string) map[string]interface{}

func OnConflictUptimeAssignments added in v1.5.0

func OnConflictUptimeAssignments(tableName string, tempTable string) map[string]interface{}

func TrimTag added in v1.6.0

func TrimTag(thisTag string) string

Types

type AnalyticsFilters added in v1.0.0

type AnalyticsFilters struct {
	// Filters pump data by the whitelisted org_ids.
	OrgsIDs []string `json:"org_ids"`
	// Filters pump data by the whitelisted api_ids.
	APIIDs []string `json:"api_ids"`
	// Filters pump data by the whitelisted response_codes.
	ResponseCodes []int `json:"response_codes"`
	// Filters pump data by the blacklisted org_ids.
	SkippedOrgsIDs []string `json:"skip_org_ids"`
	// Filters pump data by the blacklisted api_ids.
	SkippedAPIIDs []string `json:"skip_api_ids"`
	// Filters pump data by the blacklisted response_codes.
	SkippedResponseCodes []int `json:"skip_response_codes"`
}

func (AnalyticsFilters) HasFilter added in v1.0.0

func (filters AnalyticsFilters) HasFilter() bool

func (AnalyticsFilters) ShouldFilter added in v1.0.0

func (filters AnalyticsFilters) ShouldFilter(record AnalyticsRecord) bool

type AnalyticsRecord

type AnalyticsRecord struct {
	Method        string       `json:"method" gorm:"column:method"`
	Host          string       `json:"host" gorm:"column:host"`
	Path          string       `json:"path" gorm:"column:path"`
	RawPath       string       `json:"raw_path" gorm:"column:rawpath"`
	ContentLength int64        `json:"content_length" gorm:"column:contentlength"`
	UserAgent     string       `json:"user_agent" gorm:"column:useragent"`
	Day           int          `json:"day" sql:"-"`
	Month         time.Month   `json:"month" sql:"-"`
	Year          int          `json:"year" sql:"-"`
	Hour          int          `json:"hour" sql:"-"`
	ResponseCode  int          `json:"response_code" gorm:"column:responsecode;index"`
	APIKey        string       `json:"api_key" gorm:"column:apikey;index"`
	TimeStamp     time.Time    `json:"timestamp" gorm:"column:timestamp;index"`
	APIVersion    string       `json:"api_version" gorm:"column:apiversion"`
	APIName       string       `json:"api_name" sql:"-"`
	APIID         string       `json:"api_id" gorm:"column:apiid;index"`
	OrgID         string       `json:"org_id" gorm:"column:orgid;index"`
	OauthID       string       `json:"oauth_id" gorm:"column:oauthid;index"`
	RequestTime   int64        `json:"request_time" gorm:"column:requesttime"`
	RawRequest    string       `json:"raw_request" gorm:"column:rawrequest"`
	RawResponse   string       `json:"raw_response" gorm:"column:rawresponse"`
	IPAddress     string       `json:"ip_address" gorm:"column:ipaddress"`
	Geo           GeoData      `json:"geo" gorm:"embedded"`
	Network       NetworkStats `json:"network"`
	Latency       Latency      `json:"latency"`
	Tags          []string     `json:"tags"`
	Alias         string       `json:"alias"`
	TrackPath     bool         `json:"track_path" gorm:"column:trackpath"`
	ExpireAt      time.Time    `bson:"expireAt" json:"expireAt"`
	ApiSchema     string       `json:"api_schema" bson:"-" gorm:"-"`
}

AnalyticsRecord encodes the details of a request

func (*AnalyticsRecord) GetFieldNames

func (a *AnalyticsRecord) GetFieldNames() []string

func (*AnalyticsRecord) GetGeo added in v1.6.0

func (a *AnalyticsRecord) GetGeo(ipStr string, GeoIPDB *maxminddb.Reader)

func (*AnalyticsRecord) GetLineValues

func (a *AnalyticsRecord) GetLineValues() []string

func (*AnalyticsRecord) SetExpiry added in v1.6.0

func (a *AnalyticsRecord) SetExpiry(expiresInSeconds int64)

func (*AnalyticsRecord) TableName added in v1.5.0

func (ar *AnalyticsRecord) TableName() string

func (*AnalyticsRecord) TimeStampFromProto added in v1.6.0

func (a *AnalyticsRecord) TimeStampFromProto(protoRecord analyticsproto.AnalyticsRecord)

func (*AnalyticsRecord) TimestampToProto added in v1.6.0

func (a *AnalyticsRecord) TimestampToProto(newRecord *analyticsproto.AnalyticsRecord)

TimestampToProto will process timestamps and assign them to the proto record protobuf converts all timestamps to UTC so we need to ensure that we keep the same original location, in order to do so, we store the location

func (*AnalyticsRecord) TrimRawData added in v1.5.0

func (a *AnalyticsRecord) TrimRawData(size int)

type AnalyticsRecordAggregate

type AnalyticsRecordAggregate struct {
	TimeStamp time.Time
	OrgID     string
	TimeID    struct {
		Year  int
		Month int
		Day   int
		Hour  int
	}

	APIKeys map[string]*Counter
	Errors  map[string]*Counter

	Versions map[string]*Counter
	APIID    map[string]*Counter
	OauthIDs map[string]*Counter
	Geo      map[string]*Counter
	Tags     map[string]*Counter

	Endpoints map[string]*Counter

	Lists struct {
		APIKeys       []Counter
		APIID         []Counter
		OauthIDs      []Counter
		Geo           []Counter
		Tags          []Counter
		Errors        []Counter
		Endpoints     []Counter
		KeyEndpoint   map[string][]Counter `bson:"keyendpoints"`
		OauthEndpoint map[string][]Counter `bson:"oauthendpoints"`
		APIEndpoint   []Counter            `bson:"apiendpoints"`
	}

	KeyEndpoint   map[string]map[string]*Counter `bson:"keyendpoints"`
	OauthEndpoint map[string]map[string]*Counter `bson:"oauthendpoints"`
	ApiEndpoint   map[string]*Counter            `bson:"apiendpoints"`

	Total Counter

	ExpireAt time.Time `bson:"expireAt" json:"expireAt"`
	LastTime time.Time
}

func (*AnalyticsRecordAggregate) AsChange

func (f *AnalyticsRecordAggregate) AsChange() (newUpdate bson.M)

func (*AnalyticsRecordAggregate) AsTimeUpdate

func (f *AnalyticsRecordAggregate) AsTimeUpdate() bson.M

func (*AnalyticsRecordAggregate) Dimensions added in v1.5.0

func (f *AnalyticsRecordAggregate) Dimensions() (dimensions []Dimension)

func (*AnalyticsRecordAggregate) DiscardAggregations added in v1.2.0

func (f *AnalyticsRecordAggregate) DiscardAggregations(fields []string)

DiscardAggregations this method discard the aggregations of X field specified in the aggregated pump configuration

func (AnalyticsRecordAggregate) New

func (*AnalyticsRecordAggregate) SetErrorList added in v1.0.0

func (f *AnalyticsRecordAggregate) SetErrorList(parent, thisUnit string, counter *Counter, newUpdate bson.M)

type City added in v1.6.0

type City struct {
	GeoNameID uint              `maxminddb:"geoname_id" json:"geoname_id"`
	Names     map[string]string `maxminddb:"names" json:"names"`
}

type Code added in v1.5.0

type Code struct {
	Code1x  int `json:"1x" gorm:"1x"`
	Code200 int `json:"200" gorm:"200"`
	Code201 int `json:"201" gorm:"201"`
	Code2x  int `json:"2x" gorm:"2x"`
	Code301 int `json:"301" gorm:"301"`
	Code302 int `json:"302" gorm:"302"`
	Code303 int `json:"303" gorm:"303"`
	Code304 int `json:"304" gorm:"304"`
	Code3x  int `json:"3x" gorm:"3x"`
	Code400 int `json:"400" gorm:"400"`
	Code401 int `json:"401" gorm:"401"`
	Code403 int `json:"403" gorm:"403"`
	Code404 int `json:"404" gorm:"404"`
	Code429 int `json:"429" gorm:"429"`
	Code4x  int `json:"4x" gorm:"4x"`
	Code500 int `json:"500" gorm:"500"`
	Code501 int `json:"501" gorm:"501"`
	Code502 int `json:"502" gorm:"502"`
	Code503 int `json:"503" gorm:"503"`
	Code504 int `json:"504" gorm:"504"`
	Code5x  int `json:"5x" gorm:"5x"`
}

func (*Code) ProcessStatusCodes added in v1.5.0

func (c *Code) ProcessStatusCodes(errorMap map[string]int)

type Counter

type Counter struct {
	Hits                 int       `json:"hits"`
	Success              int       `json:"success"`
	ErrorTotal           int       `json:"error" gorm:"column:error"`
	RequestTime          float64   `json:"request_time"`
	TotalRequestTime     float64   `json:"total_request_time"`
	Identifier           string    `json:"identifier" sql:"-"`
	HumanIdentifier      string    `json:"human_identifier"`
	LastTime             time.Time `json:"last_time"`
	OpenConnections      int64     `json:"open_connections"`
	ClosedConnections    int64     `json:"closed_connections"`
	BytesIn              int64     `json:"bytes_in"`
	BytesOut             int64     `json:"bytes_out"`
	MaxUpstreamLatency   int64     `json:"max_upstream_latency"`
	MinUpstreamLatency   int64     `json:"min_upstream_latency"`
	TotalUpstreamLatency int64     `json:"total_upstream_latency"`
	UpstreamLatency      float64   `json:"upstream_latency"`

	MaxLatency   int64   `json:"max_latency"`
	MinLatency   int64   `json:"min_latency"`
	TotalLatency int64   `json:"total_latency"`
	Latency      float64 `json:"latency"`

	ErrorMap  map[string]int `json:"error_map" sql:"-"`
	ErrorList []ErrorData    `json:"error_list" sql:"-"`
}

type Country added in v1.5.0

type Country struct {
	ISOCode string `maxminddb:"iso_code" json:"iso_code"`
}

type Dimension added in v1.5.0

type Dimension struct {
	Name    string
	Value   string
	Counter *Counter
}

type ErrorData added in v1.0.0

type ErrorData struct {
	Code  string
	Count int
}

type GeoData

type GeoData struct {
	Country  Country  `maxminddb:"country" json:"country"`
	City     City     `maxminddb:"city" json:"city"`
	Location Location `maxminddb:"location" json:"location"`
}

func GeoIPLookup added in v1.6.0

func GeoIPLookup(ipStr string, GeoIPDB *maxminddb.Reader) (*GeoData, error)

func (*GeoData) GetFieldNames added in v1.3.0

func (g *GeoData) GetFieldNames() []string

func (*GeoData) GetLineValues added in v1.3.0

func (g *GeoData) GetLineValues() []string

type Latency

type Latency struct {
	Total    int64 `json:"total"`
	Upstream int64 `json:"upstream"`
}

func (*Latency) GetFieldNames added in v1.3.0

func (l *Latency) GetFieldNames() []string

func (*Latency) GetLineValues added in v1.3.0

func (l *Latency) GetLineValues() []string

type Location added in v1.6.0

type Location struct {
	Latitude  float64 `maxminddb:"latitude" json:"latitude"`
	Longitude float64 `maxminddb:"longitude" json:"longitude"`
	TimeZone  string  `maxminddb:"time_zone" json:"time_zone"`
}

type NetworkStats

type NetworkStats struct {
	OpenConnections  int64 `json:"open_connections"`
	ClosedConnection int64 `json:"closed_connections"`
	BytesIn          int64 `json:"bytes_in"`
	BytesOut         int64 `json:"bytes_out"`
}

func (*NetworkStats) Flush added in v1.6.0

func (n *NetworkStats) Flush() NetworkStats

func (*NetworkStats) GetFieldNames added in v1.3.0

func (n *NetworkStats) GetFieldNames() []string

func (*NetworkStats) GetLineValues added in v1.3.0

func (n *NetworkStats) GetLineValues() []string

type SQLAnalyticsRecordAggregate added in v1.5.0

type SQLAnalyticsRecordAggregate struct {
	ID string `gorm:"primaryKey"`

	Counter `json:"counter" gorm:"embedded"`

	TimeStamp      int64  `json:"timestamp" gorm:"index:dimension, priority:1"`
	OrgID          string `json:"org_id" gorm:"index:dimension, priority:2"`
	Dimension      string `json:"dimension" gorm:"index:dimension, priority:3"`
	DimensionValue string `json:"dimension_value" gorm:"index:dimension, priority:4"`

	Code `json:"code" gorm:"embedded"`
}

func (*SQLAnalyticsRecordAggregate) TableName added in v1.5.0

func (f *SQLAnalyticsRecordAggregate) TableName() string

type UptimeReportAggregate added in v1.5.0

type UptimeReportAggregate struct {
	TimeStamp time.Time
	OrgID     string
	TimeID    struct {
		Year  int
		Month int
		Day   int
		Hour  int
	}

	URL    map[string]*Counter
	Errors map[string]*Counter

	Total Counter

	ExpireAt time.Time `bson:"expireAt" json:"expireAt"`
	LastTime time.Time
}

func (*UptimeReportAggregate) Dimensions added in v1.5.0

func (u *UptimeReportAggregate) Dimensions() (dimensions []Dimension)

func (UptimeReportAggregate) New added in v1.5.0

type UptimeReportAggregateSQL added in v1.5.0

type UptimeReportAggregateSQL struct {
	ID string `gorm:"primaryKey"`

	Counter `json:"counter" gorm:"embedded"`

	TimeStamp      int64  `json:"timestamp" gorm:"index:dimension, priority:1"`
	OrgID          string `json:"org_id" gorm:"index:dimension, priority:2"`
	Dimension      string `json:"dimension" gorm:"index:dimension, priority:3"`
	DimensionValue string `json:"dimension_value" gorm:"index:dimension, priority:4"`

	Code `json:"code" gorm:"embedded"`
}

func (*UptimeReportAggregateSQL) TableName added in v1.5.0

func (a *UptimeReportAggregateSQL) TableName() string

type UptimeReportData

type UptimeReportData struct {
	URL          string     `json:"url"`
	RequestTime  int64      `json:"request_time"`
	ResponseCode int        `json:"response_code"`
	TCPError     bool       `json:"tcp_error"`
	ServerError  bool       `json:"server_error"`
	Day          int        `json:"day"`
	Month        time.Month `json:"month"`
	Year         int        `json:"year"`
	Hour         int        `json:"hour"`
	Minute       int        `json:"minute"`
	TimeStamp    time.Time  `json:"timestamp"`
	ExpireAt     time.Time  `bson:"expireAt"`
	APIID        string     `json:"api_id"`
	OrgID        string     `json:"org_id"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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