* TP-49403 | parameterized slash command * TP-49403 | handeling resolve and rca params also implemented Help-Commands button * TP-49403 | using command pattern for command resolutiuon and execution * TP-49403 | made find team by name and find severity by name queries case insensitive * TP-49403 | updating help message keys
131 lines
3.1 KiB
Go
131 lines
3.1 KiB
Go
package appcontext
|
|
|
|
import (
|
|
"github.com/slack-go/slack/socketmode"
|
|
"github.com/spf13/viper"
|
|
"gorm.io/gorm"
|
|
"houston/model/incident"
|
|
"houston/model/log"
|
|
"houston/model/severity"
|
|
"houston/model/tag"
|
|
"houston/model/team"
|
|
"houston/pkg/postgres"
|
|
incidentService "houston/service/incident"
|
|
"houston/service/slack"
|
|
)
|
|
|
|
type applicationContext struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// todo: all the repo objects to be cleaned uo from here. appContext will only have services
|
|
type houstonServices struct {
|
|
logRepo *log.Repository
|
|
teamRepo *team.Repository
|
|
severityRepo *severity.Repository
|
|
incidentRepo *incident.Repository
|
|
slackService *slack.SlackService
|
|
incidentService *incidentService.IncidentServiceV2
|
|
tagRepo *tag.Repository
|
|
}
|
|
|
|
var appContext *applicationContext
|
|
var services *houstonServices
|
|
|
|
func InitiateContext() {
|
|
appContext = &applicationContext{
|
|
db: initDB(),
|
|
}
|
|
}
|
|
|
|
func InitializeServices() {
|
|
logRepo := initLogRepo()
|
|
severityRepo := initSeverityRepo()
|
|
teamRepo := initTeamRepo(logRepo)
|
|
slaService := initSlackService()
|
|
services = &houstonServices{
|
|
logRepo: logRepo,
|
|
teamRepo: teamRepo,
|
|
severityRepo: severityRepo,
|
|
incidentRepo: initIncidentRepo(severityRepo, logRepo, teamRepo, slaService.SocketModeClient),
|
|
slackService: slaService,
|
|
incidentService: initIncidentService(),
|
|
tagRepo: initTagRepo(),
|
|
}
|
|
}
|
|
|
|
func initDB() *gorm.DB {
|
|
return postgres.NewGormClient(
|
|
viper.GetString("postgres.dsn"),
|
|
viper.GetString("postgres.connection.max.idle.time"),
|
|
viper.GetString("postgres.connection.max.lifetime"),
|
|
viper.GetInt("postgres.connections.max.idle"),
|
|
viper.GetInt("postgres.connections.max.open"),
|
|
)
|
|
}
|
|
|
|
func GetDB() *gorm.DB {
|
|
return appContext.db
|
|
}
|
|
|
|
func initLogRepo() *log.Repository {
|
|
return log.NewLogRepository(GetDB())
|
|
}
|
|
|
|
func GetLogRepo() *log.Repository {
|
|
return services.logRepo
|
|
}
|
|
|
|
func initTeamRepo(logRepo *log.Repository) *team.Repository {
|
|
return team.NewTeamRepository(GetDB(), logRepo)
|
|
}
|
|
|
|
func GetTeamRepo() *team.Repository {
|
|
return services.teamRepo
|
|
}
|
|
|
|
func initSeverityRepo() *severity.Repository {
|
|
return severity.NewSeverityRepository(GetDB())
|
|
}
|
|
|
|
func GetSeverityRepo() *severity.Repository {
|
|
return services.severityRepo
|
|
}
|
|
|
|
func initIncidentRepo(
|
|
severityRepo *severity.Repository,
|
|
logRepo *log.Repository,
|
|
teamRepo *team.Repository,
|
|
socketModeClient *socketmode.Client,
|
|
) *incident.Repository {
|
|
return incident.NewIncidentRepository(GetDB(), severityRepo, logRepo, teamRepo, socketModeClient)
|
|
}
|
|
|
|
func GetIncidentRepo() *incident.Repository {
|
|
return services.incidentRepo
|
|
}
|
|
|
|
func initSlackService() *slack.SlackService {
|
|
return slack.NewSlackService()
|
|
}
|
|
|
|
func GetSlackService() *slack.SlackService {
|
|
return services.slackService
|
|
}
|
|
|
|
func initIncidentService() *incidentService.IncidentServiceV2 {
|
|
return incidentService.NewIncidentServiceV2(GetDB())
|
|
}
|
|
|
|
func GetIncidentService() *incidentService.IncidentServiceV2 {
|
|
return services.incidentService
|
|
}
|
|
|
|
func initTagRepo() *tag.Repository {
|
|
return tag.NewTagRepository(GetDB())
|
|
}
|
|
|
|
func GetTagRepo() *tag.Repository {
|
|
return services.tagRepo
|
|
}
|