3 Commits

2 changed files with 25 additions and 18 deletions

View File

@@ -13,7 +13,7 @@ import (
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
) )
const VERSION = "1.0.1" const VERSION = "1.0.2"
// Arguments описывает аргументы командной строки // Arguments описывает аргументы командной строки
type Arguments struct { type Arguments struct {

View File

@@ -18,6 +18,7 @@ import (
"io" "io"
"log" "log"
"maps" "maps"
"math"
"math/rand" "math/rand"
"net/http" "net/http"
"os" "os"
@@ -268,7 +269,6 @@ func CheckChannels(pls playlist.Playlist) playlist.Playlist {
select { select {
case tvChannel := <-chOnline: case tvChannel := <-chOnline:
tvChannel.IsOnline = true tvChannel.IsOnline = true
pls.OnlineCount++
pls.Channels[tvChannel.Id] = tvChannel pls.Channels[tvChannel.Id] = tvChannel
if app.Args.Verbose { if app.Args.Verbose {
log.Printf("[%.3d/%.3d] ONLINE '%s'\n", idx, count, tvChannel.Title) log.Printf("[%.3d/%.3d] ONLINE '%s'\n", idx, count, tvChannel.Title)
@@ -277,7 +277,6 @@ func CheckChannels(pls playlist.Playlist) playlist.Playlist {
log.Printf("> MimeType: %s\n", tvChannel.ContentType) log.Printf("> MimeType: %s\n", tvChannel.ContentType)
} }
case tvChannel := <-chOffline: case tvChannel := <-chOffline:
pls.OfflineCount++
pls.Channels[tvChannel.Id] = tvChannel pls.Channels[tvChannel.Id] = tvChannel
if app.Args.Verbose { if app.Args.Verbose {
log.Printf("[%.3d/%.3d] OFFLINE '%s'\n", idx, count, tvChannel.Title) log.Printf("[%.3d/%.3d] OFFLINE '%s'\n", idx, count, tvChannel.Title)
@@ -286,7 +285,6 @@ func CheckChannels(pls playlist.Playlist) playlist.Playlist {
log.Printf("> Status: %d\n", tvChannel.Status) log.Printf("> Status: %d\n", tvChannel.Status)
} }
case data := <-chError: case data := <-chError:
pls.OfflineCount++
pls.Channels[data.tvChannel.Id] = data.tvChannel pls.Channels[data.tvChannel.Id] = data.tvChannel
if app.Args.Verbose { if app.Args.Verbose {
log.Printf("[%.3d/%.3d] ERROR '%s'\n", idx, count, data.tvChannel.Title) log.Printf("[%.3d/%.3d] ERROR '%s'\n", idx, count, data.tvChannel.Title)
@@ -303,6 +301,14 @@ func CheckChannels(pls playlist.Playlist) playlist.Playlist {
close(chError) close(chError)
pls.CheckedAt = time.Now().Unix() pls.CheckedAt = time.Now().Unix()
for _, tvChannel := range pls.Channels {
if tvChannel.IsOnline {
pls.OnlineCount++
} else {
pls.OfflineCount++
}
}
log.Printf( log.Printf(
"Checked successfully! online=%d onlinePercent=%.2f%% offline=%d offlinePercent=%.2f%% elapsedTime=%.2fs", "Checked successfully! online=%d onlinePercent=%.2f%% offline=%d offlinePercent=%.2f%% elapsedTime=%.2fs",
pls.OnlineCount, pls.OnlineCount,
@@ -317,26 +323,27 @@ func CheckChannels(pls playlist.Playlist) playlist.Playlist {
// calcParameters вычисляет оптимальное количество горутин и таймаут запроса // calcParameters вычисляет оптимальное количество горутин и таймаут запроса
func calcParameters(count int) (time.Duration, int) { func calcParameters(count int) (time.Duration, int) {
var routines int percentage := float32(runtime.NumCPU()) / 10
var percentage float32
if count <= 100 {
routines = count
} else {
percentage = float32(runtime.NumCPU()) * 0.075
for percentage >= 1 { for percentage >= 1 {
percentage *= 0.5 percentage *= 0.5
} }
routines = int(float32(count) * percentage)
} routines := int(float32(count) * percentage)
if routines > 500 { if routines > 1500 {
routines = 500 routines = 1500
} }
if routines < 1 { if routines < 1 {
routines = 1 routines = 1
} }
timeout := 10 / float32(count) * 150 var digits int
x := count
for x >= 10 {
digits++
x /= 10
}
timeout := int(math.Ceil(math.Pow(10, float64(digits)) / float64(count) * 15))
if timeout > 10 { if timeout > 10 {
timeout = 10 timeout = 10
} }