Initial commit: stats-gateway gRPC service + dashboard + CLI

This commit is contained in:
2026-05-05 21:04:32 +05:00
commit 4059e94759
44 changed files with 2513 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
package cmd
import (
"context"
"crypto/tls"
"flag"
"fmt"
"io"
"log"
"os"
"time"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
statsv1 "github.com/bergabruh/stats-gateway/gen/stats/v1"
)
func Recent(args []string) {
fs := flag.NewFlagSet("recent", flag.ExitOnError)
server := fs.String("server", "stats.projectshitpost.fun:443", "gRPC endpoint host:port")
node := fs.String("node", "", "fl|pl1 (empty = both)")
limit := fs.Int("limit", 20, "max samples (1..1000)")
since := fs.String("since", "", "RFC3339 lower bound (optional)")
timeout := fs.Duration("timeout", 10*time.Second, "")
fs.Parse(args)
conn, err := grpc.NewClient(*server,
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatalf("dial: %v", err)
}
defer conn.Close()
client := statsv1.NewSpeedStatusClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), *timeout)
defer cancel()
stream, err := client.RecentResults(ctx, &statsv1.Filter{
Node: *node,
Limit: int32(*limit),
Since: *since,
})
if err != nil {
log.Fatalf("RecentResults: %v", err)
}
count := 0
for {
s, err := stream.Recv()
if err == io.EOF {
break
}
if err != nil {
fmt.Fprintf(os.Stderr, "recv: %v\n", err)
os.Exit(1)
}
fmt.Printf("%s %-3s http=%6.1fms tls=%6.1fms tcp=%6.1fms dns=%5.1fms\n",
s.Timestamp, s.Node, s.HttpLatencyMs, s.TlsHandshakeMs, s.TcpRttMs, s.DnsResolveMs)
count++
}
if count == 0 {
fmt.Fprintln(os.Stderr, "(no samples)")
}
}