func convertService(global *ConfigFile, inqsvc *ast.ProcessCheck) (*Service, error) { rules := make([]*Rule, len(inqsvc.Rules)) storage := metrics.NewProcessStore("/proc", global.CycleTime) svc := &Service{&Entity{inqsvc.Name, nil, storage, inqsvc.Parameters}, nil, services.NewStatus(), nil} action, err := BuildAction(global, svc, &ast.SimpleAction{ActionName: "alert"}) if err != nil { return nil, err } svc.EventHandler = action for idx, rule := range inqsvc.Rules { rule, err := convertRule(global, svc, rule) if err != nil { return nil, err } util.DebugDebug("Rule: %+v", *rule) rules[idx] = rule } svc.rules = rules for _, r := range rules { _, err := storage.AddSource(r.MetricFamily, svc.Parameters()) if err != nil { return nil, err } err = storage.Watch(r.MetricFamily, r.MetricName) if err != nil { return nil, err } util.Debug("Watching %s:%s", r.MetricFamily, r.MetricName) } if len(inqsvc.Exposed) > 0 { err := BuildExpose(global, svc, inqsvc.Exposed, inqsvc.Parameters) if err != nil { return nil, err } } err = storage.Prepare() if err != nil { return nil, err } return svc, nil }
func NewService(name string) *Service { return &Service{&Entity{name, nil, metrics.NewProcessStore("/proc", 15), nil}, nil, services.NewStatus(), nil} }