@@ -47,6 +47,7 @@ type Interface interface {
4747type config struct {
4848 isSlackEnabled bool
4949 slackClient ee_slack.Interface
50+ appBaseUrl string
5051}
5152
5253type Option func (* config )
@@ -58,6 +59,12 @@ func WithSlackClient(slackClient ee_slack.Interface) Option {
5859 }
5960}
6061
62+ func WithAppBaseUrl (appBaseUrl string ) Option {
63+ return func (c * config ) {
64+ c .appBaseUrl = appBaseUrl
65+ }
66+ }
67+
6168func New (
6269 db * neosyncdb.NeosyncDb ,
6370 userdataclient userdata.Interface ,
@@ -685,7 +692,12 @@ func (s *Service) SendSlackMessage(
685692 return nil , fmt .Errorf ("unable to unmarshal event: %w" , err )
686693 }
687694
688- blocks := getSlackBlocksByEvent (event , logger )
695+ account , err := s .db .Q .GetAccount (ctx , s .db .Db , accountId )
696+ if err != nil {
697+ return nil , fmt .Errorf ("unable to get account: %w" , err )
698+ }
699+
700+ blocks := getSlackBlocksByEvent (event , s .cfg .appBaseUrl , account .AccountSlug , logger )
689701
690702 if len (blocks ) == 0 {
691703 logger .Warn ("received event that generated no slack blocks" )
@@ -701,7 +713,19 @@ func (s *Service) SendSlackMessage(
701713 return & mgmtv1alpha1.SendSlackMessageResponse {}, nil
702714}
703715
704- func getSlackBlocksByEvent (event * accounthook_events.Event , logger * slog.Logger ) []slack.Block {
716+ func buildJobIdUrlForSlack (appBaseUrl , accountName , jobId string ) string {
717+ return fmt .Sprintf ("<%s/jobs/%s|%s>" , buildAccountBaseUrl (appBaseUrl , accountName ), jobId , jobId )
718+ }
719+
720+ func buildJobRunUrlForSlack (appBaseUrl , accountName , jobRunId string ) string {
721+ return fmt .Sprintf ("<%s/runs/%s|%s>" , buildAccountBaseUrl (appBaseUrl , accountName ), jobRunId , jobRunId )
722+ }
723+
724+ func buildAccountBaseUrl (appBaseUrl , accountName string ) string {
725+ return fmt .Sprintf ("%s/%s" , appBaseUrl , accountName )
726+ }
727+
728+ func getSlackBlocksByEvent (event * accounthook_events.Event , appBaseUrl , accountName string , logger * slog.Logger ) []slack.Block {
705729 switch event .Name {
706730 case mgmtv1alpha1 .AccountHookEvent_ACCOUNT_HOOK_EVENT_JOB_RUN_CREATED :
707731 if event .JobRunCreated == nil {
@@ -713,9 +737,9 @@ func getSlackBlocksByEvent(event *accounthook_events.Event, logger *slog.Logger)
713737 headerSection := slack .NewHeaderBlock (headerText )
714738
715739 jobFields := []* slack.TextBlockObject {
716- slack .NewTextBlockObject (slack .MarkdownType , "*Job ID:*\n " + event .JobRunCreated .JobId , false , false ),
717- slack .NewTextBlockObject (slack .MarkdownType , "*Job Run ID:*\n " + event .JobRunCreated .JobRunId , false , false ),
718- slack .NewTextBlockObject (slack .MarkdownType , "*Started At:*\n <!date^" + fmt . Sprint ( event . Timestamp . Unix ()) + " ^{date_short_pretty} at {time}|" + event .Timestamp .Format (time .RFC3339 )+ ">" , false , false ),
740+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Job ID:*\n %s" , buildJobIdUrlForSlack ( appBaseUrl , accountName , event .JobRunCreated .JobId )) , false , false ),
741+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Job Run ID:*\n %s" , buildJobRunUrlForSlack ( appBaseUrl , accountName , event .JobRunCreated .JobRunId )) , false , false ),
742+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Started At:*\n <!date^%d ^{date_short_pretty} at {time}|%s>" , event .Timestamp .Unix (), event . Timestamp . Format (time .RFC3339 )) , false , false ),
719743 }
720744 fieldsSection := slack .NewSectionBlock (nil , jobFields , nil )
721745
@@ -739,9 +763,9 @@ func getSlackBlocksByEvent(event *accounthook_events.Event, logger *slog.Logger)
739763 headerSection := slack .NewHeaderBlock (headerText )
740764
741765 jobFields := []* slack.TextBlockObject {
742- slack .NewTextBlockObject (slack .MarkdownType , "*Job ID:*\n " + event .JobRunFailed .JobId , false , false ),
743- slack .NewTextBlockObject (slack .MarkdownType , "*Job Run ID:*\n " + event .JobRunFailed .JobRunId , false , false ),
744- slack .NewTextBlockObject (slack .MarkdownType , "*Failed At:*\n <!date^" + fmt . Sprint ( event . Timestamp . Unix ()) + " ^{date_short_pretty} at {time}|" + event .Timestamp .Format (time .RFC3339 )+ ">" , false , false ),
766+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Job ID:*\n %s" , buildJobIdUrlForSlack ( appBaseUrl , accountName , event .JobRunFailed .JobId )) , false , false ),
767+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Job Run ID:*\n %s" , buildJobRunUrlForSlack ( appBaseUrl , accountName , event .JobRunFailed .JobRunId )) , false , false ),
768+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Failed At:*\n <!date^%d ^{date_short_pretty} at {time}|%s>" , event .Timestamp .Unix (), event . Timestamp . Format (time .RFC3339 )) , false , false ),
745769 }
746770 fieldsSection := slack .NewSectionBlock (nil , jobFields , nil )
747771
@@ -765,9 +789,9 @@ func getSlackBlocksByEvent(event *accounthook_events.Event, logger *slog.Logger)
765789 headerSection := slack .NewHeaderBlock (headerText )
766790
767791 jobFields := []* slack.TextBlockObject {
768- slack .NewTextBlockObject (slack .MarkdownType , "*Job ID:*\n " + event .JobRunSucceeded .JobId , false , false ),
769- slack .NewTextBlockObject (slack .MarkdownType , "*Job Run ID:*\n " + event .JobRunSucceeded .JobRunId , false , false ),
770- slack .NewTextBlockObject (slack .MarkdownType , "*Succeeded At:*\n <!date^" + fmt . Sprint ( event . Timestamp . Unix ()) + " ^{date_short_pretty} at {time}|" + event .Timestamp .Format (time .RFC3339 )+ ">" , false , false ),
792+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Job ID:*\n %s" , buildJobIdUrlForSlack ( appBaseUrl , accountName , event .JobRunSucceeded .JobId )) , false , false ),
793+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Job Run ID:*\n %s" , buildJobRunUrlForSlack ( appBaseUrl , accountName , event .JobRunSucceeded .JobRunId )) , false , false ),
794+ slack .NewTextBlockObject (slack .MarkdownType , fmt . Sprintf ( "*Succeeded At:*\n <!date^%d ^{date_short_pretty} at {time}|%s>" , event .Timestamp .Unix (), event . Timestamp . Format (time .RFC3339 )) , false , false ),
771795 }
772796 fieldsSection := slack .NewSectionBlock (nil , jobFields , nil )
773797
0 commit comments