Add a bit of sanity to the stream health messages

This commit is contained in:
Gabe Kangas 2022-04-07 00:14:23 -07:00
parent 422ae35e67
commit 2a6bebfb2a
No known key found for this signature in database
GPG key ID: 9A56337728BC81EA
2 changed files with 37 additions and 15 deletions

View file

@ -11,8 +11,9 @@ import (
)
const (
healthyPercentageValue = 75
maxCPUUsage = 90
healthyPercentageValue = 75
maxCPUUsage = 90
minClientCountForDetails = 3
)
// GetStreamHealthOverview will return the stream health overview.
@ -37,9 +38,10 @@ func generateStreamHealthOverview() {
// Determine what percentage of total players are represented in our overview.
totalPlayerCount := len(core.GetActiveViewers())
representation := utils.IntPercentage(len(windowedBandwidths), totalPlayerCount)
overview.Representation = representation
if totalPlayerCount > 0 && len(windowedBandwidths) > 0 {
representation := utils.IntPercentage(len(windowedBandwidths), totalPlayerCount)
overview.Representation = representation
}
metrics.streamHealthOverview = overview
}
@ -152,20 +154,29 @@ func errorCountHealthOverview() *models.StreamHealthOverview {
return nil
}
healthyPercentage := 100 - utils.IntPercentage(clientsWithErrors, totalNumberOfClients)
message := fmt.Sprintf("%d of %d clients (%d%%) are experiencing different, unspecified, playback issues.", clientsWithErrors, totalNumberOfClients, healthyPercentage)
// Only return these detailed values and messages if we feel we have enough
// clients to be able to make a reasonable assessment. This is an arbitrary
// number but 1 out of 1 isn't helpful.
message := ""
healthyPercentage := 0
isUsingPassthrough := false
outputVariants := data.GetStreamOutputVariants()
for _, variant := range outputVariants {
if variant.IsVideoPassthrough {
isUsingPassthrough = true
if totalNumberOfClients >= minClientCountForDetails {
healthyPercentage := utils.IntPercentage(clientsWithErrors, totalNumberOfClients)
message = fmt.Sprintf("%d of %d clients (%d%%) may be experiencing some issues.", clientsWithErrors, totalNumberOfClients, healthyPercentage)
isUsingPassthrough := false
outputVariants := data.GetStreamOutputVariants()
for _, variant := range outputVariants {
if variant.IsVideoPassthrough {
isUsingPassthrough = true
}
}
if isUsingPassthrough {
message = fmt.Sprintf("%d of %d clients (%d%%) are experiencing errors. You're currently using a video passthrough output, often known for causing playback issues for people. It is suggested you turn it off.", clientsWithErrors, totalNumberOfClients, healthyPercentage)
}
}
if isUsingPassthrough {
message = fmt.Sprintf("%d of %d clients (%d%%) are experiencing errors. You're currently using a video passthrough output, often known for causing playback issues for people. It is suggested you turn it off.", clientsWithErrors, totalNumberOfClients, healthyPercentage)
}
return &models.StreamHealthOverview{
Healthy: healthyPercentage > healthyPercentageValue,
Message: message,

View file

@ -30,3 +30,14 @@ func TestGetHashtagsFromText(t *testing.T) {
t.Error("Incorrect hashtags fetched from text.")
}
}
func TestPercentageUtilsTest(t *testing.T) {
total := 42
number := 18
percent := IntPercentage(number, total)
if percent != 42 {
t.Error("Incorrect percentage calculation.")
}
}