本文整理匯總了Golang中github.com/MiniProfiler/go/miniprofiler.Timer類的典型用法代碼示例。如果您正苦於以下問題:Golang Timer類的具體用法?Golang Timer怎麽用?Golang Timer使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Timer類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: timeTSDBRequest
func timeTSDBRequest(e *State, T miniprofiler.Timer, req *opentsdb.Request) (s opentsdb.ResponseSet, err error) {
e.tsdbQueries = append(e.tsdbQueries, *req)
if e.autods > 0 {
for _, q := range req.Queries {
if q.Downsample == "" {
if err := req.AutoDownsample(e.autods); err != nil {
return nil, err
}
}
}
}
b, _ := json.MarshalIndent(req, "", " ")
tries := 1
for {
T.StepCustomTiming("tsdb", "query", string(b), func() {
getFn := func() (interface{}, error) {
return e.tsdbContext.Query(req)
}
var val interface{}
val, err = e.cache.Get(string(b), getFn)
s = val.(opentsdb.ResponseSet).Copy()
})
if err == nil || tries == tsdbMaxTries {
break
}
slog.Errorf("Error on tsdb query %d: %s", tries, err.Error())
tries++
}
return
}
示例2: walkUnary
func (e *State) walkUnary(node *parse.UnaryNode, T miniprofiler.Timer) *Results {
a := e.walk(node.Arg, T)
T.Step("walkUnary: "+node.OpStr, func(T miniprofiler.Timer) {
for _, r := range a.Results {
if an, aok := r.Value.(Scalar); aok && math.IsNaN(float64(an)) {
r.Value = Scalar(math.NaN())
continue
}
switch rt := r.Value.(type) {
case Scalar:
r.Value = Scalar(uoperate(node.OpStr, float64(rt)))
case Number:
r.Value = Number(uoperate(node.OpStr, float64(rt)))
case Series:
s := make(Series)
for k, v := range rt {
s[k] = uoperate(node.OpStr, float64(v))
}
r.Value = s
default:
panic(ErrUnknownOp)
}
}
})
return a
}
示例3: timeESRequest
// timeESRequest execute the elasticsearch query (which may set or hit cache) and returns
// the search results.
func timeESRequest(e *State, T miniprofiler.Timer, req *ElasticRequest) (resp *elastic.SearchResult, err error) {
e.elasticQueries = append(e.elasticQueries, *req.Source)
var source interface{}
source, err = req.Source.Source()
if err != nil {
return resp, fmt.Errorf("failed to get source of request while timing elastic request: %s", err)
}
b, err := json.MarshalIndent(source, "", " ")
if err != nil {
return resp, err
}
key, err := req.CacheKey()
if err != nil {
return nil, err
}
T.StepCustomTiming("elastic", "query", fmt.Sprintf("%v\n%s", req.Indices, b), func() {
getFn := func() (interface{}, error) {
return e.ElasticHosts.Query(req)
}
var val interface{}
val, err = e.Cache.Get(key, getFn)
resp = val.(*elastic.SearchResult)
})
return
}
示例4: walkFunc
func (e *State) walkFunc(node *parse.FuncNode, T miniprofiler.Timer) *Results {
var res *Results
T.Step("func: "+node.Name, func(T miniprofiler.Timer) {
var in []reflect.Value
for i, a := range node.Args {
var v interface{}
switch t := a.(type) {
case *parse.StringNode:
v = t.Text
case *parse.NumberNode:
v = t.Float64
case *parse.FuncNode:
v = extract(e.walkFunc(t, T))
case *parse.UnaryNode:
v = extract(e.walkUnary(t, T))
case *parse.BinaryNode:
v = extract(e.walkBinary(t, T))
case *parse.ExprNode:
v = e.walkExpr(t, T)
default:
panic(fmt.Errorf("expr: unknown func arg type"))
}
var argType models.FuncType
if i >= len(node.F.Args) {
if !node.F.VArgs {
panic("expr: shouldn't be here, more args then expected and not variable argument type func")
}
argType = node.F.Args[node.F.VArgsPos]
} else {
argType = node.F.Args[i]
}
if f, ok := v.(float64); ok && argType == models.TypeNumberSet {
v = fromScalar(f)
}
in = append(in, reflect.ValueOf(v))
}
f := reflect.ValueOf(node.F.F)
fr := f.Call(append([]reflect.Value{reflect.ValueOf(e), reflect.ValueOf(T)}, in...))
res = fr[0].Interface().(*Results)
if len(fr) > 1 && !fr[1].IsNil() {
err := fr[1].Interface().(error)
if err != nil {
panic(err)
}
}
if node.Return() == models.TypeNumberSet {
for _, r := range res.Results {
e.AddComputation(r, node.String(), r.Value.(Number))
}
}
})
return res
}
示例5: bandTSDB
func bandTSDB(e *State, T miniprofiler.Timer, query, duration, period string, num float64, rfunc func(*Results, *opentsdb.Response, time.Duration) error) (r *Results, err error) {
r = new(Results)
r.IgnoreOtherUnjoined = true
r.IgnoreUnjoined = true
T.Step("band", func(T miniprofiler.Timer) {
var d, p opentsdb.Duration
d, err = opentsdb.ParseDuration(duration)
if err != nil {
return
}
p, err = opentsdb.ParseDuration(period)
if err != nil {
return
}
if num < 1 || num > 100 {
err = fmt.Errorf("num out of bounds")
}
var q *opentsdb.Query
q, err = opentsdb.ParseQuery(query, e.tsdbContext.Version())
if err != nil {
return
}
if !e.tsdbContext.Version().FilterSupport() {
if err = e.Search.Expand(q); err != nil {
return
}
}
req := opentsdb.Request{
Queries: []*opentsdb.Query{q},
}
now := e.now
req.End = now.Unix()
req.Start = now.Add(time.Duration(-d)).Unix()
if err = req.SetTime(e.now); err != nil {
return
}
for i := 0; i < int(num); i++ {
now = now.Add(time.Duration(-p))
req.End = now.Unix()
req.Start = now.Add(time.Duration(-d)).Unix()
var s opentsdb.ResponseSet
s, err = timeTSDBRequest(e, T, &req)
if err != nil {
return
}
for _, res := range s {
if e.squelched(res.Tags) {
continue
}
//offset := e.now.Sub(now.Add(time.Duration(p-d)))
offset := e.now.Sub(now)
if err = rfunc(r, res, offset); err != nil {
return
}
}
}
})
return
}
示例6: ExecuteState
func (e *Expr) ExecuteState(s *State, T miniprofiler.Timer) (r *Results, queries []opentsdb.Request, err error) {
defer errRecover(&err)
if T == nil {
T = new(miniprofiler.Profile)
} else {
s.enableComputations = true
}
T.Step("expr execute", func(T miniprofiler.Timer) {
r = s.walk(e.Tree.Root, T)
})
queries = s.tsdbQueries
return
}
示例7: timeLSRequest
// timeLSRequest execute the elasticsearch query (which may set or hit cache) and returns
// the search results.
func timeLSRequest(e *State, T miniprofiler.Timer, req *LogstashRequest) (resp *elastic.SearchResult, err error) {
e.logstashQueries = append(e.logstashQueries, *req.Source)
b, _ := json.MarshalIndent(req.Source.Source(), "", " ")
T.StepCustomTiming("logstash", "query", string(b), func() {
getFn := func() (interface{}, error) {
return e.LogstashHosts.Query(req)
}
var val interface{}
val, err = e.Cache.Get(string(b), getFn)
resp = val.(*elastic.SearchResult)
})
return
}
示例8: Index
func Index(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) {
db, _ := sql.Open("sqlite3", ":memory:")
db.ExecTimer(t, "create table x(a, b, c)")
db.ExecTimer(t, "insert into x (1, 2, 4), (3, 5, 6)")
db.QueryTimer(t, "select * from x")
t.Step("redissss", func(t miniprofiler.Timer) {
conn, _ := redis.Dial("tcp", ":6379")
defer conn.Close()
conn.DoTimer(t, "set", "tes t", "value")
conn.SendTimer(t, "get", "test t")
})
fmt.Fprintf(w, `<html><body>%v</body></html>`, t.Includes())
}
示例9: timeGraphiteRequest
func timeGraphiteRequest(e *State, T miniprofiler.Timer, req *graphite.Request) (resp graphite.Response, err error) {
e.graphiteQueries = append(e.graphiteQueries, *req)
b, _ := json.MarshalIndent(req, "", " ")
T.StepCustomTiming("graphite", "query", string(b), func() {
key := req.CacheKey()
getFn := func() (interface{}, error) {
return e.graphiteContext.Query(req)
}
var val interface{}
val, err = e.cache.Get(key, getFn)
resp = val.(graphite.Response)
})
return
}
示例10: timeInfluxRequest
func timeInfluxRequest(e *State, T miniprofiler.Timer, db, query, startDuration, endDuration, groupByInterval string) (s []influxModels.Row, err error) {
q, err := influxQueryDuration(e.now, query, startDuration, endDuration, groupByInterval)
if err != nil {
return nil, err
}
conn, err := client.NewHTTPClient(e.InfluxConfig)
if err != nil {
return nil, err
}
T.StepCustomTiming("influx", "query", q, func() {
getFn := func() (interface{}, error) {
res, err := conn.Query(client.Query{
Command: q,
Database: db,
})
if err != nil {
return nil, err
}
if res.Error() != nil {
return nil, res.Error()
}
if len(res.Results) != 1 {
return nil, fmt.Errorf("influx: expected one result")
}
r := res.Results[0]
if r.Err == "" {
return r.Series, nil
}
err = fmt.Errorf(r.Err)
return r.Series, err
}
var val interface{}
var ok bool
val, err = e.Cache.Get(q, getFn)
if s, ok = val.([]influxModels.Row); !ok {
err = fmt.Errorf("influx: did not get a valid result from InfluxDB")
}
})
return
}
示例11: Index
func Index(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/graph" {
r.ParseForm()
if _, present := r.Form["png"]; present {
if _, err := Graph(t, w, r); err != nil {
serveError(w, err)
}
return
}
}
r.Header.Set(miniprofilerHeader, "true")
// Set some global settings for the UI to know about. This saves us from
// having to make an HTTP call to see what features should be enabled
// in the UI
openTSDBVersion := opentsdb.Version{0, 0}
if schedule.SystemConf.GetTSDBContext() != nil {
openTSDBVersion = schedule.SystemConf.GetTSDBContext().Version()
}
settings, err := json.Marshal(appSetings{
schedule.SystemConf.SaveEnabled(),
schedule.SystemConf.AnnotateEnabled(),
schedule.GetQuiet(),
openTSDBVersion,
})
if err != nil {
serveError(w, err)
return
}
err = indexTemplate().Execute(w, indexVariables{
t.Includes(),
string(settings),
})
if err != nil {
serveError(w, err)
}
}
示例12: Graph
// Graph takes an OpenTSDB request data structure and queries OpenTSDB. Use the
// json parameter to pass JSON. Use the b64 parameter to pass base64-encoded
// JSON.
func Graph(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) {
j := []byte(r.FormValue("json"))
if bs := r.FormValue("b64"); bs != "" {
b, err := base64.StdEncoding.DecodeString(bs)
if err != nil {
return nil, err
}
j = b
}
if len(j) == 0 {
return nil, fmt.Errorf("either json or b64 required")
}
oreq, err := opentsdb.RequestFromJSON(j)
if err != nil {
return nil, err
}
if ads_v := r.FormValue("autods"); ads_v != "" {
ads_i, err := strconv.Atoi(ads_v)
if err != nil {
return nil, err
}
if err := oreq.AutoDownsample(ads_i); err != nil {
return nil, err
}
}
ar := make(map[int]bool)
for _, v := range r.Form["autorate"] {
if i, err := strconv.Atoi(v); err == nil {
ar[i] = true
}
}
queries := make([]string, len(oreq.Queries))
var start, end string
var startT, endT time.Time
if s, ok := oreq.Start.(string); ok && strings.Contains(s, "-ago") {
startT, err = opentsdb.ParseTime(s)
if err != nil {
return nil, err
}
start = strings.TrimSuffix(s, "-ago")
}
if s, ok := oreq.End.(string); ok && strings.Contains(s, "-ago") {
endT, err = opentsdb.ParseTime(s)
if err != nil {
return nil, err
}
end = strings.TrimSuffix(s, "-ago")
}
if start == "" && end == "" {
s, sok := oreq.Start.(int64)
e, eok := oreq.End.(int64)
if sok && eok {
start = fmt.Sprintf("%vs", e-s)
startT = time.Unix(s, 0)
endT = time.Unix(e, 0)
if err != nil {
return nil, err
}
}
}
if endT.Equal(time.Time{}) {
endT = time.Now().UTC()
}
m_units := make(map[string]string)
for i, q := range oreq.Queries {
if ar[i] {
meta, err := schedule.MetadataMetrics(q.Metric)
if err != nil {
return nil, err
}
if meta == nil {
return nil, fmt.Errorf("no metadata for %s: cannot use auto rate", q)
}
if meta.Unit != "" {
m_units[q.Metric] = meta.Unit
}
if meta.Rate != "" {
switch meta.Rate {
case metadata.Gauge:
// ignore
case metadata.Rate:
q.Rate = true
case metadata.Counter:
q.Rate = true
q.RateOptions = opentsdb.RateOptions{
Counter: true,
ResetValue: 1,
}
default:
return nil, fmt.Errorf("unknown metadata rate: %s", meta.Rate)
}
}
}
queries[i] = fmt.Sprintf(`q("%v", "%v", "%v")`, q, start, end)
if !schedule.SystemConf.GetTSDBContext().Version().FilterSupport() {
if err := schedule.Search.Expand(q); err != nil {
//.........這裏部分代碼省略.........
示例13: MarshalGroups
func (s *Schedule) MarshalGroups(T miniprofiler.Timer, filter string) (*StateGroups, error) {
var silenced SilenceTester
T.Step("Silenced", func(miniprofiler.Timer) {
silenced = s.Silenced()
})
var groups map[StateTuple]States
var err error
status := make(States)
t := StateGroups{
TimeAndDate: s.SystemConf.GetTimeAndDate(),
}
t.FailingAlerts, t.UnclosedErrors = s.getErrorCounts()
T.Step("Setup", func(miniprofiler.Timer) {
status2, err2 := s.GetOpenStates()
if err2 != nil {
err = err2
return
}
var parsedExpr *boolq.Tree
parsedExpr, err2 = boolq.Parse(filter)
if err2 != nil {
err = err2
return
}
for k, v := range status2 {
a := s.RuleConf.GetAlert(k.Name())
if a == nil {
slog.Errorf("unknown alert %s. Force closing.", k.Name())
if err2 = s.ActionByAlertKey("bosun", "closing because alert doesn't exist.", models.ActionForceClose, k); err2 != nil {
slog.Error(err2)
}
continue
}
is, err2 := MakeIncidentSummary(s.RuleConf, silenced, v)
if err2 != nil {
err = err2
return
}
match := false
match, err2 = boolq.AskParsedExpr(parsedExpr, is)
if err2 != nil {
err = err2
return
}
if match {
status[k] = v
}
}
})
if err != nil {
return nil, err
}
T.Step("GroupStates", func(T miniprofiler.Timer) {
groups = status.GroupStates(silenced)
})
T.Step("groups", func(T miniprofiler.Timer) {
for tuple, states := range groups {
var grouped []*StateGroup
switch tuple.Status {
case models.StWarning, models.StCritical, models.StUnknown:
var sets map[string]models.AlertKeys
T.Step(fmt.Sprintf("GroupSets (%d): %v", len(states), tuple), func(T miniprofiler.Timer) {
sets = states.GroupSets(s.SystemConf.GetMinGroupSize())
})
for name, group := range sets {
g := StateGroup{
Active: tuple.Active,
Status: tuple.Status,
CurrentStatus: tuple.CurrentStatus,
Silenced: tuple.Silenced,
Subject: fmt.Sprintf("%s - %s", tuple.Status, name),
}
for _, ak := range group {
st := status[ak]
st.Body = ""
st.EmailBody = nil
st.Attachments = nil
g.Children = append(g.Children, &StateGroup{
Active: tuple.Active,
Status: tuple.Status,
Silenced: tuple.Silenced,
AlertKey: ak,
Alert: ak.Name(),
Subject: string(st.Subject),
Ago: marshalTime(st.Last().Time),
State: st,
IsError: !s.AlertSuccessful(ak.Name()),
})
}
if len(g.Children) == 1 && g.Children[0].Subject != "" {
g.Subject = g.Children[0].Subject
}
grouped = append(grouped, &g)
}
default:
continue
}
if tuple.NeedAck {
t.Groups.NeedAck = append(t.Groups.NeedAck, grouped...)
} else {
//.........這裏部分代碼省略.........
示例14: QueryRowTimer
func (d DB) QueryRowTimer(t miniprofiler.Timer, query string, args ...interface{}) (row *sql.Row) {
t.StepCustomTiming("sql", "query", query, func() {
row = d.DB.QueryRow(query, args...)
})
return
}
示例15: ExecTimer
func (d DB) ExecTimer(t miniprofiler.Timer, query string, args ...interface{}) (result sql.Result, err error) {
t.StepCustomTiming("sql", "exec", query, func() {
result, err = d.DB.Exec(query, args...)
})
return
}