@@ -44,11 +44,29 @@ func (hc *HTTPConnector) Connect() error {
44
44
hc .client .DisableAllowGetMethodPayload ()
45
45
// hc.client.EnableDumpAllWithoutRequestBody()
46
46
47
- type resp_data struct {
47
+ result := struct {
48
48
Token string `json:"token"`
49
- }
50
- result := & resp_data {}
51
- resp , err := hc .request ().SetSuccessResult (result ).Post (hc .URL ("/connect" ))
49
+ }{}
50
+
51
+ req := hc .request ().
52
+ SetSuccessResult (& result ).
53
+ SetRetryCount (3 ).
54
+ SetRetryFixedInterval (1 * time .Second ).
55
+ SetRetryCondition (func (r * req.Response , err error ) bool {
56
+ if Debug {
57
+ log .Printf ("-- retrying %s -> %d, token %s" , r .Request .URL , r .StatusCode , hc .printer .Token )
58
+ }
59
+
60
+ // token expired
61
+ if r .StatusCode == 403 && hc .printer .Token != "" {
62
+ hc .printer .Token = ""
63
+ // reconnect with no token to get new one
64
+ return true
65
+ }
66
+ return false
67
+ })
68
+
69
+ resp , err := req .Post (hc .URL ("/connect" ))
52
70
if err != nil {
53
71
return err
54
72
}
@@ -72,11 +90,13 @@ func (hc *HTTPConnector) Connect() error {
72
90
return fmt .Errorf ("access denied" )
73
91
}
74
92
}
75
- } else if resp .StatusCode == 403 && hc .printer .Token != "" {
76
- // token expired
77
- hc .printer .Token = ""
78
- // reconnect with no token to get new one
79
- return hc .Connect ()
93
+ /*
94
+ } else if resp.StatusCode == 403 && hc.printer.Token != "" {
95
+ // token expired
96
+ hc.printer.Token = ""
97
+ // reconnect with no token to get new one
98
+ return hc.Connect()
99
+ */
80
100
}
81
101
82
102
return fmt .Errorf ("connect error %d" , resp .StatusCode )
@@ -90,45 +110,48 @@ func (hc *HTTPConnector) Disconnect() (err error) {
90
110
}
91
111
92
112
func (hc * HTTPConnector ) Upload (fname string , content []byte ) (err error ) {
93
- finished := make (chan bool , 1 )
113
+ finished := make (chan empty , 1 )
94
114
defer func () {
95
- finished <- true
115
+ finished <- empty {}
96
116
}()
97
117
go func () {
98
- ticker := time .NewTicker (3 * time .Second )
118
+ ticker := time .NewTicker (1 * time .Second )
99
119
for {
100
120
select {
101
121
case <- ticker .C :
102
122
hc .checkStatus ()
103
123
case <- finished :
124
+ if Debug {
125
+ log .Printf ("-- heartbeat stopped" )
126
+ }
104
127
ticker .Stop ()
105
128
return
106
129
}
107
130
}
108
131
}()
109
132
133
+ w := uilive .New ()
134
+ w .Start ()
135
+ log .SetOutput (w )
136
+ defer func () {
137
+ w .Stop ()
138
+ log .SetOutput (os .Stderr )
139
+ }()
140
+
110
141
file := req.FileUpload {
111
142
ParamName : "file" ,
112
143
FileName : fname ,
113
144
GetFileContent : func () (io.ReadCloser , error ) {
114
- return io .NopCloser (bytes .NewReader (content )), nil
145
+ return io .NopCloser (bytes .NewBuffer (content )), nil
115
146
},
116
- FileSize : int64 (len (content )),
147
+ FileSize : int64 (len (content )),
148
+ ContentType : "application/octet-stream" ,
117
149
}
118
-
119
- w := uilive .New ()
120
- w .Start ()
121
- defer w .Stop ()
122
- req := hc .request (0 ).SetFileUpload (file ).SetUploadCallback (func (info req.UploadInfo ) {
123
- log .SetOutput (w )
124
- defer log .SetOutput (os .Stderr )
125
-
126
- perc := float64 (info .UploadedSize ) / float64 (info .FileSize ) * 100.0
150
+ req := hc .request (0 ).SetFileUpload (file ).SetUploadCallbackWithInterval (func (info req.UploadInfo ) {
151
+ perc := float64 (info .UploadedSize / info .FileSize ) * 100.0
127
152
log .Printf (" - HTTP sending %.1f%%" , perc )
128
- })
153
+ }, 35 * time . Millisecond )
129
154
130
- // disable chucked to make Content-Length
131
- // req.DisableForceChunkedEncoding()
132
155
_ , err = req .Post (hc .URL ("/upload" ))
133
156
return
134
157
}
@@ -150,6 +173,9 @@ func (hc *HTTPConnector) request(timeout ...int) *req.Request {
150
173
151
174
func (hc * HTTPConnector ) checkStatus () (status int ) {
152
175
r , err := hc .request ().Get (hc .URL ("/status" ))
176
+ if Debug {
177
+ log .Printf ("-- heartbeat: %d, err(%s)" , r .StatusCode , err )
178
+ }
153
179
if err == nil {
154
180
switch r .StatusCode {
155
181
case 200 :
0 commit comments