Skip to content

Commit 34b1b7f

Browse files
committed
Add channel removed failed reason
1 parent 738ca23 commit 34b1b7f

File tree

4 files changed

+20
-14
lines changed

4 files changed

+20
-14
lines changed

core/models/msgs.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,14 @@ const (
7878
type MsgFailedReason null.String
7979

8080
const (
81-
NilMsgFailedReason = MsgFailedReason("")
82-
MsgFailedSuspended = MsgFailedReason("S") // workspace suspended
83-
MsgFailedContact = MsgFailedReason("C") // contact blocked, stopped or archived
84-
MsgFailedLooping = MsgFailedReason("L")
85-
MsgFailedErrorLimit = MsgFailedReason("E")
86-
MsgFailedTooOld = MsgFailedReason("O")
87-
MsgFailedNoDestination = MsgFailedReason("D")
81+
NilMsgFailedReason = MsgFailedReason("")
82+
MsgFailedSuspended = MsgFailedReason("S") // workspace suspended
83+
MsgFailedContact = MsgFailedReason("C") // contact blocked, stopped or archived
84+
MsgFailedLooping = MsgFailedReason("L")
85+
MsgFailedErrorLimit = MsgFailedReason("E")
86+
MsgFailedTooOld = MsgFailedReason("O")
87+
MsgFailedNoDestination = MsgFailedReason("D")
88+
MsgFailedChannelRemoved = MsgFailedReason("R")
8889
)
8990

9091
var unsendableToFailedReason = map[flows.UnsendableReason]MsgFailedReason{
@@ -1285,12 +1286,12 @@ WITH rows AS (
12851286
WHERE org_id = $1 AND direction = 'O' AND channel_id = $2 AND status IN ('P', 'Q', 'E')
12861287
LIMIT 1000
12871288
)
1288-
UPDATE msgs_msg SET status = 'F', modified_on = NOW() WHERE id IN (SELECT id FROM rows)`
1289+
UPDATE msgs_msg SET status = 'F', failed_reason = $3, modified_on = NOW() WHERE id IN (SELECT id FROM rows)`
12891290

1290-
func FailChannelMessages(ctx context.Context, db Queryer, orgID OrgID, channelID ChannelID) error {
1291+
func FailChannelMessages(ctx context.Context, db Queryer, orgID OrgID, channelID ChannelID, failedReason MsgFailedReason) error {
12911292
for {
12921293
// and update the messages as FAILED
1293-
res, err := db.ExecContext(ctx, sqlFailChannelMessages, orgID, channelID)
1294+
res, err := db.ExecContext(ctx, sqlFailChannelMessages, orgID, channelID, failedReason)
12941295
if err != nil {
12951296
return err
12961297
}

core/models/msgs_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -505,13 +505,15 @@ func TestFailMessages(t *testing.T) {
505505
now := dates.Now()
506506

507507
// fail the msgs
508-
err := models.FailChannelMessages(ctx, db, testdata.Org1.ID, testdata.TwilioChannel.ID)
508+
err := models.FailChannelMessages(ctx, db, testdata.Org1.ID, testdata.TwilioChannel.ID, models.MsgFailedChannelRemoved)
509509
require.NoError(t, err)
510510

511511
//assert.Len(t, failedMsgs, 3)
512512

513513
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' AND modified_on > $1`, now).Returns(4)
514+
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' AND failed_reason = 'R' AND modified_on > $1`, now).Returns(4)
514515
assertdb.Query(t, db, `SELECT status FROM msgs_msg WHERE id = $1`, out3.ID()).Columns(map[string]interface{}{"status": "F"})
516+
assertdb.Query(t, db, `SELECT failed_reason FROM msgs_msg WHERE id = $1`, out3.ID()).Columns(map[string]interface{}{"failed_reason": nil})
515517

516518
}
517519

core/tasks/interrupts/interrupt_channel.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func (t *InterruptChannelTask) Perform(ctx context.Context, rt *runtime.Runtime,
4545
return errors.Wrapf(err, "error clearing courier queues")
4646
}
4747

48-
err = models.FailChannelMessages(ctx, db, orgID, t.ChannelID)
48+
err = models.FailChannelMessages(ctx, db, orgID, t.ChannelID, models.MsgFailedChannelRemoved)
4949
if err != nil {
5050
return errors.Wrapf(err, "error failing channel messages")
5151
}

core/tasks/interrupts/interrupt_channel_test.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func TestInterruptChannel(t *testing.T) {
4949
assertdb.Query(t, db, `SELECT status FROM flows_flowsession WHERE id = $1`, sessionID2).Returns("W")
5050
assertdb.Query(t, db, `SELECT status FROM flows_flowsession WHERE id = $1`, sessionID3).Returns("W")
5151

52+
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and failed_reason = 'R' and channel_id = $1`, testdata.VonageChannel.ID).Returns(0)
5253
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and channel_id = $1`, testdata.VonageChannel.ID).Returns(1)
5354
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and channel_id = $1`, testdata.TwilioChannel.ID).Returns(0)
5455

@@ -62,7 +63,8 @@ func TestInterruptChannel(t *testing.T) {
6263
assert.NoError(t, err)
6364

6465
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and channel_id = $1`, testdata.VonageChannel.ID).Returns(1)
65-
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and channel_id = $1`, testdata.TwilioChannel.ID).Returns(1)
66+
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and failed_reason = 'R' and channel_id = $1`, testdata.VonageChannel.ID).Returns(0)
67+
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and failed_reason = 'R' and channel_id = $1`, testdata.TwilioChannel.ID).Returns(1)
6668

6769
assertdb.Query(t, db, `SELECT status FROM flows_flowsession WHERE id = $1`, sessionID1).Returns("W")
6870
assertdb.Query(t, db, `SELECT status FROM flows_flowsession WHERE id = $1`, sessionID2).Returns("W")
@@ -92,8 +94,9 @@ func TestInterruptChannel(t *testing.T) {
9294
err = task.Perform(ctx, rt, testdata.Org1.ID)
9395
assert.NoError(t, err)
9496

97+
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and failed_reason = 'R' and channel_id = $1`, testdata.VonageChannel.ID).Returns(6)
9598
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and channel_id = $1`, testdata.VonageChannel.ID).Returns(7)
96-
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and channel_id = $1`, testdata.TwilioChannel.ID).Returns(1)
99+
assertdb.Query(t, db, `SELECT count(*) FROM msgs_msg WHERE status = 'F' and failed_reason = 'R' and channel_id = $1`, testdata.TwilioChannel.ID).Returns(1)
97100

98101
assertdb.Query(t, db, `SELECT status FROM flows_flowsession WHERE id = $1`, sessionID1).Returns("W")
99102
assertdb.Query(t, db, `SELECT status FROM flows_flowsession WHERE id = $1`, sessionID2).Returns("I")

0 commit comments

Comments
 (0)