mirror of
https://github.com/kataras/iris.git
synced 2026-01-24 12:25:57 +00:00
update Blocks module
This commit is contained in:
@@ -754,6 +754,13 @@ func (api *APIBuilder) createRoutes(errorCode int, methods []string, relativePat
|
||||
|
||||
mainHandlerFileName, mainHandlerFileNumber := context.HandlerFileLineRel(handlers[mainHandlerIndex])
|
||||
|
||||
// TODO: think of it.
|
||||
if mainHandlerFileName == "<autogenerated>" {
|
||||
// At PartyConfigure, 2nd+ level of routes it will get <autogenerated> but in reallity will be the same as the caller.
|
||||
mainHandlerFileName = filename
|
||||
mainHandlerFileNumber = line
|
||||
}
|
||||
|
||||
// re-calculate mainHandlerIndex in favor of the middlewares.
|
||||
mainHandlerIndex = len(beginHandlers) + mainHandlerIndex
|
||||
|
||||
|
||||
@@ -2,13 +2,11 @@ package router
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/kataras/iris/v12/context"
|
||||
"github.com/kataras/iris/v12/core/errgroup"
|
||||
@@ -16,7 +14,6 @@ import (
|
||||
macroHandler "github.com/kataras/iris/v12/macro/handler"
|
||||
|
||||
"github.com/kataras/golog"
|
||||
"github.com/kataras/pio"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -371,87 +368,7 @@ func (h *routerHandler) Build(provider RoutesProvider) error {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: move this and make it easier to read when all cases are, visually, tested.
|
||||
if logger := h.logger; logger != nil && logger.Level == golog.DebugLevel && noLogCount < len(registeredRoutes) {
|
||||
// group routes by method and print them without the [DBUG] and time info,
|
||||
// the route logs are colorful.
|
||||
// Note: don't use map, we need to keep registered order, use
|
||||
// different slices for each method.
|
||||
|
||||
collect := func(method string) (methodRoutes []*Route) {
|
||||
for _, r := range registeredRoutes {
|
||||
if r.NoLog {
|
||||
continue
|
||||
}
|
||||
if r.Method == method {
|
||||
methodRoutes = append(methodRoutes, r)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type MethodRoutes struct {
|
||||
method string
|
||||
routes []*Route
|
||||
}
|
||||
|
||||
allMethods := append(AllMethods, []string{MethodNone, ""}...)
|
||||
methodRoutes := make([]MethodRoutes, 0, len(allMethods))
|
||||
|
||||
for _, method := range allMethods {
|
||||
routes := collect(method)
|
||||
if len(routes) > 0 {
|
||||
methodRoutes = append(methodRoutes, MethodRoutes{method, routes})
|
||||
}
|
||||
}
|
||||
|
||||
if n := len(methodRoutes); n > 0 {
|
||||
tr := "routes"
|
||||
if len(registeredRoutes) == 1 {
|
||||
tr = tr[0 : len(tr)-1]
|
||||
}
|
||||
|
||||
bckpNewLine := logger.NewLine
|
||||
logger.NewLine = false
|
||||
debugLevel := golog.Levels[golog.DebugLevel]
|
||||
// Replace that in order to not transfer it to the log handler (e.g. json)
|
||||
// logger.Debugf("API: %d registered %s (", len(registeredRoutes), tr)
|
||||
// with:
|
||||
pio.WriteRich(logger.Printer, debugLevel.Title, debugLevel.ColorCode, debugLevel.Style...)
|
||||
fmt.Fprintf(logger.Printer, " %s %sAPI: %d registered %s (", time.Now().Format(logger.TimeFormat), logger.Prefix, len(registeredRoutes)-noLogCount, tr)
|
||||
//
|
||||
logger.NewLine = bckpNewLine
|
||||
|
||||
for i, m := range methodRoutes {
|
||||
// @method: @count
|
||||
if i > 0 {
|
||||
if i == n-1 {
|
||||
fmt.Fprint(logger.Printer, " and ")
|
||||
} else {
|
||||
fmt.Fprint(logger.Printer, ", ")
|
||||
}
|
||||
}
|
||||
if m.method == "" {
|
||||
m.method = "ERROR"
|
||||
}
|
||||
fmt.Fprintf(logger.Printer, "%d ", len(m.routes))
|
||||
pio.WriteRich(logger.Printer, m.method, TraceTitleColorCode(m.method))
|
||||
}
|
||||
|
||||
fmt.Fprint(logger.Printer, ")\n")
|
||||
}
|
||||
|
||||
for i, m := range methodRoutes {
|
||||
for _, r := range m.routes {
|
||||
r.Trace(logger.Printer, -1)
|
||||
}
|
||||
|
||||
if i != len(allMethods)-1 {
|
||||
logger.Printer.Write(pio.NewLine)
|
||||
}
|
||||
}
|
||||
}
|
||||
printRoutesInfo(h.logger, registeredRoutes, noLogCount)
|
||||
|
||||
return errgroup.Check(rp)
|
||||
}
|
||||
|
||||
94
core/router/handler_debug.go
Normal file
94
core/router/handler_debug.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/kataras/golog"
|
||||
"github.com/kataras/pio"
|
||||
)
|
||||
|
||||
func printRoutesInfo(logger *golog.Logger, registeredRoutes []*Route, noLogCount int) {
|
||||
if !(logger != nil && logger.Level == golog.DebugLevel && noLogCount < len(registeredRoutes)) {
|
||||
return
|
||||
}
|
||||
|
||||
// group routes by method and print them without the [DBUG] and time info,
|
||||
// the route logs are colorful.
|
||||
// Note: don't use map, we need to keep registered order, use
|
||||
// different slices for each method.
|
||||
|
||||
collect := func(method string) (methodRoutes []*Route) {
|
||||
for _, r := range registeredRoutes {
|
||||
if r.NoLog {
|
||||
continue
|
||||
}
|
||||
if r.Method == method {
|
||||
methodRoutes = append(methodRoutes, r)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type MethodRoutes struct {
|
||||
method string
|
||||
routes []*Route
|
||||
}
|
||||
|
||||
allMethods := append(AllMethods, []string{MethodNone, ""}...)
|
||||
methodRoutes := make([]MethodRoutes, 0, len(allMethods))
|
||||
|
||||
for _, method := range allMethods {
|
||||
routes := collect(method)
|
||||
if len(routes) > 0 {
|
||||
methodRoutes = append(methodRoutes, MethodRoutes{method, routes})
|
||||
}
|
||||
}
|
||||
|
||||
if n := len(methodRoutes); n > 0 {
|
||||
tr := "routes"
|
||||
if len(registeredRoutes) == 1 {
|
||||
tr = tr[0 : len(tr)-1]
|
||||
}
|
||||
|
||||
bckpNewLine := logger.NewLine
|
||||
logger.NewLine = false
|
||||
debugLevel := golog.Levels[golog.DebugLevel]
|
||||
// Replace that in order to not transfer it to the log handler (e.g. json)
|
||||
// logger.Debugf("API: %d registered %s (", len(registeredRoutes), tr)
|
||||
// with:
|
||||
pio.WriteRich(logger.Printer, debugLevel.Title, debugLevel.ColorCode, debugLevel.Style...)
|
||||
fmt.Fprintf(logger.Printer, " %s %sAPI: %d registered %s (", time.Now().Format(logger.TimeFormat), logger.Prefix, len(registeredRoutes)-noLogCount, tr)
|
||||
//
|
||||
logger.NewLine = bckpNewLine
|
||||
|
||||
for i, m := range methodRoutes {
|
||||
// @method: @count
|
||||
if i > 0 {
|
||||
if i == n-1 {
|
||||
fmt.Fprint(logger.Printer, " and ")
|
||||
} else {
|
||||
fmt.Fprint(logger.Printer, ", ")
|
||||
}
|
||||
}
|
||||
if m.method == "" {
|
||||
m.method = "ERROR"
|
||||
}
|
||||
fmt.Fprintf(logger.Printer, "%d ", len(m.routes))
|
||||
pio.WriteRich(logger.Printer, m.method, TraceTitleColorCode(m.method))
|
||||
}
|
||||
|
||||
fmt.Fprint(logger.Printer, ")\n")
|
||||
}
|
||||
|
||||
for i, m := range methodRoutes {
|
||||
for _, r := range m.routes {
|
||||
r.Trace(logger.Printer, -1)
|
||||
}
|
||||
|
||||
if i != len(allMethods)-1 {
|
||||
logger.Printer.Write(pio.NewLine)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -562,6 +562,14 @@ func (r *Route) Trace(w io.Writer, stoppedIndex int) {
|
||||
file, line = context.HandlerFileLineRel(h)
|
||||
// If a middleware, e.g (macro) which changes the main handler index,
|
||||
// skip it.
|
||||
|
||||
// TODO: think of it.
|
||||
if file == "<autogenerated>" {
|
||||
// At PartyConfigure, 2nd+ level of routes it will get <autogenerated> but in reallity will be the same as the caller.
|
||||
file = r.RegisterFileName
|
||||
line = r.RegisterLineNumber
|
||||
}
|
||||
|
||||
if file == r.SourceFileName && line == r.SourceLineNumber {
|
||||
continue
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user