commit 2021-11-18]00:11:43
This commit is contained in:
parent
2c046ebb32
commit
8834e3986d
235
ETRI-SMARTFARM-POC.postman_collection.json
Normal file
235
ETRI-SMARTFARM-POC.postman_collection.json
Normal file
@ -0,0 +1,235 @@
|
||||
{
|
||||
"info": {
|
||||
"_postman_id": "6f0d9b87-1c8c-475e-9498-0786a8a423b4",
|
||||
"name": "ETRI-SMARTFARM-POC",
|
||||
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
||||
},
|
||||
"item": [
|
||||
{
|
||||
"name": "1. (post) controller-A",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"cname\": \"controller-A\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://{{server}}/controllers",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"controllers"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "2. (post) controller-B",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"cname\": \"controller-B\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://{{server}}/controllers",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"controllers"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "3. (post) device-A",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"dname\": \"device-A\",\n \"type\": \"sensor\",\n \"cid\": \"{{cid-A}}\",\n \"sname\": \"devicemanagera\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://{{server}}/devices",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"devices"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "4. (post) device-B",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"dname\": \"device-A\",\n \"type\": \"sensor\",\n \"cid\": \"{{cid-A}}\",\n \"sname\": \"devicemanagera\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://{{server}}/devices",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"devices"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "5. (post) device-C",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"dname\": \"device-A\",\n \"type\": \"sensor\",\n \"cid\": \"{{cid-A}}\",\n \"sname\": \"devicemanagera\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://{{server}}/devices",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"devices"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "6. (post) device-D",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"dname\": \"device-A\",\n \"type\": \"sensor\",\n \"cid\": \"{{cid-A}}\",\n \"sname\": \"devicemanagerb\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://{{server}}/devices",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"devices"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "7. (post) device-E",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"dname\": \"device-A\",\n \"type\": \"sensor\",\n \"cid\": \"{{cid-A}}\",\n \"sname\": \"devicemanagerb\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://{{server}}/devices",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"devices"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "8. (get) Request-to-ServiceA",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://{{server}}/services/{{sid-A}}",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"services",
|
||||
"{{sid-A}}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "9. (get) Request-to-ServiceB",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://{{server}}/{{sid-A}}",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"{{server}}"
|
||||
],
|
||||
"path": [
|
||||
"{{sid-A}}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
}
|
34
POC-ENV.postman_environment.json
Normal file
34
POC-ENV.postman_environment.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"id": "80fd9b0c-0696-4c64-810c-4ba804f822b4",
|
||||
"name": "POC-ENV",
|
||||
"values": [
|
||||
{
|
||||
"key": "server",
|
||||
"value": "localhost:3000",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "cid-A",
|
||||
"value": "562f71b4-1267-49bf-ba55-2d00add1f0f6",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "cid-B",
|
||||
"value": "23f65d70-78d4-4b17-b0ac-906fe01f3090",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "sid-A",
|
||||
"value": "8e8f6de3-94e7-4fe0-a0e9-8d473674aced",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "sid-B",
|
||||
"value": "7a43133f-9c01-46f9-9fd9-9e8f157ec604",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"_postman_variable_scope": "environment",
|
||||
"_postman_exported_at": "2021-11-17T03:10:47.279Z",
|
||||
"_postman_exported_using": "Postman/8.12.5"
|
||||
}
|
@ -26,6 +26,6 @@ type DBHandler interface {
|
||||
}
|
||||
|
||||
func NewDBHandler(dbtype, path string) (DBHandler, error) {
|
||||
// return newSqliteHandler(path)
|
||||
return newPostgresqlHandler(path)
|
||||
return newSqliteHandler(path)
|
||||
// return newPostgresqlHandler(path)
|
||||
}
|
||||
|
@ -77,6 +77,7 @@ func GetControllerList(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
fmt.Println(list)
|
||||
encoder := json.NewEncoder(w)
|
||||
@ -85,6 +86,7 @@ func GetControllerList(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@ -96,6 +98,7 @@ func PostController(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
encoder := json.NewEncoder(w)
|
||||
@ -104,6 +107,7 @@ func PostController(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
sendNotification(&Notification{Msg: "Added Controller"})
|
||||
@ -116,14 +120,19 @@ var upgrader = websocket.Upgrader{
|
||||
}
|
||||
|
||||
var notifications []chan *Notification
|
||||
var notiMutex sync.Mutex
|
||||
|
||||
func sendNotification(noti *Notification) {
|
||||
// notiMutex.Lock()
|
||||
// defer notiMutex.Unlock()
|
||||
for _, ch := range notifications {
|
||||
ch <- noti
|
||||
}
|
||||
}
|
||||
|
||||
func removeNotification(noti chan *Notification) {
|
||||
notiMutex.Lock()
|
||||
defer notiMutex.Unlock()
|
||||
for i, e := range notifications {
|
||||
if e == noti {
|
||||
discoveredDevices[i] = discoveredDevices[len(discoveredDevices)-1]
|
||||
@ -133,11 +142,14 @@ func removeNotification(noti chan *Notification) {
|
||||
}
|
||||
func GetNotification(w http.ResponseWriter, r *http.Request) {
|
||||
notiChan := make(chan *Notification, 1)
|
||||
notiMutex.Lock()
|
||||
notifications = append(notifications, notiChan)
|
||||
notiMutex.Unlock()
|
||||
conn, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
for {
|
||||
@ -146,7 +158,6 @@ func GetNotification(w http.ResponseWriter, r *http.Request) {
|
||||
if conn.WriteJSON(notification) != nil {
|
||||
log.Println(err)
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
removeNotification(notiChan)
|
||||
notiChan = nil
|
||||
return
|
||||
@ -156,11 +167,14 @@ func GetNotification(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
func GetDiscoveredDevices(w http.ResponseWriter, r *http.Request) {
|
||||
noti := make(chan string, 1)
|
||||
mutex.Lock()
|
||||
discoveredNotifications = append(discoveredNotifications, noti)
|
||||
mutex.Unlock()
|
||||
conn, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
for {
|
||||
@ -221,24 +235,25 @@ func PostDevice(w http.ResponseWriter, r *http.Request) {
|
||||
mutex.Lock()
|
||||
waitPermission[device.DID] = make(chan bool)
|
||||
discoveredDevices = append(discoveredDevices, device)
|
||||
mutex.Unlock()
|
||||
|
||||
for _, noti := range discoveredNotifications {
|
||||
noti <- device.DID
|
||||
}
|
||||
|
||||
timer := time.NewTimer(3 * time.Second)
|
||||
mutex.Unlock()
|
||||
timer := time.NewTimer(20 * time.Second)
|
||||
select {
|
||||
case <-timer.C:
|
||||
mutex.Lock()
|
||||
delete(waitPermission, device.DID)
|
||||
removeDevice(device)
|
||||
mutex.Unlock()
|
||||
|
||||
for _, noti := range discoveredNotifications {
|
||||
noti <- device.DID
|
||||
}
|
||||
|
||||
mutex.Unlock()
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte("This operation is not permitted"))
|
||||
return
|
||||
case b := <-waitPermission[device.DID]:
|
||||
if b {
|
||||
// 디바이스 등록 절차 수행
|
||||
@ -251,19 +266,20 @@ func PostDevice(w http.ResponseWriter, r *http.Request) {
|
||||
mutex.Lock()
|
||||
delete(waitPermission, device.DID)
|
||||
removeDevice(device)
|
||||
mutex.Unlock()
|
||||
|
||||
for _, noti := range discoveredNotifications {
|
||||
noti <- device.DID
|
||||
}
|
||||
mutex.Unlock()
|
||||
} else {
|
||||
mutex.Lock()
|
||||
delete(waitPermission, device.DID)
|
||||
removeDevice(device)
|
||||
mutex.Unlock()
|
||||
|
||||
for _, noti := range discoveredNotifications {
|
||||
noti <- device.DID
|
||||
}
|
||||
|
||||
mutex.Unlock()
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte("This operation is not permitted"))
|
||||
}
|
||||
@ -278,7 +294,6 @@ func PutDevice(w http.ResponseWriter, r *http.Request) {
|
||||
err := decoder.Decode(&msg)
|
||||
|
||||
fmt.Println("msg[did]: ", msg["did"])
|
||||
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
@ -290,7 +305,6 @@ func PutDevice(w http.ResponseWriter, r *http.Request) {
|
||||
w.Write([]byte("Wrong Device ID is Sended"))
|
||||
return
|
||||
}
|
||||
|
||||
ch <- true
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user