80 lines
3.3 KiB
Go
80 lines
3.3 KiB
Go
package houston
|
|
|
|
import (
|
|
"fmt"
|
|
"houston/entity"
|
|
"houston/pkg/postgres/query"
|
|
|
|
"github.com/slack-go/slack"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func SummarySection(incidentEntity *entity.IncidentEntity) []slack.Block {
|
|
return []slack.Block{
|
|
buildSummaryHeader(incidentEntity.Title),
|
|
buildTypeAndChannelSectionBlock(incidentEntity, "", ""),
|
|
buildSeverityAndTicketSectionBlock(incidentEntity),
|
|
buildStatusAndMeetingSectionBlock(incidentEntity),
|
|
}
|
|
}
|
|
|
|
func IncidentSummarySection(incidentEntity *entity.IncidentEntity, db *gorm.DB) ([]slack.Block, error) {
|
|
teamEntity, err := query.FindTeamById(db, incidentEntity.TeamsId)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error in searching team with id: %d, err: %v", incidentEntity.TeamsId, err)
|
|
}
|
|
|
|
severityEntity, err := query.FindSeverityById(db, incidentEntity.SeverityId)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error in searching severity with id: %d, err: %v", incidentEntity.SeverityId, err)
|
|
}
|
|
return []slack.Block{
|
|
buildTypeAndChannelSectionBlock(incidentEntity, teamEntity.Name, severityEntity.Name),
|
|
}, nil
|
|
}
|
|
|
|
func buildSummaryHeader(incidentTitle string) *slack.SectionBlock {
|
|
headerText := slack.NewTextBlockObject("plain_text", incidentTitle, true, true)
|
|
headerSection := slack.NewSectionBlock(headerText, nil, nil)
|
|
|
|
return headerSection
|
|
}
|
|
|
|
func buildTypeAndChannelSectionBlock(incidentEntity *entity.IncidentEntity, teamName, severityName string) *slack.SectionBlock {
|
|
fields := []*slack.TextBlockObject{
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*<@%s>* \n*%s* - *%s*\n", incidentEntity.CreatedBy, incidentEntity.IncidentName, incidentEntity.Title), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", "\n", false, false),
|
|
slack.NewTextBlockObject("mrkdwn", incidentEntity.Description, false, false),
|
|
slack.NewTextBlockObject("mrkdwn", "\n", false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Type*\n%s", teamName), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Channel*\n<#%s>", incidentEntity.SlackChannel), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Severity*\n%s", severityName), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Ticket*\n%s", "Integration Disabled"), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Status*\n%s", incidentEntity.Status), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Meeting*\n%s", "Integration Disabled"), false, false),
|
|
}
|
|
block := slack.NewSectionBlock(nil, fields, nil)
|
|
|
|
return block
|
|
}
|
|
|
|
func buildSeverityAndTicketSectionBlock(incidentEntity *entity.IncidentEntity) *slack.SectionBlock {
|
|
fields := []*slack.TextBlockObject{
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Severity*\n%d", incidentEntity.SeverityId), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Ticket*\n%s", "integration disabled"), false, false),
|
|
}
|
|
block := slack.NewSectionBlock(nil, fields, nil)
|
|
|
|
return block
|
|
}
|
|
|
|
func buildStatusAndMeetingSectionBlock(incidentEntity *entity.IncidentEntity) *slack.SectionBlock {
|
|
fields := []*slack.TextBlockObject{
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Status*\n%s", incidentEntity.Status), false, false),
|
|
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Meeting*\n%s", "integration disabled"), false, false),
|
|
}
|
|
block := slack.NewSectionBlock(nil, fields, nil)
|
|
|
|
return block
|
|
}
|