A simple monitoring solution written in Go (work in progress)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
933 B

  1. package alarm
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. const (
  7. TK_NONE = iota
  8. TK_TO
  9. TK_SMTP
  10. TK_FROM
  11. )
  12. type AlarmEmail struct {
  13. Type string
  14. Name string
  15. From string
  16. SMTP string
  17. To []string
  18. state int
  19. }
  20. func NewAlarmEmail(name string) *AlarmEmail {
  21. return &AlarmEmail{
  22. Type: "email", Name: name,
  23. }
  24. }
  25. func (a *AlarmEmail) Alarm() error {
  26. fmt.Printf("email alarm")
  27. return nil
  28. }
  29. func (a *AlarmEmail) Parse(tk string) (bool, error) {
  30. switch a.state {
  31. case TK_NONE:
  32. switch strings.ToLower(tk){
  33. case "to":
  34. a.state = TK_TO
  35. case "from":
  36. a.state = TK_FROM
  37. case "smtp":
  38. a.state = TK_SMTP
  39. default:
  40. return false, nil
  41. }
  42. case TK_FROM:
  43. a.From = tk
  44. a.state = TK_NONE
  45. case TK_SMTP:
  46. a.SMTP = tk
  47. a.state = TK_NONE
  48. case TK_TO:
  49. a.To = append(a.To, tk)
  50. a.state = TK_NONE
  51. default:
  52. return false, fmt.Errorf("invalid state in alarm_email")
  53. }
  54. return true, nil
  55. }