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.

86 lines
1.6 KiB

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