package main import ( "assetcenter/api" "assetcenter/bus" "assetcenter/conf" "assetcenter/db" "assetcenter/log" "flag" "fmt" "time" "go.uber.org/dig" "infish.cn/comm" ) var confFile = flag.String("conf", "./app.yaml", "conf file") var appPort = flag.Int("port", 0, "conf app port") var appNatsUrl = flag.String("nats", "", "conf nats url") var saverHost = flag.String("minio", "", "conf minio host url") func BuildApp() *dig.Container { app := dig.New() _ = app.Provide(func() (*conf.AppConf, error) { ret, err := conf.NewAppConf(*confFile) if len(*appNatsUrl) > 0 { ret.Nats.Url = *appNatsUrl } if *appPort > 0 { ret.Port = int32(*appPort) } if len(*saverHost) > 0 { ret.Minio.Endpoint = *saverHost } ret.TrimLocalUrl = "//" + ret.Minio.Endpoint + "/" return ret, err }) _ = app.Provide(db.NewMongoDB) _ = app.Provide(db.NewRedisClient) _ = app.Provide(bus.NewNatsBus) // _ = app.Provide(func(app *conf.AppConf) (*etcd.Cli, error) { // return etcd.NewEtcdCli(&etcd.CliConfig{ // Endpoints: app.Etcd.Endpoints, // UserName: app.Etcd.UserName, // Password: app.Etcd.Password, // DialTimeout: time.Second * time.Duration(app.Etcd.DialTimeout), // }) // }) // repository //_ = app.Provide(repository.NewExecuteSnapshotRepository) // _ = app.Provide(bus.NewEventBus) // _ = app.Provide(collector.NewPinkCollector) // _ = app.Provide(executor.NewPinkGroupManaged) // _ = app.Provide(executor.NewPinkExecutor) // _ = app.Provide(schedule.NewPinkScheduler) // _ = app.Provide(node.NewPinkNode) // _ = app.Provide(handler.NewPinkWebHandler) _ = app.Provide(api.NewHttpService) return app } func main() { flag.Parse() app := BuildApp() err := app.Invoke(func(svc *api.Service, config *conf.AppConf, bus *comm.NatsBus) error { go bus.Run(nil) go func() { time.Sleep(time.Second) fmt.Println("assetcenter started") }() svc.Run() return nil }) if err != nil { log.Errorf("the pink service start fail %+v", err) panic(err) } }