config.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package monitor
  2. import (
  3. "time"
  4. "github.com/gofiber/fiber/v2"
  5. )
  6. // Config defines the config for middleware.
  7. type Config struct {
  8. // Metrics page title
  9. //
  10. // Optional. Default: "Fiber Monitor"
  11. Title string
  12. // Refresh period
  13. //
  14. // Optional. Default: 3 seconds
  15. Refresh time.Duration
  16. // Whether the service should expose only the monitoring API.
  17. //
  18. // Optional. Default: false
  19. APIOnly bool
  20. // Next defines a function to skip this middleware when returned true.
  21. //
  22. // Optional. Default: nil
  23. Next func(c *fiber.Ctx) bool
  24. // Custom HTML Code to Head Section(Before End)
  25. //
  26. // Optional. Default: empty
  27. CustomHead string
  28. // FontURL for specify font resource path or URL . also you can use relative path
  29. //
  30. // Optional. Default: https://fonts.googleapis.com/css2?family=Roboto:wght@400;900&display=swap
  31. FontURL string
  32. // ChartJsURL for specify ChartJS library path or URL . also you can use relative path
  33. //
  34. // Optional. Default: https://cdn.jsdelivr.net/npm/chart.js@2.9/dist/Chart.bundle.min.js
  35. ChartJsURL string // TODO: Rename to "ChartJSURL" in v3
  36. index string
  37. }
  38. var ConfigDefault = Config{
  39. Title: defaultTitle,
  40. Refresh: defaultRefresh,
  41. FontURL: defaultFontURL,
  42. ChartJsURL: defaultChartJSURL,
  43. CustomHead: defaultCustomHead,
  44. APIOnly: false,
  45. Next: nil,
  46. index: newIndex(viewBag{
  47. defaultTitle,
  48. defaultRefresh,
  49. defaultFontURL,
  50. defaultChartJSURL,
  51. defaultCustomHead,
  52. }),
  53. }
  54. func configDefault(config ...Config) Config {
  55. // Users can change ConfigDefault.Title/Refresh which then
  56. // become incompatible with ConfigDefault.index
  57. if ConfigDefault.Title != defaultTitle ||
  58. ConfigDefault.Refresh != defaultRefresh ||
  59. ConfigDefault.FontURL != defaultFontURL ||
  60. ConfigDefault.ChartJsURL != defaultChartJSURL ||
  61. ConfigDefault.CustomHead != defaultCustomHead {
  62. if ConfigDefault.Refresh < minRefresh {
  63. ConfigDefault.Refresh = minRefresh
  64. }
  65. // update default index with new default title/refresh
  66. ConfigDefault.index = newIndex(viewBag{
  67. ConfigDefault.Title,
  68. ConfigDefault.Refresh,
  69. ConfigDefault.FontURL,
  70. ConfigDefault.ChartJsURL,
  71. ConfigDefault.CustomHead,
  72. })
  73. }
  74. // Return default config if nothing provided
  75. if len(config) < 1 {
  76. return ConfigDefault
  77. }
  78. // Override default config
  79. cfg := config[0]
  80. // Set default values
  81. if cfg.Title == "" {
  82. cfg.Title = ConfigDefault.Title
  83. }
  84. if cfg.Refresh == 0 {
  85. cfg.Refresh = ConfigDefault.Refresh
  86. }
  87. if cfg.FontURL == "" {
  88. cfg.FontURL = defaultFontURL
  89. }
  90. if cfg.ChartJsURL == "" {
  91. cfg.ChartJsURL = defaultChartJSURL
  92. }
  93. if cfg.Refresh < minRefresh {
  94. cfg.Refresh = minRefresh
  95. }
  96. if cfg.Next == nil {
  97. cfg.Next = ConfigDefault.Next
  98. }
  99. if !cfg.APIOnly {
  100. cfg.APIOnly = ConfigDefault.APIOnly
  101. }
  102. // update cfg.index with custom title/refresh
  103. cfg.index = newIndex(viewBag{
  104. title: cfg.Title,
  105. refresh: cfg.Refresh,
  106. fontURL: cfg.FontURL,
  107. chartJSURL: cfg.ChartJsURL,
  108. customHead: cfg.CustomHead,
  109. })
  110. return cfg
  111. }