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.

71 lines
1.3 KiB

  1. package config
  2. import (
  3. "fmt"
  4. "time"
  5. "alrm/alarm"
  6. )
  7. type Config struct {
  8. Groups map[string]*Group
  9. Alarms map[string]alarm.Alarm
  10. Interval time.Duration
  11. }
  12. func NewConfig() *Config {
  13. return &Config{
  14. // Default check interval, 30 seconds
  15. Interval: time.Second * 30,
  16. }
  17. }
  18. func (c *Config) NewAlarm(name string, typename string) (alarm.Alarm, error) {
  19. if c.Alarms == nil {
  20. c.Alarms = make(map[string]alarm.Alarm)
  21. }
  22. if _, exists := c.Alarms[name]; exists {
  23. return nil, fmt.Errorf("alarm %s already exists", name)
  24. }
  25. a, err := alarm.NewAlarm(name, typename)
  26. if err != nil {
  27. return nil, err
  28. }
  29. c.Alarms[name] = a
  30. return a, nil
  31. }
  32. func (c *Config) NewGroup(name string) (*Group, error) {
  33. if c.Groups == nil {
  34. c.Groups = make(map[string]*Group)
  35. }
  36. if _, exists := c.Groups[name]; exists {
  37. return nil, fmt.Errorf("group %s already exists", name)
  38. }
  39. group := &Group{Name: name}
  40. c.Groups[name] = group
  41. return group, nil
  42. }
  43. func (c *Config) SetInterval(val string) error {
  44. interval, err := time.ParseDuration(val)
  45. if err != nil {
  46. return err
  47. }
  48. c.Interval = interval
  49. return nil
  50. }
  51. func ReadConfig(fn string, debuglvl int) (*Config, error) {
  52. parser := &Parser{DebugLevel: debuglvl}
  53. config, err := parser.Parse(fn)
  54. if err != nil {
  55. return nil, err
  56. }
  57. return config, nil
  58. }