|
- // Copyright 2015 PingCAP, Inc.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- package variable
-
- import (
- "github.com/juju/errors"
- )
-
- var statisticsList []Statistics
- var globalStatusScopes = make(map[string]ScopeFlag)
-
- // DefaultScopeFlag is the status default scope.
- var DefaultScopeFlag = ScopeGlobal | ScopeSession
-
- // StatusVal is the value of the corresponding status variable.
- type StatusVal struct {
- Scope ScopeFlag
- Value interface{}
- }
-
- // Statistics is the interface of statistics.
- type Statistics interface {
- // GetScope gets the status variables scope.
- GetScope(status string) ScopeFlag
- // Stats returns the statistics status variables.
- Stats() (map[string]interface{}, error)
- }
-
- // RegisterStatistics registers statistics.
- func RegisterStatistics(s Statistics) {
- statisticsList = append(statisticsList, s)
- }
-
- // GetStatusVars gets registered statistics status variables.
- func GetStatusVars() (map[string]*StatusVal, error) {
- statusVars := make(map[string]*StatusVal)
-
- for _, statistics := range statisticsList {
- vals, err := statistics.Stats()
- if err != nil {
- return nil, errors.Trace(err)
- }
-
- for name, val := range vals {
- scope := statistics.GetScope(name)
- statusVars[name] = &StatusVal{Value: val, Scope: scope}
- }
- }
-
- return statusVars, nil
- }
|