Browse Source

Add a bit of sanity to the stream health messages

pull/1819/head
Gabe Kangas 4 years ago
parent
commit
2a6bebfb2a
No known key found for this signature in database
GPG Key ID: 9A56337728BC81EA
  1. 41
      metrics/healthOverview.go
  2. 11
      utils/utils_test.go

41
metrics/healthOverview.go

@ -11,8 +11,9 @@ import (
) )
const ( const (
healthyPercentageValue = 75 healthyPercentageValue = 75
maxCPUUsage = 90 maxCPUUsage = 90
minClientCountForDetails = 3
) )
// GetStreamHealthOverview will return the stream health overview. // GetStreamHealthOverview will return the stream health overview.
@ -37,9 +38,10 @@ func generateStreamHealthOverview() {
// Determine what percentage of total players are represented in our overview. // Determine what percentage of total players are represented in our overview.
totalPlayerCount := len(core.GetActiveViewers()) totalPlayerCount := len(core.GetActiveViewers())
representation := utils.IntPercentage(len(windowedBandwidths), totalPlayerCount) if totalPlayerCount > 0 && len(windowedBandwidths) > 0 {
overview.Representation = representation representation := utils.IntPercentage(len(windowedBandwidths), totalPlayerCount)
overview.Representation = representation
}
metrics.streamHealthOverview = overview metrics.streamHealthOverview = overview
} }
@ -152,20 +154,29 @@ func errorCountHealthOverview() *models.StreamHealthOverview {
return nil return nil
} }
healthyPercentage := 100 - utils.IntPercentage(clientsWithErrors, totalNumberOfClients) // Only return these detailed values and messages if we feel we have enough
message := fmt.Sprintf("%d of %d clients (%d%%) are experiencing different, unspecified, playback issues.", clientsWithErrors, totalNumberOfClients, healthyPercentage) // 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 if totalNumberOfClients >= minClientCountForDetails {
outputVariants := data.GetStreamOutputVariants() healthyPercentage := utils.IntPercentage(clientsWithErrors, totalNumberOfClients)
for _, variant := range outputVariants { message = fmt.Sprintf("%d of %d clients (%d%%) may be experiencing some issues.", clientsWithErrors, totalNumberOfClients, healthyPercentage)
if variant.IsVideoPassthrough {
isUsingPassthrough = true isUsingPassthrough := false
outputVariants := data.GetStreamOutputVariants()
for _, variant := range outputVariants {
if variant.IsVideoPassthrough {
isUsingPassthrough = true
}
} }
}
if isUsingPassthrough { 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) 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{ return &models.StreamHealthOverview{
Healthy: healthyPercentage > healthyPercentageValue, Healthy: healthyPercentage > healthyPercentageValue,
Message: message, Message: message,

11
utils/utils_test.go

@ -30,3 +30,14 @@ func TestGetHashtagsFromText(t *testing.T) {
t.Error("Incorrect hashtags fetched from text.") 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.")
}
}

Loading…
Cancel
Save