Browse Source

Merge pull request #15082 from roidelapluie/notifystart

Notify web UI when starting up and shutting down
pull/15096/head
Julien 2 months ago committed by GitHub
parent
commit
023146e918
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 11
      cmd/prometheus/main.go
  2. 4
      util/notifications/notifications.go
  3. 2
      util/notifications/notifications_test.go
  4. 10
      web/api/v1/api.go
  5. 6
      web/web.go

11
cmd/prometheus/main.go

@ -76,9 +76,9 @@ import (
"github.com/prometheus/prometheus/tsdb/wlog"
"github.com/prometheus/prometheus/util/documentcli"
"github.com/prometheus/prometheus/util/logging"
"github.com/prometheus/prometheus/util/notifications"
prom_runtime "github.com/prometheus/prometheus/util/runtime"
"github.com/prometheus/prometheus/web"
"github.com/prometheus/prometheus/web/api"
)
var (
@ -500,9 +500,10 @@ func main() {
logger := promlog.New(&cfg.promlogConfig)
notifs := api.NewNotifications(cfg.maxNotificationsSubscribers, prometheus.DefaultRegisterer)
notifs := notifications.NewNotifications(cfg.maxNotificationsSubscribers, prometheus.DefaultRegisterer)
cfg.web.NotificationsSub = notifs.Sub
cfg.web.NotificationsGetter = notifs.Get
notifs.AddNotification(notifications.StartingUp)
if err := cfg.setFeatureListOptions(logger); err != nil {
fmt.Fprintln(os.Stderr, fmt.Errorf("Error parsing feature list: %w", err))
@ -989,6 +990,7 @@ func main() {
func(err error) {
close(cancel)
webHandler.SetReady(web.Stopping)
notifs.AddNotification(notifications.ShuttingDown)
},
)
}
@ -1089,10 +1091,10 @@ func main() {
callback := func(success bool) {
if success {
notifs.DeleteNotification(api.ConfigurationUnsuccessful)
notifs.DeleteNotification(notifications.ConfigurationUnsuccessful)
return
}
notifs.AddNotification(api.ConfigurationUnsuccessful)
notifs.AddNotification(notifications.ConfigurationUnsuccessful)
}
g.Add(
@ -1174,6 +1176,7 @@ func main() {
reloadReady.Close()
webHandler.SetReady(web.Ready)
notifs.DeleteNotification(notifications.StartingUp)
level.Info(logger).Log("msg", "Server is ready to receive web requests.")
<-cancel
return nil

4
web/api/notifications.go → util/notifications/notifications.go

@ -11,7 +11,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package api
package notifications
import (
"sync"
@ -22,6 +22,8 @@ import (
const (
ConfigurationUnsuccessful = "Configuration reload has failed."
StartingUp = "Prometheus is starting and replaying the write-ahead log (WAL)."
ShuttingDown = "Prometheus is shutting down and gracefully stopping all operations."
)
// Notification represents an individual notification message.

2
web/api/notifications_test.go → util/notifications/notifications_test.go

@ -11,7 +11,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package api
package notifications
import (
"sync"

10
web/api/v1/api.go

@ -54,8 +54,8 @@ import (
"github.com/prometheus/prometheus/tsdb/index"
"github.com/prometheus/prometheus/util/annotations"
"github.com/prometheus/prometheus/util/httputil"
"github.com/prometheus/prometheus/util/notifications"
"github.com/prometheus/prometheus/util/stats"
"github.com/prometheus/prometheus/web/api"
)
type status string
@ -214,8 +214,8 @@ type API struct {
gatherer prometheus.Gatherer
isAgent bool
statsRenderer StatsRenderer
notificationsGetter func() []api.Notification
notificationsSub func() (<-chan api.Notification, func(), bool)
notificationsGetter func() []notifications.Notification
notificationsSub func() (<-chan notifications.Notification, func(), bool)
remoteWriteHandler http.Handler
remoteReadHandler http.Handler
@ -249,8 +249,8 @@ func NewAPI(
corsOrigin *regexp.Regexp,
runtimeInfo func() (RuntimeInfo, error),
buildInfo *PrometheusVersion,
notificationsGetter func() []api.Notification,
notificationsSub func() (<-chan api.Notification, func(), bool),
notificationsGetter func() []notifications.Notification,
notificationsSub func() (<-chan notifications.Notification, func(), bool),
gatherer prometheus.Gatherer,
registerer prometheus.Registerer,
statsRenderer StatsRenderer,

6
web/web.go

@ -59,7 +59,7 @@ import (
"github.com/prometheus/prometheus/template"
"github.com/prometheus/prometheus/util/httputil"
"github.com/prometheus/prometheus/util/netconnlimit"
"github.com/prometheus/prometheus/web/api"
"github.com/prometheus/prometheus/util/notifications"
api_v1 "github.com/prometheus/prometheus/web/api/v1"
"github.com/prometheus/prometheus/web/ui"
)
@ -267,8 +267,8 @@ type Options struct {
RuleManager *rules.Manager
Notifier *notifier.Manager
Version *PrometheusVersion
NotificationsGetter func() []api.Notification
NotificationsSub func() (<-chan api.Notification, func(), bool)
NotificationsGetter func() []notifications.Notification
NotificationsSub func() (<-chan notifications.Notification, func(), bool)
Flags map[string]string
ListenAddresses []string

Loading…
Cancel
Save