Skip to content

Commit

Permalink
EgressInfo helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
frostbyte73 committed Nov 8, 2024
1 parent 3c72d65 commit 36e4f53
Showing 1 changed file with 85 additions and 0 deletions.
85 changes: 85 additions & 0 deletions livekit/livekit_egress.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package livekit

import (
"errors"
"fmt"
"net/http"
"time"

"github.com/livekit/psrpc"
)

const (
MsgBackupUsed = "At least one file went to backup storage"
MsgLimitReached = "Session limit reached"
MsgStartNotReceived = "Start signal not received"
MsgLimitReachedWithoutStart = "Session limit reached before start signal"
MsgStoppedBeforeStarted = "Stop called before pipeline could start"

EndReasonAPI = "StopEgress API"
EndReasonKilled = "Process killed"
EndReasonSrcClosed = "Source closed"
EndReasonLimitReached = "Session limit reached"
EndReasonStreamsStopped = "All streams stopped"
EndReasonFailure = "Failure"
)

func (e *EgressInfo) UpdateStatus(status EgressStatus) {
e.Status = status
e.UpdatedAt = time.Now().UnixNano()
}

func (e *EgressInfo) SetBackupUsed() {
e.Status = EgressStatus_EGRESS_FAILED
e.UpdatedAt = time.Now().UnixNano()
e.Error = MsgBackupUsed
e.ErrorCode = int32(http.StatusPermanentRedirect)
}

func (e *EgressInfo) SetEndReason(reason string) {
e.Details = fmt.Sprintf("End reason: %s", reason)
}

func (e *EgressInfo) SetLimitReached() {
now := time.Now().UnixNano()
e.Status = EgressStatus_EGRESS_LIMIT_REACHED
e.Error = MsgLimitReached
e.ErrorCode = int32(http.StatusRequestEntityTooLarge)
e.UpdatedAt = now
e.EndedAt = now
}

func (e *EgressInfo) SetAborted(msg string) {
now := time.Now().UnixNano()
e.Status = EgressStatus_EGRESS_ABORTED
e.Error = msg
e.ErrorCode = int32(http.StatusPreconditionFailed)
e.UpdatedAt = now
e.EndedAt = now
}

func (e *EgressInfo) SetFailed(err error) {
now := time.Now().UnixNano()
e.Status = EgressStatus_EGRESS_FAILED
e.UpdatedAt = now
e.EndedAt = now
e.Error = err.Error()
if e.Details == "" {
e.SetEndReason(EndReasonFailure)
}

var p psrpc.Error
if errors.As(err, &p) {
// unknown is treated the same as an internal error (500)
if !errors.Is(p.Code(), psrpc.Unknown) {
e.ErrorCode = int32(p.ToHttp())
}
}
}

func (e *EgressInfo) SetComplete() {
now := time.Now().UnixNano()
e.Status = EgressStatus_EGRESS_COMPLETE
e.UpdatedAt = now
e.EndedAt = now
}

0 comments on commit 36e4f53

Please sign in to comment.