notify.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package notify
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. type Level string
  7. const (
  8. LevelInfo Level = "info"
  9. LevelWarn Level = "warn"
  10. LevelError Level = "error"
  11. )
  12. type Notifier interface {
  13. Notify(level Level, title, message string)
  14. NotifyThrottle(level Level, key string, expiration time.Duration, title, message string)
  15. }
  16. var (
  17. stdNotifier Notifier = &StdNotifier{}
  18. defaultNotifier = stdNotifier
  19. )
  20. func SetDefaultNotifier(notifier Notifier) {
  21. defaultNotifier = notifier
  22. }
  23. func Notify(level Level, title, message string) {
  24. defaultNotifier.Notify(level, title, message)
  25. }
  26. func Info(title, message string) {
  27. defaultNotifier.Notify(LevelInfo, title, message)
  28. }
  29. func Warn(title, message string) {
  30. defaultNotifier.Notify(LevelWarn, title, message)
  31. }
  32. func Error(title, message string) {
  33. defaultNotifier.Notify(LevelError, title, message)
  34. }
  35. func limitKey(level Level, key string) string {
  36. return fmt.Sprintf("notifylimit:%s:%s", level, key)
  37. }
  38. func Throttle(level Level, key string, expiration time.Duration, title, message string) {
  39. defaultNotifier.NotifyThrottle(level, limitKey(level, key), expiration, title, message)
  40. }
  41. func InfoThrottle(key string, expiration time.Duration, title, message string) {
  42. defaultNotifier.NotifyThrottle(LevelInfo, limitKey(LevelInfo, key), expiration, title, message)
  43. }
  44. func WarnThrottle(key string, expiration time.Duration, title, message string) {
  45. defaultNotifier.NotifyThrottle(LevelWarn, limitKey(LevelWarn, key), expiration, title, message)
  46. }
  47. func ErrorThrottle(key string, expiration time.Duration, title, message string) {
  48. defaultNotifier.NotifyThrottle(
  49. LevelError,
  50. limitKey(LevelError, key),
  51. expiration,
  52. title,
  53. message,
  54. )
  55. }