HLS video handling/storage/state refactor (#151)
* WIP with new transcoder progress monitor * A whole different WIP in progress monitoring via local PUTs * Use an actual hls playlist parser to rewrite master playlist * Cleanup * Private vs public path for thumbnail generation * Allow each storage provider to make decisions of how to store different types of files * Simplify inbound file writes * Revert * Split out set stream as connected/disconnected state methods * Update videojs * Add comment about the hls handler * Rework of the offline stream state. For #85 * Delete old unreferenced video segment files from disk * Cleanup all segments and revert to a completely offline state after 5min * Stop thumbnail generation on stream stop. Copy logo to thumbnail on cleanup. * Update transcoder test * Add comment * Return http 200 on success to transcoder. Tweak how files are written to disk * Force pixel color format in transcoder * Add debugging info for S3 transfers. Add default ACL. * Fix cleanup timer * Reset session stats when we cleanup the session. * Put log file back * Update test * File should not be a part of this commit * Add centralized shared performance timer for use anywhere * Post-rebase cleanup * Support returning nil from storage provider save * Updates to reflect package changes + other updates in master * Fix storage providers being overwritten * Do not return pointer in save. Support cache headers with S3 providers * Split out videojs + vhs and point to specific working versions of them * Bump vjs and vhs versions * Fix test * Remove unused * Update upload warning message * No longer valid comment * Pin videojs and vhs versions
This commit is contained in:
50
utils/performanceTimer.go
Normal file
50
utils/performanceTimer.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"time"
|
||||
)
|
||||
|
||||
// The "start" timestamp of a timing event
|
||||
var _pointsInTime = make(map[string]time.Time)
|
||||
|
||||
// A collection of timestamp durations for returning the average of
|
||||
var _durationStorage = make(map[string][]float64)
|
||||
|
||||
// StartPerformanceMonitor will keep track of the start time of this event
|
||||
func StartPerformanceMonitor(key string) {
|
||||
if len(_durationStorage[key]) > 30 {
|
||||
_durationStorage[key] = removeHighAndLow(_durationStorage[key])
|
||||
}
|
||||
_pointsInTime[key] = time.Now()
|
||||
}
|
||||
|
||||
// GetAveragePerformance will return the average durations for the event
|
||||
func GetAveragePerformance(key string) float64 {
|
||||
timestamp := _pointsInTime[key]
|
||||
if timestamp.IsZero() {
|
||||
return 0
|
||||
}
|
||||
|
||||
delta := time.Since(timestamp).Seconds()
|
||||
_durationStorage[key] = append(_durationStorage[key], delta)
|
||||
if len(_durationStorage[key]) < 10 {
|
||||
return 0
|
||||
}
|
||||
_durationStorage[key] = removeHighAndLow(_durationStorage[key])
|
||||
return avg(_durationStorage[key])
|
||||
}
|
||||
|
||||
func removeHighAndLow(values []float64) []float64 {
|
||||
sort.Float64s(values)
|
||||
return values[1 : len(values)-1]
|
||||
}
|
||||
|
||||
func avg(values []float64) float64 {
|
||||
total := 0.0
|
||||
for _, number := range values {
|
||||
total = total + number
|
||||
}
|
||||
average := total / float64(len(values))
|
||||
return average
|
||||
}
|
||||
Reference in New Issue
Block a user