iot_server/internal/hummingbird/core/main.go

63 lines
2.4 KiB
Go

/*******************************************************************************
* Copyright 2017 Dell Inc.
* Copyright (c) 2019 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*******************************************************************************/
package core
import (
"context"
"github.com/gin-gonic/gin"
"github.com/winc-link/hummingbird/internal/hummingbird/core/bootstrap/database"
"github.com/winc-link/hummingbird/internal/hummingbird/core/config"
"github.com/winc-link/hummingbird/internal/hummingbird/core/container"
"github.com/winc-link/hummingbird/internal/hummingbird/core/initialize"
"github.com/winc-link/hummingbird/internal/hummingbird/core/route"
"github.com/winc-link/hummingbird/internal/pkg/bootstrap"
"github.com/winc-link/hummingbird/internal/pkg/constants"
"github.com/winc-link/hummingbird/internal/pkg/di"
"github.com/winc-link/hummingbird/internal/pkg/flags"
"github.com/winc-link/hummingbird/internal/pkg/handlers"
pkghandlers "github.com/winc-link/hummingbird/internal/pkg/handlers"
"github.com/winc-link/hummingbird/internal/pkg/startup"
"os"
)
func Main(ctx context.Context, cancel context.CancelFunc, router *gin.Engine) {
f := flags.New()
f.Parse(os.Args[1:])
configuration := &config.ConfigurationStruct{}
di.GContainer = di.NewContainer(di.ServiceConstructorMap{
container.ConfigurationName: func(get di.Get) interface{} {
return configuration
},
})
startupTimer := startup.NewStartUpTimer(constants.CoreServiceKey)
bootstrap.Run(
ctx,
cancel,
f,
constants.CoreServiceKey,
constants.ConfigStemCore+constants.ConfigMajorVersion,
configuration,
startupTimer,
di.GContainer,
[]handlers.BootstrapHandler{
database.NewDatabase(configuration).BootstrapHandler,
initialize.NewBootstrap(router).BootstrapHandler,
pkghandlers.NewHttpServer(router, true).BootstrapHandler,
route.NewWebBootstrap().BootstrapHandler,
})
}