Documentation ¶
Index ¶
- Constants
- type Action
- type BindVarCond
- type Map
- func (qri *Map) FilterByPlan(query string, planid planbuilder.PlanType, tableName string) (newqrs *Rules)
- func (qri *Map) Get(ruleSource string) (*Rules, error)
- func (qri *Map) MarshalJSON() ([]byte, error)
- func (qri *Map) RegisterSource(ruleSource string)
- func (qri *Map) SetRules(ruleSource string, newRules *Rules) error
- func (qri *Map) UnRegisterSource(ruleSource string)
- type Operator
- type Rule
- func (qr *Rule) AddBindVarCond(name string, onAbsent, onMismatch bool, op Operator, value interface{}) error
- func (qr *Rule) AddPlanCond(planType planbuilder.PlanType)
- func (qr *Rule) AddTableCond(tableName string)
- func (qr *Rule) Copy() (newqr *Rule)
- func (qr *Rule) FilterByPlan(query string, planid planbuilder.PlanType, tableName string) (newqr *Rule)
- func (qr *Rule) GetAction(ip, user string, bindVars map[string]*querypb.BindVariable) Action
- func (qr *Rule) MarshalJSON() ([]byte, error)
- func (qr *Rule) SetIPCond(pattern string) (err error)
- func (qr *Rule) SetQueryCond(pattern string) (err error)
- func (qr *Rule) SetUserCond(pattern string) (err error)
- type Rules
- func (qrs *Rules) Add(qr *Rule)
- func (qrs *Rules) Append(otherqrs *Rules)
- func (qrs *Rules) Copy() (newqrs *Rules)
- func (qrs *Rules) Delete(name string) (qr *Rule)
- func (qrs *Rules) FilterByPlan(query string, planid planbuilder.PlanType, tableName string) (newqrs *Rules)
- func (qrs *Rules) Find(name string) (qr *Rule)
- func (qrs *Rules) GetAction(ip, user string, bindVars map[string]*querypb.BindVariable) (action Action, desc string)
- func (qrs *Rules) MarshalJSON() ([]byte, error)
- func (qrs *Rules) UnmarshalJSON(data []byte) (err error)
Constants ¶
const ( QRContinue = Action(iota) QRFail QRFailRetry )
These are actions.
const ( QRNoOp = Operator(iota) QREqual QRNotEqual QRLessThan QRGreaterEqual QRGreaterThan QRLessEqual QRMatch QRNoMatch QRNumOp )
These are comparison operators.
const ( QROK = iota QRMismatch QROutOfRange )
These are return statii.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Action ¶
type Action int
Action speficies the list of actions to perform when a Rule is triggered.
func (Action) MarshalJSON ¶
MarshalJSON marshals to JSON.
type BindVarCond ¶
type BindVarCond struct {
// contains filtered or unexported fields
}
BindVarCond represents a bind var condition.
func (BindVarCond) MarshalJSON ¶
func (bvc BindVarCond) MarshalJSON() ([]byte, error)
MarshalJSON marshals to JSON.
type Map ¶
type Map struct {
// contains filtered or unexported fields
}
Map is the maintainer of Rules from multiple sources
func (*Map) FilterByPlan ¶
func (qri *Map) FilterByPlan(query string, planid planbuilder.PlanType, tableName string) (newqrs *Rules)
FilterByPlan creates a new Rules by prefiltering on all query rules that are contained in internal Rules structures, in other words, query rules from all predefined sources will be applied.
func (*Map) MarshalJSON ¶
MarshalJSON marshals to JSON.
func (*Map) RegisterSource ¶
RegisterSource registers a query rule source name with Map.
func (*Map) SetRules ¶
SetRules takes an external Rules structure and overwrite one of the internal Rules as designated by ruleSource parameter.
func (*Map) UnRegisterSource ¶
UnRegisterSource removes a registered query rule source name.
type Operator ¶
type Operator int
Operator represents the list of operators.
func MapStrOperator ¶
MapStrOperator maps a string representation to an Operator.
func (Operator) MarshalJSON ¶
MarshalJSON marshals to JSON.
type Rule ¶
Rule represents one rule (conditions-action). Name is meant to uniquely identify a rule. Description is a human readable comment that describes the rule. For a Rule to fire, all conditions of the Rule have to match. For example, an empty Rule will match all requests. Every Rule has an associated Action. If all the conditions of the Rule are met, then the Action is triggerred.
func BuildQueryRule ¶
BuildQueryRule builds a query rule from a ruleInfo.
func NewQueryRule ¶
NewQueryRule creates a new Rule.
func (*Rule) AddBindVarCond ¶
func (qr *Rule) AddBindVarCond(name string, onAbsent, onMismatch bool, op Operator, value interface{}) error
AddBindVarCond adds a bind variable restriction to the Rule. All bind var conditions have to be satisfied for the Rule to be a match. name represents the name (not regexp) of the bind variable. onAbsent specifies the value of the condition if the bind variable is absent. onMismatch specifies the value of the condition if there's a type mismatch on the condition. For inequalities, the bindvar is the left operand and the value in the condition is the right operand: bindVar Operator value. Value & operator rules Type Operators Bindvar nil "" any type uint64 ==, !=, <, >=, >, <= whole numbers int64 ==, !=, <, >=, >, <= whole numbers string ==, !=, <, >=, >, <=, MATCH, NOMATCH []byte, string whole numbers can be: int, int8, int16, int32, int64, uint64
func (*Rule) AddPlanCond ¶
func (qr *Rule) AddPlanCond(planType planbuilder.PlanType)
AddPlanCond adds to the list of plans that can be matched for the rule to fire. This function acts as an OR: Any plan id match is considered a match.
func (*Rule) AddTableCond ¶
AddTableCond adds to the list of tableNames that can be matched for the rule to fire. This function acts as an OR: Any tableName match is considered a match.
func (*Rule) FilterByPlan ¶
func (qr *Rule) FilterByPlan(query string, planid planbuilder.PlanType, tableName string) (newqr *Rule)
FilterByPlan returns a new Rule if the query and planid match. The new Rule will contain all the original constraints other than the plan and query. If the plan and query don't match the Rule, then it returns nil.
func (*Rule) MarshalJSON ¶
MarshalJSON marshals to JSON.
func (*Rule) SetIPCond ¶
SetIPCond adds a regular expression condition for the client IP. It has to be a full match (not substring).
func (*Rule) SetQueryCond ¶
SetQueryCond adds a regular expression condition for the query.
func (*Rule) SetUserCond ¶
SetUserCond adds a regular expression condition for the user name used by the client.
type Rules ¶
type Rules struct {
// contains filtered or unexported fields
}
Rules is used to store and execute rules for the tabletserver.
func (*Rules) Delete ¶
Delete deletes a Rule by name and returns the rule that was deleted. It returns nil if the rule was not found.
func (*Rules) FilterByPlan ¶
func (qrs *Rules) FilterByPlan(query string, planid planbuilder.PlanType, tableName string) (newqrs *Rules)
FilterByPlan creates a new Rules by prefiltering on the query and planId. This allows us to create query plan specific Rules out of the original Rules. In the new rules, query, plans and tableNames predicates are empty.
func (*Rules) Find ¶
Find finds the first occurrence of a Rule by matching the Name field. It returns nil if the rule was not found.
func (*Rules) GetAction ¶
func (qrs *Rules) GetAction(ip, user string, bindVars map[string]*querypb.BindVariable) (action Action, desc string)
GetAction runs the input against the rules engine and returns the action to be performed.
func (*Rules) MarshalJSON ¶
MarshalJSON marshals to JSON.
func (*Rules) UnmarshalJSON ¶
UnmarshalJSON unmarshals Rules.