88 "os"
99 "os/exec"
1010 "path"
11+ "regexp"
1112 "strconv"
1213 "strings"
1314 "time"
@@ -86,6 +87,25 @@ func checkZstd() error {
8687 return nil
8788}
8889
90+ func validResult (directory , filename string ) error {
91+ fullPath := path .Join (directory , filename )
92+ data , err := os .ReadFile (fullPath )
93+ if err != nil {
94+ return fmt .Errorf ("error reading %s: %w" , fullPath , err )
95+ }
96+ content := string (data )
97+
98+ // Match variants like:
99+ // [1763071200.038727] 64 bytes from 100.64.0.1: icmp_seq=1 ttl=63 time=33.1 ms
100+ // 64 bytes from 100.64.0.1: icmp_seq=1 ttl=63 time=33.1 ms
101+ re := regexp .MustCompile (`(?m)(?:\[\d+(?:\.\d+)?\]\s*)?\d+\s+bytes\s+from\s+[0-9a-fA-F:\.]+:.*\btime=[0-9.]+(?:\s*ms)?` )
102+ if re .FindStringIndex (content ) != nil {
103+ return nil
104+ }
105+
106+ return fmt .Errorf ("%s contains no valid ping results" , fullPath )
107+ }
108+
89109func compress (directory , filename string ) error {
90110 fullFilename := path .Join (directory , filename )
91111 fileInfo , err := os .Stat (fullFilename )
@@ -95,6 +115,9 @@ func compress(directory, filename string) error {
95115 if fileInfo .Size () == 0 {
96116 return fmt .Errorf ("%s is empty, skipping compression" , fullFilename )
97117 }
118+ if err := validResult (directory , filename ); err != nil {
119+ return fmt .Errorf ("no valid results in %s, skipping compression" , fullFilename )
120+ }
98121
99122 cmd := exec .Command ("tar" , "--zstd" , "-C" , directory , "-cf" , path .Join (directory , fmt .Sprintf ("%s.tar.zst" , filename )), filename , "--remove-files" )
100123 if err := checkZstd (); err != nil {
0 commit comments