/
info.go
59 lines (57 loc) · 1.2 KB
/
info.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package docker
import (
"io/ioutil"
"log"
"net/http"
"regexp"
"strings"
"time"
)
func GetCreateTime(dockerRegistry string, image string, tag string, user string, pass string) (string, error) {
httpClient := &http.Client{}
url := "https://" + dockerRegistry + "/v2/" + image + "/manifests/" + tag
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return "", err
}
req.SetBasicAuth(user, pass)
var resp *http.Response
var failed bool
backOffTime := backOffStart
for i := 1; i <= backOffSteps; i++ {
resp, err = httpClient.Do(req)
defer resp.Body.Close()
if err != nil {
failed = true
log.Print("error HTTP GET", url, "retry", string(i))
if i != backOffSteps {
time.Sleep(time.Duration(backOffTime) * time.Millisecond)
}
backOffTime *= i
} else {
failed = false
break
}
}
if failed == true {
return "", err
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
r, err := regexp.Compile("(created.+Z)")
if err != nil {
return "", err
}
created := r.FindAll(body, 999)
var tsmax string
for _, c := range created {
cs := strings.Split(string(c), "\"")
ts := cs[2]
if ts > tsmax {
tsmax = ts
}
}
return tsmax, nil
}