github.com/kuoss/venti@v0.2.20/pkg/service/service.go (about)

     1  package service
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/kuoss/common/logger"
     8  	"github.com/kuoss/venti/pkg/model"
     9  	"github.com/kuoss/venti/pkg/service/alerting"
    10  	"github.com/kuoss/venti/pkg/service/alertrule"
    11  	"github.com/kuoss/venti/pkg/service/dashboard"
    12  	"github.com/kuoss/venti/pkg/service/datasource"
    13  	"github.com/kuoss/venti/pkg/service/discovery"
    14  	"github.com/kuoss/venti/pkg/service/discovery/kubernetes"
    15  	"github.com/kuoss/venti/pkg/service/remote"
    16  	"github.com/kuoss/venti/pkg/service/status"
    17  	"github.com/kuoss/venti/pkg/service/user"
    18  )
    19  
    20  type Services struct {
    21  	*alertrule.AlertRuleService
    22  	*dashboard.DashboardService
    23  	*datasource.DatasourceService
    24  	*remote.RemoteService
    25  	*status.StatusService
    26  	*user.UserService
    27  	*alerting.AlertingService
    28  }
    29  
    30  func NewServices(cfg *model.Config) (*Services, error) {
    31  	// alertrule
    32  	alertRuleService, err := alertrule.New("")
    33  	if err != nil {
    34  		return nil, fmt.Errorf("new alertRuleService err: %w", err)
    35  	}
    36  
    37  	// dashboard
    38  	logger.Debugf("new dashboard Service...")
    39  	dashboardService, err := dashboard.New("etc/dashboards")
    40  	if err != nil {
    41  		return nil, fmt.Errorf("new dashboardService err: %w", err)
    42  	}
    43  
    44  	// datasource
    45  	var discoverer discovery.Discoverer
    46  	if cfg.DatasourceConfig.Discovery.Enabled {
    47  		discoverer, err = kubernetes.NewK8sService()
    48  		if err != nil {
    49  			return nil, fmt.Errorf("new k8sService err: %w", err)
    50  		}
    51  	}
    52  	datasourceService, err := datasource.New(&cfg.DatasourceConfig, discoverer)
    53  	if err != nil {
    54  		return nil, fmt.Errorf("new datasourceService err: %w", err)
    55  	}
    56  
    57  	// remote
    58  	remoteService := remote.New(&http.Client{}, cfg.DatasourceConfig.QueryTimeout)
    59  
    60  	// status
    61  	statusService, err := status.New(cfg)
    62  	if err != nil {
    63  		return nil, fmt.Errorf("new statusService err: %w", err)
    64  	}
    65  
    66  	// user
    67  	userService, err := user.New("./data/venti.sqlite3", cfg.UserConfig)
    68  	if err != nil {
    69  		return nil, fmt.Errorf("NewUserService err: %w", err)
    70  	}
    71  
    72  	// alerting
    73  	alertingService := alerting.New(cfg, alertRuleService.GetAlertRuleFiles(), datasourceService, remoteService)
    74  
    75  	return &Services{
    76  		alertRuleService,
    77  		dashboardService,
    78  		datasourceService,
    79  		remoteService,
    80  		statusService,
    81  		userService,
    82  		alertingService,
    83  	}, nil
    84  }