flowcontrolv1

package
v0.1.1-rc.2 Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2022 License: AGPL-3.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	AuthzResponse_Status_name = map[int32]string{
		0: "STATUS_NO_ERROR",
		1: "STATUS_INVALID_TRAFFIC_DIRECTION",
		2: "STATUS_CONVERT_TO_MAP_STRUCT",
		3: "STATUS_CONVERT_TO_REGO_AST",
		4: "STATUS_CLASSIFY_FLOW_LABELS",
	}
	AuthzResponse_Status_value = map[string]int32{
		"STATUS_NO_ERROR":                  0,
		"STATUS_INVALID_TRAFFIC_DIRECTION": 1,
		"STATUS_CONVERT_TO_MAP_STRUCT":     2,
		"STATUS_CONVERT_TO_REGO_AST":       3,
		"STATUS_CLASSIFY_FLOW_LABELS":      4,
	}
)

Enum value maps for AuthzResponse_Status.

View Source
var (
	DecisionType_name = map[int32]string{
		0: "DECISION_TYPE_UNSPECIFIED",
		1: "DECISION_TYPE_ACCEPTED",
		2: "DECISION_TYPE_REJECTED",
	}
	DecisionType_value = map[string]int32{
		"DECISION_TYPE_UNSPECIFIED": 0,
		"DECISION_TYPE_ACCEPTED":    1,
		"DECISION_TYPE_REJECTED":    2,
	}
)

Enum value maps for DecisionType.

View Source
var (
	DecisionReason_ErrorReason_name = map[int32]string{
		0: "ERROR_REASON_UNSPECIFIED",
	}
	DecisionReason_ErrorReason_value = map[string]int32{
		"ERROR_REASON_UNSPECIFIED": 0,
	}
)

Enum value maps for DecisionReason_ErrorReason.

View Source
var (
	DecisionReason_RejectReason_name = map[int32]string{
		0: "REJECT_REASON_UNSPECIFIED",
		1: "REJECT_REASON_RATE_LIMITED",
		2: "REJECT_REASON_CONCURRENCY_LIMITED",
	}
	DecisionReason_RejectReason_value = map[string]int32{
		"REJECT_REASON_UNSPECIFIED":         0,
		"REJECT_REASON_RATE_LIMITED":        1,
		"REJECT_REASON_CONCURRENCY_LIMITED": 2,
	}
)

Enum value maps for DecisionReason_RejectReason.

View Source
var (
	LimiterDecision_LimiterReason_name = map[int32]string{
		0: "LIMITER_REASON_UNSPECIFIED",
		1: "LIMITER_REASON_KEY_NOT_FOUND",
	}
	LimiterDecision_LimiterReason_value = map[string]int32{
		"LIMITER_REASON_UNSPECIFIED":   0,
		"LIMITER_REASON_KEY_NOT_FOUND": 1,
	}
)

Enum value maps for LimiterDecision_LimiterReason.

View Source
var File_aperture_flowcontrol_v1_envoy_proto protoreflect.FileDescriptor
View Source
var File_aperture_flowcontrol_v1_flowcontrol_proto protoreflect.FileDescriptor
View Source
var FlowControlService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "aperture.flowcontrol.v1.FlowControlService",
	HandlerType: (*FlowControlServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Check",
			Handler:    _FlowControlService_Check_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "aperture/flowcontrol/v1/flowcontrol.proto",
}

FlowControlService_ServiceDesc is the grpc.ServiceDesc for FlowControlService service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)

Functions

func RegisterFlowControlServiceServer

func RegisterFlowControlServiceServer(s grpc.ServiceRegistrar, srv FlowControlServiceServer)

Types

type AuthzResponse

type AuthzResponse struct {
	Status AuthzResponse_Status `protobuf:"varint,1,opt,name=status,proto3,enum=aperture.flowcontrol.v1.AuthzResponse_Status" json:"status,omitempty"`
	// contains filtered or unexported fields
}

func (*AuthzResponse) Descriptor deprecated

func (*AuthzResponse) Descriptor() ([]byte, []int)

Deprecated: Use AuthzResponse.ProtoReflect.Descriptor instead.

func (*AuthzResponse) GetStatus

func (x *AuthzResponse) GetStatus() AuthzResponse_Status

func (*AuthzResponse) MarshalJSON

func (msg *AuthzResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*AuthzResponse) ProtoMessage

func (*AuthzResponse) ProtoMessage()

func (*AuthzResponse) ProtoReflect

func (x *AuthzResponse) ProtoReflect() protoreflect.Message

func (*AuthzResponse) Reset

func (x *AuthzResponse) Reset()

func (*AuthzResponse) String

func (x *AuthzResponse) String() string

func (*AuthzResponse) UnmarshalJSON

func (msg *AuthzResponse) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type AuthzResponse_Status

type AuthzResponse_Status int32
const (
	AuthzResponse_STATUS_NO_ERROR                  AuthzResponse_Status = 0
	AuthzResponse_STATUS_INVALID_TRAFFIC_DIRECTION AuthzResponse_Status = 1
	AuthzResponse_STATUS_CONVERT_TO_MAP_STRUCT     AuthzResponse_Status = 2
	AuthzResponse_STATUS_CONVERT_TO_REGO_AST       AuthzResponse_Status = 3
	AuthzResponse_STATUS_CLASSIFY_FLOW_LABELS      AuthzResponse_Status = 4
)

func (AuthzResponse_Status) Descriptor

func (AuthzResponse_Status) Enum

func (AuthzResponse_Status) EnumDescriptor deprecated

func (AuthzResponse_Status) EnumDescriptor() ([]byte, []int)

Deprecated: Use AuthzResponse_Status.Descriptor instead.

func (AuthzResponse_Status) Number

func (AuthzResponse_Status) String

func (x AuthzResponse_Status) String() string

func (AuthzResponse_Status) Type

type CheckRequest

type CheckRequest struct {
	Feature string            `protobuf:"bytes,1,opt,name=feature,proto3" json:"feature,omitempty"`
	Labels  map[string]string `` /* 153-byte string literal not displayed */
	// contains filtered or unexported fields
}

CheckRequest contains fields required to perform Check call.

func (*CheckRequest) Descriptor deprecated

func (*CheckRequest) Descriptor() ([]byte, []int)

Deprecated: Use CheckRequest.ProtoReflect.Descriptor instead.

func (*CheckRequest) GetFeature

func (x *CheckRequest) GetFeature() string

func (*CheckRequest) GetLabels

func (x *CheckRequest) GetLabels() map[string]string

func (*CheckRequest) MarshalJSON

func (msg *CheckRequest) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*CheckRequest) ProtoMessage

func (*CheckRequest) ProtoMessage()

func (*CheckRequest) ProtoReflect

func (x *CheckRequest) ProtoReflect() protoreflect.Message

func (*CheckRequest) Reset

func (x *CheckRequest) Reset()

func (*CheckRequest) String

func (x *CheckRequest) String() string

func (*CheckRequest) UnmarshalJSON

func (msg *CheckRequest) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type CheckResponse

type CheckResponse struct {

	// decision_type contains what the decision was.
	DecisionType DecisionType `` /* 140-byte string literal not displayed */
	// reason contains information in the case of an error or rejection.
	DecisionReason *DecisionReason `protobuf:"bytes,2,opt,name=decision_reason,json=decisionReason,proto3" json:"decision_reason,omitempty"`
	// limiter_decisions contains information about decision made by each limiter.
	LimiterDecisions []*LimiterDecision `protobuf:"bytes,3,rep,name=limiter_decisions,json=limiterDecisions,proto3" json:"limiter_decisions,omitempty"`
	// flux meters that were matched for this request.
	FluxMeters []*FluxMeter `protobuf:"bytes,4,rep,name=flux_meters,json=fluxMeters,proto3" json:"flux_meters,omitempty"`
	// flow label keys that were matched for this request.
	FlowLabelKeys []string `protobuf:"bytes,5,rep,name=flow_label_keys,json=flowLabelKeys,proto3" json:"flow_label_keys,omitempty"`
	// contains filtered or unexported fields
}

CheckResponse contains fields that represent decision made by Check call.

func (*CheckResponse) Descriptor deprecated

func (*CheckResponse) Descriptor() ([]byte, []int)

Deprecated: Use CheckResponse.ProtoReflect.Descriptor instead.

func (*CheckResponse) GetDecisionReason

func (x *CheckResponse) GetDecisionReason() *DecisionReason

func (*CheckResponse) GetDecisionType

func (x *CheckResponse) GetDecisionType() DecisionType

func (*CheckResponse) GetFlowLabelKeys

func (x *CheckResponse) GetFlowLabelKeys() []string

func (*CheckResponse) GetFluxMeters

func (x *CheckResponse) GetFluxMeters() []*FluxMeter

func (*CheckResponse) GetLimiterDecisions

func (x *CheckResponse) GetLimiterDecisions() []*LimiterDecision

func (*CheckResponse) MarshalJSON

func (msg *CheckResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*CheckResponse) ProtoMessage

func (*CheckResponse) ProtoMessage()

func (*CheckResponse) ProtoReflect

func (x *CheckResponse) ProtoReflect() protoreflect.Message

func (*CheckResponse) Reset

func (x *CheckResponse) Reset()

func (*CheckResponse) String

func (x *CheckResponse) String() string

func (*CheckResponse) UnmarshalJSON

func (msg *CheckResponse) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type DecisionReason

type DecisionReason struct {
	ErrorReason  DecisionReason_ErrorReason  `` /* 151-byte string literal not displayed */
	RejectReason DecisionReason_RejectReason `` /* 155-byte string literal not displayed */
	// contains filtered or unexported fields
}

Reason contains fields that give further information about error or rejection.

func (*DecisionReason) Descriptor deprecated

func (*DecisionReason) Descriptor() ([]byte, []int)

Deprecated: Use DecisionReason.ProtoReflect.Descriptor instead.

func (*DecisionReason) GetErrorReason

func (x *DecisionReason) GetErrorReason() DecisionReason_ErrorReason

func (*DecisionReason) GetRejectReason

func (x *DecisionReason) GetRejectReason() DecisionReason_RejectReason

func (*DecisionReason) MarshalJSON

func (msg *DecisionReason) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*DecisionReason) ProtoMessage

func (*DecisionReason) ProtoMessage()

func (*DecisionReason) ProtoReflect

func (x *DecisionReason) ProtoReflect() protoreflect.Message

func (*DecisionReason) Reset

func (x *DecisionReason) Reset()

func (*DecisionReason) String

func (x *DecisionReason) String() string

func (*DecisionReason) UnmarshalJSON

func (msg *DecisionReason) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type DecisionReason_ErrorReason

type DecisionReason_ErrorReason int32
const (
	DecisionReason_ERROR_REASON_UNSPECIFIED DecisionReason_ErrorReason = 0
)

func (DecisionReason_ErrorReason) Descriptor

func (DecisionReason_ErrorReason) Enum

func (DecisionReason_ErrorReason) EnumDescriptor deprecated

func (DecisionReason_ErrorReason) EnumDescriptor() ([]byte, []int)

Deprecated: Use DecisionReason_ErrorReason.Descriptor instead.

func (DecisionReason_ErrorReason) Number

func (DecisionReason_ErrorReason) String

func (DecisionReason_ErrorReason) Type

type DecisionReason_RejectReason

type DecisionReason_RejectReason int32
const (
	DecisionReason_REJECT_REASON_UNSPECIFIED         DecisionReason_RejectReason = 0
	DecisionReason_REJECT_REASON_RATE_LIMITED        DecisionReason_RejectReason = 1
	DecisionReason_REJECT_REASON_CONCURRENCY_LIMITED DecisionReason_RejectReason = 2
)

func (DecisionReason_RejectReason) Descriptor

func (DecisionReason_RejectReason) Enum

func (DecisionReason_RejectReason) EnumDescriptor deprecated

func (DecisionReason_RejectReason) EnumDescriptor() ([]byte, []int)

Deprecated: Use DecisionReason_RejectReason.Descriptor instead.

func (DecisionReason_RejectReason) Number

func (DecisionReason_RejectReason) String

func (DecisionReason_RejectReason) Type

type DecisionType

type DecisionType int32
const (
	DecisionType_DECISION_TYPE_UNSPECIFIED DecisionType = 0
	DecisionType_DECISION_TYPE_ACCEPTED    DecisionType = 1
	DecisionType_DECISION_TYPE_REJECTED    DecisionType = 2
)

func (DecisionType) Descriptor

func (DecisionType) Enum

func (x DecisionType) Enum() *DecisionType

func (DecisionType) EnumDescriptor deprecated

func (DecisionType) EnumDescriptor() ([]byte, []int)

Deprecated: Use DecisionType.Descriptor instead.

func (DecisionType) Number

func (DecisionType) String

func (x DecisionType) String() string

func (DecisionType) Type

type FlowControlServiceClient

type FlowControlServiceClient interface {
	// Check wraps the given arbitrary resource and matches the given labels
	// against Flow Control Limiters to makes a decision whether to allow/deny.
	Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error)
}

FlowControlServiceClient is the client API for FlowControlService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.

type FlowControlServiceServer

type FlowControlServiceServer interface {
	// Check wraps the given arbitrary resource and matches the given labels
	// against Flow Control Limiters to makes a decision whether to allow/deny.
	Check(context.Context, *CheckRequest) (*CheckResponse, error)
}

FlowControlServiceServer is the server API for FlowControlService service. All implementations should embed UnimplementedFlowControlServiceServer for forward compatibility

type FluxMeter

type FluxMeter struct {
	PolicyName    string `protobuf:"bytes,1,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"`
	PolicyHash    string `protobuf:"bytes,2,opt,name=policy_hash,json=policyHash,proto3" json:"policy_hash,omitempty"`
	FluxMeterName string `protobuf:"bytes,3,opt,name=flux_meter_name,json=fluxMeterName,proto3" json:"flux_meter_name,omitempty"`
	// contains filtered or unexported fields
}

FluxMeter describes detail for each FluxMeter.

func (*FluxMeter) Descriptor deprecated

func (*FluxMeter) Descriptor() ([]byte, []int)

Deprecated: Use FluxMeter.ProtoReflect.Descriptor instead.

func (*FluxMeter) GetFluxMeterName

func (x *FluxMeter) GetFluxMeterName() string

func (*FluxMeter) GetPolicyHash

func (x *FluxMeter) GetPolicyHash() string

func (*FluxMeter) GetPolicyName

func (x *FluxMeter) GetPolicyName() string

func (*FluxMeter) MarshalJSON

func (msg *FluxMeter) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*FluxMeter) ProtoMessage

func (*FluxMeter) ProtoMessage()

func (*FluxMeter) ProtoReflect

func (x *FluxMeter) ProtoReflect() protoreflect.Message

func (*FluxMeter) Reset

func (x *FluxMeter) Reset()

func (*FluxMeter) String

func (x *FluxMeter) String() string

func (*FluxMeter) UnmarshalJSON

func (msg *FluxMeter) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type LimiterDecision

type LimiterDecision struct {
	PolicyName     string                        `protobuf:"bytes,1,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"`
	PolicyHash     string                        `protobuf:"bytes,2,opt,name=policy_hash,json=policyHash,proto3" json:"policy_hash,omitempty"`
	ComponentIndex int64                         `protobuf:"varint,3,opt,name=component_index,json=componentIndex,proto3" json:"component_index,omitempty"`
	Dropped        bool                          `protobuf:"varint,4,opt,name=dropped,proto3" json:"dropped,omitempty"`
	Reason         LimiterDecision_LimiterReason `protobuf:"varint,5,opt,name=reason,proto3,enum=aperture.flowcontrol.v1.LimiterDecision_LimiterReason" json:"reason,omitempty"`
	// Types that are assignable to Details:
	//	*LimiterDecision_RateLimiter_
	//	*LimiterDecision_ConcurrencyLimiter_
	Details isLimiterDecision_Details `protobuf_oneof:"details"`
	// contains filtered or unexported fields
}

LimiterDecision describes details for each limiter.

func (*LimiterDecision) Descriptor deprecated

func (*LimiterDecision) Descriptor() ([]byte, []int)

Deprecated: Use LimiterDecision.ProtoReflect.Descriptor instead.

func (*LimiterDecision) GetComponentIndex

func (x *LimiterDecision) GetComponentIndex() int64

func (*LimiterDecision) GetConcurrencyLimiter

func (x *LimiterDecision) GetConcurrencyLimiter() *LimiterDecision_ConcurrencyLimiter

func (*LimiterDecision) GetDetails

func (m *LimiterDecision) GetDetails() isLimiterDecision_Details

func (*LimiterDecision) GetDropped

func (x *LimiterDecision) GetDropped() bool

func (*LimiterDecision) GetPolicyHash

func (x *LimiterDecision) GetPolicyHash() string

func (*LimiterDecision) GetPolicyName

func (x *LimiterDecision) GetPolicyName() string

func (*LimiterDecision) GetRateLimiter

func (x *LimiterDecision) GetRateLimiter() *LimiterDecision_RateLimiter

func (*LimiterDecision) GetReason

func (*LimiterDecision) MarshalJSON

func (msg *LimiterDecision) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*LimiterDecision) ProtoMessage

func (*LimiterDecision) ProtoMessage()

func (*LimiterDecision) ProtoReflect

func (x *LimiterDecision) ProtoReflect() protoreflect.Message

func (*LimiterDecision) Reset

func (x *LimiterDecision) Reset()

func (*LimiterDecision) String

func (x *LimiterDecision) String() string

func (*LimiterDecision) UnmarshalJSON

func (msg *LimiterDecision) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type LimiterDecision_ConcurrencyLimiter

type LimiterDecision_ConcurrencyLimiter struct {
	WorkloadIndex string `protobuf:"bytes,1,opt,name=workload_index,json=workloadIndex,proto3" json:"workload_index,omitempty"`
	// contains filtered or unexported fields
}

func (*LimiterDecision_ConcurrencyLimiter) Descriptor deprecated

func (*LimiterDecision_ConcurrencyLimiter) Descriptor() ([]byte, []int)

Deprecated: Use LimiterDecision_ConcurrencyLimiter.ProtoReflect.Descriptor instead.

func (*LimiterDecision_ConcurrencyLimiter) GetWorkloadIndex

func (x *LimiterDecision_ConcurrencyLimiter) GetWorkloadIndex() string

func (*LimiterDecision_ConcurrencyLimiter) MarshalJSON

func (msg *LimiterDecision_ConcurrencyLimiter) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*LimiterDecision_ConcurrencyLimiter) ProtoMessage

func (*LimiterDecision_ConcurrencyLimiter) ProtoMessage()

func (*LimiterDecision_ConcurrencyLimiter) ProtoReflect

func (*LimiterDecision_ConcurrencyLimiter) Reset

func (*LimiterDecision_ConcurrencyLimiter) String

func (*LimiterDecision_ConcurrencyLimiter) UnmarshalJSON

func (msg *LimiterDecision_ConcurrencyLimiter) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type LimiterDecision_ConcurrencyLimiter_

type LimiterDecision_ConcurrencyLimiter_ struct {
	ConcurrencyLimiter *LimiterDecision_ConcurrencyLimiter `protobuf:"bytes,7,opt,name=concurrency_limiter,json=concurrencyLimiter,proto3,oneof"`
}

type LimiterDecision_LimiterReason

type LimiterDecision_LimiterReason int32
const (
	LimiterDecision_LIMITER_REASON_UNSPECIFIED   LimiterDecision_LimiterReason = 0
	LimiterDecision_LIMITER_REASON_KEY_NOT_FOUND LimiterDecision_LimiterReason = 1
)

func (LimiterDecision_LimiterReason) Descriptor

func (LimiterDecision_LimiterReason) Enum

func (LimiterDecision_LimiterReason) EnumDescriptor deprecated

func (LimiterDecision_LimiterReason) EnumDescriptor() ([]byte, []int)

Deprecated: Use LimiterDecision_LimiterReason.Descriptor instead.

func (LimiterDecision_LimiterReason) Number

func (LimiterDecision_LimiterReason) String

func (LimiterDecision_LimiterReason) Type

type LimiterDecision_RateLimiter

type LimiterDecision_RateLimiter struct {
	Remaining int64  `protobuf:"varint,1,opt,name=remaining,proto3" json:"remaining,omitempty"`
	Current   int64  `protobuf:"varint,2,opt,name=current,proto3" json:"current,omitempty"`
	Label     string `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
	// contains filtered or unexported fields
}

func (*LimiterDecision_RateLimiter) Descriptor deprecated

func (*LimiterDecision_RateLimiter) Descriptor() ([]byte, []int)

Deprecated: Use LimiterDecision_RateLimiter.ProtoReflect.Descriptor instead.

func (*LimiterDecision_RateLimiter) GetCurrent

func (x *LimiterDecision_RateLimiter) GetCurrent() int64

func (*LimiterDecision_RateLimiter) GetLabel

func (x *LimiterDecision_RateLimiter) GetLabel() string

func (*LimiterDecision_RateLimiter) GetRemaining

func (x *LimiterDecision_RateLimiter) GetRemaining() int64

func (*LimiterDecision_RateLimiter) MarshalJSON

func (msg *LimiterDecision_RateLimiter) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*LimiterDecision_RateLimiter) ProtoMessage

func (*LimiterDecision_RateLimiter) ProtoMessage()

func (*LimiterDecision_RateLimiter) ProtoReflect

func (*LimiterDecision_RateLimiter) Reset

func (x *LimiterDecision_RateLimiter) Reset()

func (*LimiterDecision_RateLimiter) String

func (x *LimiterDecision_RateLimiter) String() string

func (*LimiterDecision_RateLimiter) UnmarshalJSON

func (msg *LimiterDecision_RateLimiter) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler

type LimiterDecision_RateLimiter_

type LimiterDecision_RateLimiter_ struct {
	RateLimiter *LimiterDecision_RateLimiter `protobuf:"bytes,6,opt,name=rate_limiter,json=rateLimiter,proto3,oneof"`
}

type UnimplementedFlowControlServiceServer

type UnimplementedFlowControlServiceServer struct {
}

UnimplementedFlowControlServiceServer should be embedded to have forward compatible implementations.

func (UnimplementedFlowControlServiceServer) Check

type UnsafeFlowControlServiceServer

type UnsafeFlowControlServiceServer interface {
	// contains filtered or unexported methods
}

UnsafeFlowControlServiceServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to FlowControlServiceServer will result in compilation errors.

Jump to

Keyboard shortcuts

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