1
1
package upstream_update
2
2
3
3
import (
4
- "archive/tar"
5
4
"bytes"
6
5
"compress/gzip"
7
6
"flag"
8
7
"fmt"
9
8
"io"
10
9
"io/ioutil"
11
- "log"
12
10
"net"
13
11
"net/http"
14
12
"os"
@@ -38,7 +36,7 @@ const (
38
36
portRangeEnd = 20100 // exporter web interface listening port
39
37
40
38
repeatCount = 5
41
- scrapesCount = 20
39
+ scrapesCount = 50
42
40
)
43
41
44
42
var doRun = flag .Bool ("doRun" , false , "" )
@@ -75,12 +73,7 @@ func TestPerformance(t *testing.T) {
75
73
original = doTestStats (t , repeatCount , scrapesCount , "../percona/postgres_exporter_percona" )
76
74
})
77
75
78
- fmt .Println ()
79
- fmt .Println (" \t old\t new\t diff" )
80
- fmt .Printf ("CPU\t %.1f\t %.1f\t %+.0f%%\n " , original .meanMs , updated .meanMs , calculatePerc (original .meanMs , updated .meanMs ))
81
- fmt .Printf ("HWM \t %.1f\t %.1f\t %+.0f%%\n " , original .meanHwm , updated .meanHwm , calculatePerc (original .meanHwm , updated .meanHwm ))
82
- fmt .Printf ("DATA\t %.1f\t %.1f\t %+.0f%%\n " , original .meanData , updated .meanData , calculatePerc (original .meanData , updated .meanData ))
83
- fmt .Println ()
76
+ printStats (original , updated )
84
77
}
85
78
86
79
func calculatePerc (base , updated float64 ) float64 {
@@ -91,97 +84,6 @@ func calculatePerc(base, updated float64) float64 {
91
84
return diffPerc
92
85
}
93
86
94
- // TestPrepareExporters extracts exporter from client binary's tar.gz
95
- func TestPrepareUpdatedExporter (t * testing.T ) {
96
- if doRun == nil || ! * doRun {
97
- t .Skip ("For manual runs only through make" )
98
- return
99
- }
100
-
101
- if url == nil || * url == "" {
102
- t .Error ("URL not defined" )
103
- return
104
- }
105
-
106
- prepareExporter (* url , "postgres_exporter" )
107
- }
108
-
109
- // TestPrepareExporters extracts exporter from client binary's tar.gz
110
- func TestPreparePerconaExporter (t * testing.T ) {
111
- if doRun == nil || ! * doRun {
112
- t .Skip ("For manual runs only through make" )
113
- return
114
- }
115
-
116
- if url == nil || * url == "" {
117
- t .Error ("URL not defined" )
118
- return
119
- }
120
-
121
- prepareExporter (* url , "postgres_exporter_percona" )
122
- }
123
-
124
- func prepareExporter (url , fileName string ) {
125
- resp , err := http .Get (url )
126
- if err != nil {
127
- log .Fatal (err )
128
- }
129
-
130
- defer resp .Body .Close ()
131
-
132
- extractExporter (resp .Body , fileName )
133
-
134
- err = exec .Command ("chmod" , "+x" , fileName ).Run ()
135
- if err != nil {
136
- log .Fatal (err )
137
- }
138
- }
139
-
140
- func extractExporter (gzipStream io.Reader , fileName string ) {
141
- uncompressedStream , err := gzip .NewReader (gzipStream )
142
- if err != nil {
143
- log .Fatal ("ExtractTarGz: NewReader failed" )
144
- }
145
-
146
- tarReader := tar .NewReader (uncompressedStream )
147
-
148
- exporterFound := false
149
- for ! exporterFound {
150
- header , err := tarReader .Next ()
151
-
152
- if err == io .EOF {
153
- break
154
- }
155
-
156
- if err != nil {
157
- log .Fatalf ("ExtractTarGz: Next() failed: %s" , err .Error ())
158
- }
159
-
160
- switch header .Typeflag {
161
- case tar .TypeDir :
162
- continue
163
- case tar .TypeReg :
164
- if strings .HasSuffix (header .Name , "postgres_exporter" ) {
165
- outFile , err := os .Create (fileName )
166
- if err != nil {
167
- log .Fatalf ("ExtractTarGz: Create() failed: %s" , err .Error ())
168
- }
169
- defer outFile .Close ()
170
- if _ , err := io .Copy (outFile , tarReader ); err != nil {
171
- log .Fatalf ("ExtractTarGz: Copy() failed: %s" , err .Error ())
172
- }
173
-
174
- exporterFound = true
175
- }
176
- default :
177
- log .Fatalf (
178
- "ExtractTarGz: uknown type: %d in %s" ,
179
- header .Typeflag ,
180
- header .Name )
181
- }
182
- }
183
- }
184
-
185
87
func doTestStats (t * testing.T , cnt int , size int , fileName string ) * StatsData {
186
88
var durations []float64
187
89
var hwms []float64
@@ -401,6 +303,15 @@ func getCPUTime(pid int) (total int64) {
401
303
return
402
304
}
403
305
306
+ func printStats (original , updated * StatsData ) {
307
+ fmt .Println ()
308
+ fmt .Println (" \t old\t new\t diff" )
309
+ fmt .Printf ("CPU, ms \t %.1f\t %.1f\t %+.0f%%\n " , original .meanMs , updated .meanMs , calculatePerc (original .meanMs , updated .meanMs ))
310
+ fmt .Printf ("HWM, kB \t %.1f\t %.1f\t %+.0f%%\n " , original .meanHwm , updated .meanHwm , calculatePerc (original .meanHwm , updated .meanHwm ))
311
+ fmt .Printf ("DATA, kB\t %.1f\t %.1f\t %+.0f%%\n " , original .meanData , updated .meanData , calculatePerc (original .meanData , updated .meanData ))
312
+ fmt .Println ()
313
+ }
314
+
404
315
func tryGetMetrics (port int ) error {
405
316
uri := fmt .Sprintf ("http://127.0.0.1:%d/metrics" , port )
406
317
client := new (http.Client )
0 commit comments