// Copyright 2017, OpenCensus Authors // // 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, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Package zpages implements a collection of HTML pages that display RPC stats // and trace data, and also functions to write that same data in plain text to // an io.Writer. // // Users can also embed the HTML for stats and traces in custom status pages. // // zpages are currrently work-in-process and cannot display minutely and // hourly stats correctly. // // Performance // // Installing the zpages has a performance overhead because additional traces // and stats will be collected in-process. In most cases, we expect this // overhead will not be significant but it depends on many factors, including // how many spans your process creates and how richly annotated they are. package zpages // import "go.opencensus.io/zpages" import ( "net/http" "path" "sync" "go.opencensus.io/internal" ) // TODO(ramonza): Remove Handler to make initialization lazy. // Handler is deprecated: Use Handle. var Handler http.Handler func init() { mux := http.NewServeMux() Handle(mux, "/") Handler = mux } // Handle adds the z-pages to the given ServeMux rooted at pathPrefix. func Handle(mux *http.ServeMux, pathPrefix string) { enable() if mux == nil { mux = http.DefaultServeMux } mux.HandleFunc(path.Join(pathPrefix, "rpcz"), rpczHandler) mux.HandleFunc(path.Join(pathPrefix, "tracez"), tracezHandler) mux.Handle(path.Join(pathPrefix, "public/"), http.FileServer(fs)) } var enableOnce sync.Once func enable() { enableOnce.Do(func() { internal.LocalSpanStoreEnabled = true registerRPCViews() }) }