Compare commits
3 Commits
89601096ba
...
57eb194efa
| Author | SHA1 | Date | |
|---|---|---|---|
|
57eb194efa
|
|||
|
4cbdd41b7c
|
|||
|
79891d178f
|
+1
-1
@@ -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 {
|
||||||
|
|||||||
+24
-17
@@ -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
|
for percentage >= 1 {
|
||||||
|
percentage *= 0.5
|
||||||
if count <= 100 {
|
|
||||||
routines = count
|
|
||||||
} else {
|
|
||||||
percentage = float32(runtime.NumCPU()) * 0.075
|
|
||||||
for percentage >= 1 {
|
|
||||||
percentage *= 0.5
|
|
||||||
}
|
|
||||||
routines = int(float32(count) * percentage)
|
|
||||||
}
|
}
|
||||||
if routines > 500 {
|
|
||||||
routines = 500
|
routines := int(float32(count) * percentage)
|
||||||
|
if routines > 1500 {
|
||||||
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user