event.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package guerrilla
  2. import (
  3. evbus "github.com/asaskevich/EventBus"
  4. )
  5. type Event int
  6. const (
  7. // when a new config was loaded
  8. EventConfigNewConfig Event = iota
  9. // when allowed_hosts changed
  10. EventConfigAllowedHosts
  11. // when pid_file changed
  12. EventConfigPidFile
  13. // when log_file changed
  14. EventConfigLogFile
  15. // when it's time to reload the main log file
  16. EventConfigLogReopen
  17. // when log level changed
  18. EventConfigLogLevel
  19. // when the backend's config changed
  20. EventConfigBackendConfig
  21. // when a new server was added
  22. EventConfigServerNew
  23. // when an existing server was removed
  24. EventConfigServerRemove
  25. // when a new server config was detected (general event)
  26. EventConfigServerConfig
  27. // when a server was enabled
  28. EventConfigServerStart
  29. // when a server was disabled
  30. EventConfigServerStop
  31. // when a server's log file changed
  32. EventConfigServerLogFile
  33. // when it's time to reload the server's log
  34. EventConfigServerLogReopen
  35. // when a server's timeout changed
  36. EventConfigServerTimeout
  37. // when a server's max clients changed
  38. EventConfigServerMaxClients
  39. // when a server's TLS config changed
  40. EventConfigServerTLSConfig
  41. )
  42. var eventList = [...]string{
  43. "config_change:new_config",
  44. "config_change:allowed_hosts",
  45. "config_change:pid_file",
  46. "config_change:log_file",
  47. "config_change:reopen_log_file",
  48. "config_change:log_level",
  49. "config_change:backend_config",
  50. "server_change:new_server",
  51. "server_change:remove_server",
  52. "server_change:update_config",
  53. "server_change:start_server",
  54. "server_change:stop_server",
  55. "server_change:new_log_file",
  56. "server_change:reopen_log_file",
  57. "server_change:timeout",
  58. "server_change:max_clients",
  59. "server_change:tls_config",
  60. }
  61. func (e Event) String() string {
  62. return eventList[e]
  63. }
  64. type EventHandler struct {
  65. evbus.Bus
  66. }
  67. func (h *EventHandler) Subscribe(topic Event, fn interface{}) error {
  68. if h.Bus == nil {
  69. h.Bus = evbus.New()
  70. }
  71. return h.Bus.Subscribe(topic.String(), fn)
  72. }
  73. func (h *EventHandler) Publish(topic Event, args ...interface{}) {
  74. h.Bus.Publish(topic.String(), args...)
  75. }
  76. func (h *EventHandler) Unsubscribe(topic Event, handler interface{}) error {
  77. return h.Bus.Unsubscribe(topic.String(), handler)
  78. }