Refactor MTProxy checker to support multiple DC probing with enhanced timeout handling. Update README and Docker documentation to include new -dc-ids flag for sequential DC checks, clarify exit codes, and improve error reporting for each DC. Adjust logic in checkOneLine and related functions to aggregate results from multiple DCs, ensuring robust performance and clearer output.
Publish mtproxy_checker Docker image / test (push) Successful in 6s
Publish mtproxy_checker Docker image / build-and-push (push) Successful in 53s

This commit is contained in:
Denozordec
2026-04-11 15:12:08 +07:00
parent a846ef5373
commit 24a7315a16
6 changed files with 245 additions and 53 deletions
+36
View File
@@ -0,0 +1,36 @@
// Package dclist parses comma-separated Telegram DC ids (int16).
package dclist
import (
"fmt"
"strconv"
"strings"
)
// ParseList parses "1,2,5" or "2". Empty string returns (nil, nil) — caller uses single-DC default.
func ParseList(s string) ([]int16, error) {
s = strings.TrimSpace(s)
if s == "" {
return nil, nil
}
parts := strings.Split(s, ",")
out := make([]int16, 0, len(parts))
for _, p := range parts {
p = strings.TrimSpace(p)
if p == "" {
continue
}
v, err := strconv.ParseInt(p, 10, 16)
if err != nil {
return nil, fmt.Errorf("dc id %q: %w", p, err)
}
if v < -32768 || v > 32767 {
return nil, fmt.Errorf("dc id %d out of int16 range", v)
}
out = append(out, int16(v))
}
if len(out) == 0 {
return nil, fmt.Errorf("empty dc list after parsing %q", s)
}
return out, nil
}
+24
View File
@@ -0,0 +1,24 @@
package dclist
import (
"reflect"
"testing"
)
func TestParseList(t *testing.T) {
got, err := ParseList("")
if err != nil || got != nil {
t.Fatalf("empty: got %v err %v", got, err)
}
got, err = ParseList(" 1 , 2 , 5 ")
if err != nil || !reflect.DeepEqual(got, []int16{1, 2, 5}) {
t.Fatalf("1,2,5: got %v err %v", got, err)
}
got, err = ParseList("-1")
if err != nil || !reflect.DeepEqual(got, []int16{-1}) {
t.Fatalf("-1: got %v err %v", got, err)
}
if _, err := ParseList("foo"); err == nil {
t.Fatal("expected error")
}
}