| @@ -26,8 +26,6 @@ vendor/ | |||||
| volumes/node-red/ | volumes/node-red/ | ||||
| main | main | ||||
| *.sh | |||||
| **/*.log | **/*.log | ||||
| ROADMAP.md | ROADMAP.md | ||||
| @@ -26,6 +26,7 @@ import ( | |||||
| "github.com/gorilla/handlers" | "github.com/gorilla/handlers" | ||||
| "github.com/gorilla/mux" | "github.com/gorilla/mux" | ||||
| "github.com/gorilla/websocket" | "github.com/gorilla/websocket" | ||||
| "gorm.io/gorm" | |||||
| ) | ) | ||||
| var upgrader = websocket.Upgrader{ | var upgrader = websocket.Upgrader{ | ||||
| @@ -108,7 +109,7 @@ func main() { | |||||
| r.HandleFunc("/reslevis/removeTracker/{id}", controller.TrackerDelete(db, writer, ctx)).Methods("DELETE") | r.HandleFunc("/reslevis/removeTracker/{id}", controller.TrackerDelete(db, writer, ctx)).Methods("DELETE") | ||||
| r.HandleFunc("/reslevis/updateTracker", controller.TrackerUpdate(db)).Methods("PUT") | r.HandleFunc("/reslevis/updateTracker", controller.TrackerUpdate(db)).Methods("PUT") | ||||
| wsHandler := http.HandlerFunc(serveWs(appState, ctx)) | |||||
| wsHandler := http.HandlerFunc(serveWs(db, ctx)) | |||||
| restApiHandler := handlers.CORS(originsOk, headersOk, methodsOk)(r) | restApiHandler := handlers.CORS(originsOk, headersOk, methodsOk)(r) | ||||
| mainHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | mainHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | ||||
| if strings.HasPrefix(r.URL.Path, "/api/beacons/ws") { | if strings.HasPrefix(r.URL.Path, "/api/beacons/ws") { | ||||
| @@ -166,7 +167,7 @@ eventLoop: | |||||
| logFile.Close() | logFile.Close() | ||||
| } | } | ||||
| func serveWs(appstate *appcontext.AppState, ctx context.Context) http.HandlerFunc { | |||||
| func serveWs(db *gorm.DB, ctx context.Context) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
| ws, err := upgrader.Upgrade(w, r, nil) | ws, err := upgrader.Upgrade(w, r, nil) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -177,12 +178,12 @@ func serveWs(appstate *appcontext.AppState, ctx context.Context) http.HandlerFun | |||||
| return | return | ||||
| } | } | ||||
| wg.Add(2) | wg.Add(2) | ||||
| go writer(ws, appstate, ctx) | |||||
| go writer(ws, db, ctx) | |||||
| go reader(ws, ctx) | go reader(ws, ctx) | ||||
| } | } | ||||
| } | } | ||||
| func writer(ws *websocket.Conn, appstate *appcontext.AppState, ctx context.Context) { | |||||
| func writer(ws *websocket.Conn, db *gorm.DB, ctx context.Context) { | |||||
| pingTicker := time.NewTicker((60 * 9) / 10 * time.Second) | pingTicker := time.NewTicker((60 * 9) / 10 * time.Second) | ||||
| beaconTicker := time.NewTicker(2 * time.Second) | beaconTicker := time.NewTicker(2 * time.Second) | ||||
| defer func() { | defer func() { | ||||
| @@ -199,8 +200,9 @@ func writer(ws *websocket.Conn, appstate *appcontext.AppState, ctx context.Conte | |||||
| ws.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) | ws.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) | ||||
| return | return | ||||
| case <-beaconTicker.C: | case <-beaconTicker.C: | ||||
| beacons := appstate.GetAllHttpResults() | |||||
| js, err := json.Marshal(beacons) | |||||
| var list []model.Tracker | |||||
| db.Find(&list) | |||||
| js, err := json.Marshal(list) | |||||
| if err != nil { | if err != nil { | ||||
| js = []byte("error") | js = []byte("error") | ||||
| } | } | ||||
| @@ -55,8 +55,6 @@ func (p *ParserRegistry) Register(name string, c Config) { | |||||
| configs: c.Configs, | configs: c.Configs, | ||||
| } | } | ||||
| fmt.Printf("registered beacon parser: %+v\n", b) | |||||
| p.ParserList = append(p.ParserList, b) | p.ParserList = append(p.ParserList, b) | ||||
| } | } | ||||
| @@ -0,0 +1,246 @@ | |||||
| BASE_URL="http://localhost:1902" | |||||
| echo "==========================================" | |||||
| echo "GATEWAY API TESTS" | |||||
| echo "==========================================" | |||||
| echo "1. Listing all Gateways" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getGateways" | jq -c '.[]') | |||||
| GATEWAY_IDS=() | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| GATEWAY_IDS+=($(echo "$r" | jq -r '.id')) | |||||
| done | |||||
| sleep 1 | |||||
| if [ ${#GATEWAY_IDS[@]} -gt 1 ]; then | |||||
| echo -e "\n\n2. Updating Gateway ${GATEWAY_IDS[1]}" | |||||
| curl -X PUT "$BASE_URL/reslevis/updateGateway/${GATEWAY_IDS[1]}" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d "{ | |||||
| \"id\": \"${GATEWAY_IDS[1]}\", | |||||
| \"name\": \"GU-100-Updated\", | |||||
| \"mac\": \"AA:BB:CC:DD:EE:FF\", | |||||
| \"status\": \"online\", | |||||
| \"model\": \"MG3\", | |||||
| \"ip\": \"127.0.0.1\", | |||||
| \"position\": \"unknown\", | |||||
| \"x\": 1, | |||||
| \"y\": 1, | |||||
| \"notes\": \"some description\", | |||||
| \"floor\": \"second\", | |||||
| \"building\": \"hospital\" | |||||
| }" | |||||
| sleep 1 | |||||
| echo -e "\n\n3. Listing Gateways after update" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getGateways" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| sleep 1 | |||||
| echo -e "\n\n4. Deleting Gateway ${GATEWAY_IDS[1]}" | |||||
| curl -X DELETE "$BASE_URL/reslevis/removeGateway/${GATEWAY_IDS[1]}" | |||||
| sleep 1 | |||||
| echo -e "\n\n5. Verifying Delete (List again)..." | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getGateways" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| else | |||||
| echo "Not enough gateways to test update/delete" | |||||
| fi | |||||
| echo -e "\n\n==========================================" | |||||
| echo "ZONE API TESTS" | |||||
| echo "==========================================" | |||||
| echo "6. Listing all Zones" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getZones" | jq -c '.[]') | |||||
| ZONE_IDS=() | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| ZONE_IDS+=($(echo "$r" | jq -r '.id')) | |||||
| done | |||||
| sleep 1 | |||||
| if [ ${#ZONE_IDS[@]} -gt 0 ]; then | |||||
| echo -e "\n\n7. Updating Zone ${ZONE_IDS[0]}" | |||||
| curl -X PUT "$BASE_URL/reslevis/updateZone" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d "{ | |||||
| \"id\": \"${ZONE_IDS[0]}\", | |||||
| \"name\": \"Zone-Updated\", | |||||
| \"groups\": [\"security\", \"logistics\"] | |||||
| }" | |||||
| sleep 1 | |||||
| echo -e "\n\n8. Listing Zones after update" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getZones" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| sleep 1 | |||||
| echo -e "\n\n9. Deleting Zone ${ZONE_IDS[0]}" | |||||
| curl -X DELETE "$BASE_URL/reslevis/removeZone/${ZONE_IDS[0]}" | |||||
| sleep 1 | |||||
| echo -e "\n\n10. Verifying Delete (List again)..." | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getZones" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| else | |||||
| echo "No zones to test update/delete" | |||||
| fi | |||||
| echo -e "\n\n==========================================" | |||||
| echo "TRACKERZONE API TESTS" | |||||
| echo "==========================================" | |||||
| echo "11. Listing all TrackerZones" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getTrackerZones" | jq -c '.[]') | |||||
| TRACKERZONE_IDS=() | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| TRACKERZONE_IDS+=($(echo "$r" | jq -r '.id')) | |||||
| done | |||||
| sleep 1 | |||||
| if [ ${#TRACKERZONE_IDS[@]} -gt 0 ]; then | |||||
| echo -e "\n\n12. Updating TrackerZone ${TRACKERZONE_IDS[0]}" | |||||
| curl -X PUT "$BASE_URL/reslevis/updateTrackerZone" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d "{ | |||||
| \"id\": \"${TRACKERZONE_IDS[0]}\", | |||||
| \"name\": \"TrackerZone-Updated\" | |||||
| }" | |||||
| sleep 1 | |||||
| echo -e "\n\n13. Listing TrackerZones after update" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getTrackerZones" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| sleep 1 | |||||
| echo -e "\n\n14. Deleting TrackerZone ${TRACKERZONE_IDS[0]}" | |||||
| curl -X DELETE "$BASE_URL/reslevis/removeTrackerZone/${TRACKERZONE_IDS[0]}" | |||||
| sleep 1 | |||||
| echo -e "\n\n15. Verifying Delete (List again)..." | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getTrackerZones" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| else | |||||
| echo "No trackerzones to test update/delete" | |||||
| fi | |||||
| echo -e "\n\n==========================================" | |||||
| echo "TRACKER API TESTS" | |||||
| echo "==========================================" | |||||
| echo "16. Listing all Trackers" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getTrackers" | jq -c '.[]') | |||||
| TRACKER_IDS=() | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| TRACKER_IDS+=($(echo "$r" | jq -r '.id')) | |||||
| done | |||||
| sleep 1 | |||||
| if [ ${#TRACKER_IDS[@]} -gt 0 ]; then | |||||
| echo -e "\n\n17. Updating Tracker ${TRACKER_IDS[0]}" | |||||
| curl -X PUT "$BASE_URL/reslevis/updateTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d "{ | |||||
| \"id\": \"${TRACKER_IDS[0]}\", | |||||
| \"name\": \"Tracker-Updated\", | |||||
| \"battery\": 85, | |||||
| \"status\": \"inactive\" | |||||
| }" | |||||
| sleep 1 | |||||
| echo -e "\n\n18. Listing Trackers after update" | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getTrackers" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| sleep 1 | |||||
| echo -e "\n\n19. Deleting Tracker ${TRACKER_IDS[0]}" | |||||
| curl -X DELETE "$BASE_URL/reslevis/removeTracker/${TRACKER_IDS[0]}" | |||||
| sleep 1 | |||||
| echo -e "\n\n20. Verifying Delete (List again)..." | |||||
| LIST=$(curl -s -X GET "$BASE_URL/reslevis/getTrackers" | jq -c '.[]') | |||||
| IFS=$'\n' | |||||
| for r in $LIST | |||||
| do | |||||
| echo "$r" | |||||
| done | |||||
| else | |||||
| echo "No trackers to test update/delete" | |||||
| fi | |||||
| echo -e "\n\n==========================================" | |||||
| echo "ALL TESTS COMPLETED" | |||||
| echo "==========================================" | |||||
| @@ -0,0 +1,46 @@ | |||||
| #!/bin/bash | |||||
| BASE_URL="http://localhost:1902" # Change to your port | |||||
| echo "1. Adding a Gateway..." | |||||
| curl -X POST "$BASE_URL/reslevis/postGateway" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "gw_01", | |||||
| "name": "Front Entrance", | |||||
| "mac": "AA:BB:CC:DD:EE:FF", | |||||
| "status": "online", | |||||
| "building": "Main HQ" | |||||
| }' | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Listing Gateways..." | |||||
| curl -X GET "$BASE_URL/reslevis/getGateways" | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Updating Gateway..." | |||||
| curl -X PUT "$BASE_URL/reslevis/updateGateway/gw_01" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "gw_01", | |||||
| "name": "Front Entrance", | |||||
| "mac": "AA:BB:CC:DD:EE:FF", | |||||
| "status": "online", | |||||
| "building": "Pisarna HQ" | |||||
| }' | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Listing Gateways..." | |||||
| curl -X GET "$BASE_URL/reslevis/getGateways" | |||||
| sleep 1 | |||||
| echo -e "\n\n3. Deleting Gateway..." | |||||
| curl -X DELETE "$BASE_URL/reslevis/removeGateway/gw_01" | |||||
| sleep 1 | |||||
| echo -e "\n\n4. Verifying Delete (List again)..." | |||||
| curl -X GET "$BASE_URL/reslevis/getGateways" | |||||
| @@ -0,0 +1,248 @@ | |||||
| #!/bin/bash | |||||
| BASE_URL="http://localhost:1902" | |||||
| echo "Adding all trackers individually..." | |||||
| echo "1. Adding tracker C83F8F17DB35..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "a3c1b2e4-9f73-4c1f-8c87-52e4d9cf9a01", | |||||
| "name": "INGICS-TASTO", | |||||
| "mac": "C83F8F17DB35", | |||||
| "status": "1", | |||||
| "model": "MNBT01G", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "2. Adding tracker C300003947DF..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "d91a7b4f-02f6-44b6-9fa0-ff6df1c2e7b3", | |||||
| "name": "RUSSI", | |||||
| "mac": "C300003947DF", | |||||
| "status": "1", | |||||
| "model": "B7", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "3. Adding tracker C300003B1E20..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "5f1a9c3d-4b6f-4f88-9c92-df5c2d37c2aa", | |||||
| "name": "PETRELLA", | |||||
| "mac": "C300003B1E20", | |||||
| "status": "1", | |||||
| "model": "MWC01", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "4. Adding tracker C300003946B5..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "8b7d42e9-4db5-4f42-a6c1-4e9f0c3e7d12", | |||||
| "name": "AMOROSA-S", | |||||
| "mac": "C300003946B5", | |||||
| "status": "1", | |||||
| "model": "MWB01", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "5. Adding tracker C300003946AC..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "1e93b3fd-7d67-4a53-9c7a-0f0a8e7e41c6", | |||||
| "name": "GALLO", | |||||
| "mac": "C300003946AC", | |||||
| "status": "1", | |||||
| "model": "MWB01", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "6. Adding tracker C300003946B1..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "e2b9d6cc-7d89-46bb-9e45-2b7f71e4a4d0", | |||||
| "name": "SMISEK", | |||||
| "mac": "C300003946B1", | |||||
| "status": "1", | |||||
| "model": "MWB01", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "7. Adding tracker C300003B1E21..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "6cfdeab2-03c4-41d7-9c1d-5f7bcb8c0b6b", | |||||
| "name": "ROMAGNUOLO", | |||||
| "mac": "C300003B1E21", | |||||
| "status": "1", | |||||
| "model": "MWC01", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "8. Adding tracker C300003947C4..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "fa73b6dd-9941-4d25-8a9a-8df3b09a9d77", | |||||
| "name": "BC-43", | |||||
| "mac": "C300003947C4", | |||||
| "status": "1", | |||||
| "model": "B7", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "9. Adding tracker C300003947E2..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "9c55d03e-2db1-4b0a-b1ac-8b60f60e712d", | |||||
| "name": "AMOROSA-F", | |||||
| "mac": "C300003947E2", | |||||
| "status": "1", | |||||
| "model": "B7", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "10. Adding tracker C300003B1E1F..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "2a00e3b4-4a12-4f70-a4c4-408a1779e251", | |||||
| "name": "DINONNO", | |||||
| "mac": "C300003B1E1F", | |||||
| "status": "1", | |||||
| "model": "MWC01", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "11. Adding tracker C7AE561E38B7..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "bf6d6c84-5e1a-4b83-a10f-0e9cf2a198c3", | |||||
| "name": "ismarch-X6", | |||||
| "mac": "C7AE561E38B7", | |||||
| "status": "1", | |||||
| "model": "B7", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "12. Adding tracker E01F9A7A47D2..." | |||||
| curl -s -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "41c4c6b2-9c3d-48d6-aea6-7c1bcfdfb2b7", | |||||
| "name": "ismarch-C2", | |||||
| "mac": "E01F9A7A47D2", | |||||
| "status": "1", | |||||
| "model": "B7", | |||||
| "position": "", | |||||
| "notes": "", | |||||
| "x": 0, | |||||
| "y": 0, | |||||
| "floor": null, | |||||
| "building": null | |||||
| }' | |||||
| echo -e "\n" | |||||
| sleep 1 | |||||
| echo "All trackers added! Listing all trackers..." | |||||
| curl -X GET "$BASE_URL/reslevis/getTrackers" | |||||
| echo -e "\n" | |||||
| @@ -0,0 +1,15 @@ | |||||
| TOKEN=$( | |||||
| curl -k -s -X POST "https://10.251.0.30:10002/realms/API.Server.local/protocol/openid-connect/token" \ | |||||
| -H "Content-Type: application/x-www-form-urlencoded" \ | |||||
| -d "grant_type=password" \ | |||||
| -d "client_id=Fastapi" \ | |||||
| -d "client_secret=wojuoB7Z5xhlPFrF2lIxJSSdVHCApEgC" \ | |||||
| -d "username=core" \ | |||||
| -d "password=C0r3_us3r_Cr3d3nt14ls" \ | |||||
| -d "audience=Fastapi" \ | |||||
| | jq -r '.access_token' | |||||
| ) | |||||
| curl -k -s -X GET "https://10.251.0.30:5050/reslevis/getTrackers" \ | |||||
| -H "accept: application/json" \ | |||||
| -H "Authorization: Bearer ${TOKEN}" | |||||
| @@ -0,0 +1,58 @@ | |||||
| #!/bin/bash | |||||
| BASE_URL="http://localhost:1902" # Change to your port | |||||
| echo "1. Adding a Tracker..." | |||||
| curl -X POST "$BASE_URL/reslevis/postTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "tracker_01", | |||||
| "name": "Employee Badge #001", | |||||
| "mac": "11:22:33:44:55:66", | |||||
| "status": "active", | |||||
| "model": "BLE Beacon v2", | |||||
| "position": "Office A-101", | |||||
| "notes": "Primary employee tracker", | |||||
| "x": 150, | |||||
| "y": 200, | |||||
| "floor": "550e8400-e29b-41d4-a716-446655440000", | |||||
| "building": "550e8400-e29b-41d4-a716-446655440001" | |||||
| }' | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Listing Trackers..." | |||||
| curl -X GET "$BASE_URL/reslevis/getTrackers" | |||||
| sleep 1 | |||||
| echo -e "\n\n3. Updating Tracker..." | |||||
| curl -X PUT "$BASE_URL/reslevis/updateTracker" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "tracker_01", | |||||
| "name": "Employee Badge #001 - Updated", | |||||
| "mac": "11:22:33:44:55:66", | |||||
| "status": "inactive", | |||||
| "model": "BLE Beacon v2", | |||||
| "position": "Office B-205", | |||||
| "notes": "Updated position and status", | |||||
| "x": 300, | |||||
| "y": 400, | |||||
| "floor": "550e8400-e29b-41d4-a716-446655440002", | |||||
| "building": "550e8400-e29b-41d4-a716-446655440001" | |||||
| }' | |||||
| sleep 1 | |||||
| echo -e "\n\n4. Listing Trackers after update..." | |||||
| curl -X GET "$BASE_URL/reslevis/getTrackers" | |||||
| sleep 1 | |||||
| echo -e "\n\n5. Deleting Tracker..." | |||||
| curl -X DELETE "$BASE_URL/reslevis/removeTracker/tracker_01" | |||||
| sleep 1 | |||||
| echo -e "\n\n6. Verifying Delete (List again)..." | |||||
| curl -X GET "$BASE_URL/reslevis/getTrackers" | |||||
| @@ -0,0 +1,46 @@ | |||||
| #!/bin/bash | |||||
| BASE_URL="http://localhost:1902" | |||||
| echo "1. Adding Tracker Zone Mapping..." | |||||
| curl -X POST "$BASE_URL/reslevis/postTrackerZone" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "b6b2a2e4-58b3-4aa4-8d6a-4b55a2c5b2d2", | |||||
| "zoneList": ["0c7b9c7f-6d0f-4d4e-9e4a-2c9f2b1d6a11","1d2e3f40-1111-2222-3333-444455556666"], | |||||
| "tracker": "1e93b3fd-7d67-4a53-9c7a-0f0a8e7e41c6", | |||||
| "days": "All,Mon,Tue,Wed,Thu,Fri", | |||||
| "time": "09:00-17:00" | |||||
| }' | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Listing Trackers..." | |||||
| curl -X GET "$BASE_URL/reslevis/getTrackerZones" | |||||
| # sleep 1 | |||||
| # echo "Updating Tracker Zone List and Time..." | |||||
| # curl -X PUT "$BASE_URL/reslevis/updateTrackerZone" \ | |||||
| # -H "Content-Type: application/json" \ | |||||
| # -d '{ | |||||
| # "id": "tz_001", | |||||
| # "zoneList": ["zone_C"], | |||||
| # "tracker": "TAG_55", | |||||
| # "days": "Sat-Sun", | |||||
| # "time": "10:00-14:00" | |||||
| # }' | |||||
| # sleep 1 | |||||
| # echo -e "\n\n2. Listing Trackers..." | |||||
| # curl -X GET "$BASE_URL/reslevis/getTrackerZones" | |||||
| # sleep 1 | |||||
| # echo -e "\n\n3. Deleting Tracker Mapping..." | |||||
| # curl -X DELETE "$BASE_URL/reslevis/removeTrackerZone/tz_001" | |||||
| # sleep 1 | |||||
| # echo -e "\n\n2. Listing Trackers..." | |||||
| # curl -X GET "$BASE_URL/reslevis/getTrackerZones" | |||||
| @@ -0,0 +1,44 @@ | |||||
| #!/bin/bash | |||||
| BASE_URL="http://localhost:1902" | |||||
| echo "1. Adding a Zone with Groups (JSON Array)..." | |||||
| curl -X POST "$BASE_URL/reslevis/postZone" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "zone_A", | |||||
| "name": "Warehouse North", | |||||
| "groups": ["security", "logistics", "staff"], | |||||
| "floor": "1", | |||||
| "building": "B1" | |||||
| }' | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Listing Zones (Check if groups are restored as slice)..." | |||||
| curl -X GET "$BASE_URL/reslevis/getZones" | |||||
| sleep 1 | |||||
| echo -e "\n\n3. Updating Zone (Adding a group)..." | |||||
| curl -X PUT "$BASE_URL/reslevis/updateZone" \ | |||||
| -H "Content-Type: application/json" \ | |||||
| -d '{ | |||||
| "id": "Zone_A", | |||||
| "name": "Warehouse North Updated", | |||||
| "groups": ["security", "logistics", "staff", "admin"] | |||||
| }' | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Listing Zones (Check if groups are restored as slice)..." | |||||
| curl -X GET "$BASE_URL/reslevis/getZones" | |||||
| sleep 1 | |||||
| echo -e "\n\n4. Deleting Zone..." | |||||
| curl -X DELETE "$BASE_URL/reslevis/removeZone/zone_A" | |||||
| sleep 1 | |||||
| echo -e "\n\n2. Listing Zones (Check if groups are restored as slice)..." | |||||
| curl -X GET "$BASE_URL/reslevis/getZones" | |||||