diff --git a/tracker.go b/tracker.go index 8c37f5a..b47ffbe 100644 --- a/tracker.go +++ b/tracker.go @@ -321,6 +321,16 @@ func (t *Tracker) createClose(w http.ResponseWriter, r *http.Request) { t.internalServerError("cannot insert file_on record", err, r, w) return } + row = tx.QueryRow("select h.hostip, d.read_port "+ + "from device d join host h on h.hostid=d.hostid "+ + "where d.devid=?", devid) + var hostip string + var httpPort int64 + err = row.Scan(&hostip, &httpPort) + if err != nil { + t.internalServerError("cannot select host ip", err, r, w) + return + } err = tx.Commit() if err != nil { t.internalServerError("cannot commit transaction", err, r, w) @@ -329,6 +339,10 @@ func (t *Tracker) createClose(w http.ResponseWriter, r *http.Request) { if olddevids != nil { go t.publishDeleteTask(olddevids, oldfid) } + var response CreateClose + response.Path = fmt.Sprintf("http://%s:%d/dev%d/%s", hostip, httpPort, devid, vivify(fid)) + encoder := json.NewEncoder(w) + encoder.Encode(response) // nolint: errcheck } func (t *Tracker) deleteFile(w http.ResponseWriter, r *http.Request) { diff --git a/tracker_test.go b/tracker_test.go index ac60914..a8b7e6f 100644 --- a/tracker_test.go +++ b/tracker_test.go @@ -121,7 +121,7 @@ func TestCreateClose(t *testing.T) { if err != nil { t.Fatal(err) } - _, err = tr.db.Exec("insert into device(devid, status, hostid) values(2, 'alive', 1)") + _, err = tr.db.Exec("insert into device(devid, status, hostid, read_port) values(2, 'alive', 1, 5678)") if err != nil { t.Fatal(err) } @@ -140,10 +140,15 @@ func TestCreateClose(t *testing.T) { t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) } - expected := "" - if rr.Body.String() != expected { - t.Errorf("handler returned unexpected body: got %v want %v", - rr.Body.String(), expected) + var resp CreateClose + err = json.Unmarshal(rr.Body.Bytes(), &resp) + if err != nil { + t.Fatal(err) + } + expected := "http://1.2.3.4:5678/dev2/0/000/000/0000000009.fid" + if resp.Path != expected { + t.Errorf("handler returned unexpected path: got %v want %v", + resp.Path, expected) } } @@ -170,7 +175,7 @@ func TestCreateCloseOverwrite(t *testing.T) { t.Fatal(err) } - _, err = tr.db.Exec("insert into device(devid, status, hostid) values(3, 'alive', 1)") + _, err = tr.db.Exec("insert into device(devid, status, hostid, read_port) values(3, 'alive', 1, 5678)") if err != nil { t.Fatal(err) } @@ -189,10 +194,15 @@ func TestCreateCloseOverwrite(t *testing.T) { t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) } - expected := "" - if rr.Body.String() != expected { - t.Errorf("handler returned unexpected body: got %v want %v", - rr.Body.String(), expected) + var resp CreateClose + err = json.Unmarshal(rr.Body.Bytes(), &resp) + if err != nil { + t.Fatal(err) + } + expected := "http://1.2.3.4:5678/dev3/0/000/000/0000000009.fid" + if resp.Path != expected { + t.Errorf("handler returned unexpected path: got %v want %v", + resp.Path, expected) } } diff --git a/trackerapi.go b/trackerapi.go index 7d20ced..3145fcf 100644 --- a/trackerapi.go +++ b/trackerapi.go @@ -10,6 +10,10 @@ type CreateOpen struct { Fid int64 `json:"fid"` } +type CreateClose struct { + Path string `json:"path"` +} + type GetDevices struct { Devices []Device `json:"devices"` }