feat: add/create + delete api #5
This commit is contained in:
parent
46743ab279
commit
3bc6fb3d33
|
|
@ -39,8 +39,10 @@ func StartApi(a Api) {
|
||||||
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
})
|
})
|
||||||
r.HandleFunc("/devices", a.retrieveDevices)
|
r.HandleFunc("/devices", a.retrieveDevices).Methods("GET")
|
||||||
r.HandleFunc("/devices/{sn}/get", a.deviceGetMsg)
|
r.HandleFunc("/device/{sn}/get", a.deviceGetMsg).Methods("PUT")
|
||||||
|
r.HandleFunc("/device/{sn}/add", a.deviceCreateMsg).Methods("PUT")
|
||||||
|
r.HandleFunc("/device/{sn}/del", a.deviceDeleteMsg).Methods("PUT")
|
||||||
|
|
||||||
srv := &http.Server{
|
srv := &http.Server{
|
||||||
Addr: "0.0.0.0:" + a.Port,
|
Addr: "0.0.0.0:" + a.Port,
|
||||||
|
|
@ -74,34 +76,21 @@ func (a *Api) retrieveDevices(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Api) deviceGetMsg(w http.ResponseWriter, r *http.Request) {
|
func (a *Api) deviceCreateMsg(w http.ResponseWriter, r *http.Request) {
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
sn := vars["sn"]
|
sn := vars["sn"]
|
||||||
_, err := a.Db.RetrieveDevice(sn)
|
a.deviceExists(sn, w)
|
||||||
if err != nil {
|
|
||||||
if err == mongo.ErrNoDocuments {
|
var receiver usp_msg.Add
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
|
||||||
json.NewEncoder(w).Encode("No device with serial number " + sn + " was found")
|
err := json.NewDecoder(r.Body).Decode(&receiver)
|
||||||
return
|
|
||||||
}
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var receiver usp_msg.Get
|
|
||||||
//data := []byte(`{"param_paths": {'Device.DeviceInfo.'},"max_depth": 2}`)
|
|
||||||
//data := []byte("'opa'")
|
|
||||||
//var jsonBlob = []byte(`{
|
|
||||||
// "param_paths": ["Device.DeviceInfo.","Device.ManagementServer."],
|
|
||||||
// "max_depth": 2
|
|
||||||
//}`)
|
|
||||||
err = json.NewDecoder(r.Body).Decode(receiver)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := utils.NewGetMsg(receiver)
|
msg := utils.NewCreateMsg(receiver)
|
||||||
encodedMsg, err := proto.Marshal(&msg)
|
encodedMsg, err := proto.Marshal(&msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
|
|
@ -122,7 +111,7 @@ func (a *Api) deviceGetMsg(w http.ResponseWriter, r *http.Request) {
|
||||||
select {
|
select {
|
||||||
case msg := <-a.MsgQueue[msg.Header.MsgId]:
|
case msg := <-a.MsgQueue[msg.Header.MsgId]:
|
||||||
log.Printf("Received Msg")
|
log.Printf("Received Msg")
|
||||||
json.NewEncoder(w).Encode(msg)
|
json.NewEncoder(w).Encode(msg.Body.GetResponse().GetAddResp())
|
||||||
return
|
return
|
||||||
case <-time.After(time.Second * 5):
|
case <-time.After(time.Second * 5):
|
||||||
log.Printf("Request Timed Out")
|
log.Printf("Request Timed Out")
|
||||||
|
|
@ -131,3 +120,106 @@ func (a *Api) deviceGetMsg(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *Api) deviceGetMsg(w http.ResponseWriter, r *http.Request) {
|
||||||
|
vars := mux.Vars(r)
|
||||||
|
sn := vars["sn"]
|
||||||
|
|
||||||
|
a.deviceExists(sn, w)
|
||||||
|
|
||||||
|
var receiver usp_msg.Get
|
||||||
|
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&receiver)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := utils.NewGetMsg(receiver)
|
||||||
|
encodedMsg, err := proto.Marshal(&msg)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
record := utils.NewUspRecord(encodedMsg, sn)
|
||||||
|
tr369Message, err := proto.Marshal(&record)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("Failed to encode tr369 record:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
a.MsgQueue[msg.Header.MsgId] = make(chan usp_msg.Msg)
|
||||||
|
a.Broker.Publish(tr369Message, "oktopus/v1/agent/"+sn, "oktopus/v1/api/"+sn)
|
||||||
|
|
||||||
|
select {
|
||||||
|
case msg := <-a.MsgQueue[msg.Header.MsgId]:
|
||||||
|
log.Printf("Received Msg")
|
||||||
|
json.NewEncoder(w).Encode(msg.Body.GetResponse().GetGetResp())
|
||||||
|
return
|
||||||
|
case <-time.After(time.Second * 5):
|
||||||
|
log.Printf("Request Timed Out")
|
||||||
|
w.WriteHeader(http.StatusGatewayTimeout)
|
||||||
|
json.NewEncoder(w).Encode("Request Timed Out")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Api) deviceDeleteMsg(w http.ResponseWriter, r *http.Request) {
|
||||||
|
vars := mux.Vars(r)
|
||||||
|
sn := vars["sn"]
|
||||||
|
a.deviceExists(sn, w)
|
||||||
|
|
||||||
|
var receiver usp_msg.Delete
|
||||||
|
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&receiver)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := utils.NewDelMsg(receiver)
|
||||||
|
encodedMsg, err := proto.Marshal(&msg)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
record := utils.NewUspRecord(encodedMsg, sn)
|
||||||
|
tr369Message, err := proto.Marshal(&record)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("Failed to encode tr369 record:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//a.Broker.Request(tr369Message, usp_msg.Header_GET, "oktopus/v1/agent/"+sn, "oktopus/v1/get/"+sn)
|
||||||
|
a.MsgQueue[msg.Header.MsgId] = make(chan usp_msg.Msg)
|
||||||
|
a.Broker.Publish(tr369Message, "oktopus/v1/agent/"+sn, "oktopus/v1/api/"+sn)
|
||||||
|
|
||||||
|
select {
|
||||||
|
case msg := <-a.MsgQueue[msg.Header.MsgId]:
|
||||||
|
log.Printf("Received Msg")
|
||||||
|
json.NewEncoder(w).Encode(msg.Body.GetResponse().GetDeleteResp())
|
||||||
|
return
|
||||||
|
case <-time.After(time.Second * 5):
|
||||||
|
log.Printf("Request Timed Out")
|
||||||
|
w.WriteHeader(http.StatusGatewayTimeout)
|
||||||
|
json.NewEncoder(w).Encode("Request Timed Out")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Api) deviceExists(sn string, w http.ResponseWriter) {
|
||||||
|
_, err := a.Db.RetrieveDevice(sn)
|
||||||
|
if err != nil {
|
||||||
|
if err == mongo.ErrNoDocuments {
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
json.NewEncoder(w).Encode("No device with serial number " + sn + " was found")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,24 @@ func NewUspRecord(p []byte, toId string) usp_record.Record {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewCreateMsg(createStuff usp_msg.Add) usp_msg.Msg {
|
||||||
|
return usp_msg.Msg{
|
||||||
|
Header: &usp_msg.Header{
|
||||||
|
MsgId: uuid.NewString(),
|
||||||
|
MsgType: usp_msg.Header_ADD,
|
||||||
|
},
|
||||||
|
Body: &usp_msg.Body{
|
||||||
|
MsgBody: &usp_msg.Body_Request{
|
||||||
|
Request: &usp_msg.Request{
|
||||||
|
ReqType: &usp_msg.Request_Add{
|
||||||
|
Add: &createStuff,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func NewGetMsg(getStuff usp_msg.Get) usp_msg.Msg {
|
func NewGetMsg(getStuff usp_msg.Get) usp_msg.Msg {
|
||||||
return usp_msg.Msg{
|
return usp_msg.Msg{
|
||||||
Header: &usp_msg.Header{
|
Header: &usp_msg.Header{
|
||||||
|
|
@ -61,3 +79,21 @@ func NewGetMsg(getStuff usp_msg.Get) usp_msg.Msg {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewDelMsg(getStuff usp_msg.Delete) usp_msg.Msg {
|
||||||
|
return usp_msg.Msg{
|
||||||
|
Header: &usp_msg.Header{
|
||||||
|
MsgId: uuid.NewString(),
|
||||||
|
MsgType: usp_msg.Header_DELETE,
|
||||||
|
},
|
||||||
|
Body: &usp_msg.Body{
|
||||||
|
MsgBody: &usp_msg.Body_Request{
|
||||||
|
Request: &usp_msg.Request{
|
||||||
|
ReqType: &usp_msg.Request_Delete{
|
||||||
|
Delete: &getStuff,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user