| @@ -30,8 +30,8 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "name": "Minew Acc", | "name": "Minew Acc", | ||||
| "min": 19, | |||||
| "max": 19, | |||||
| "min": 18, | |||||
| "max": 18, | |||||
| "pattern": ["0x16", "0xE1", "0xFF"], | "pattern": ["0x16", "0xE1", "0xFF"], | ||||
| "configs": { | "configs": { | ||||
| "battery": {"offset": 6, "length": 1}, | "battery": {"offset": 6, "length": 1}, | ||||
| @@ -129,6 +129,8 @@ func main() { | |||||
| r.HandleFunc("/reslevis/settings", controller.SettingsUpdateController(db, kafkaManager.GetWriter("settings"), ctx)).Methods("PATCH") | r.HandleFunc("/reslevis/settings", controller.SettingsUpdateController(db, kafkaManager.GetWriter("settings"), ctx)).Methods("PATCH") | ||||
| r.HandleFunc("/reslevis/settings", controller.SettingsListController(db)).Methods("GET") | r.HandleFunc("/reslevis/settings", controller.SettingsListController(db)).Methods("GET") | ||||
| r.HandleFunc("/reslevis/getTracks/{id}", controller.TracksListController(db)).Methods("GET") | |||||
| beaconTicker := time.NewTicker(2 * time.Second) | beaconTicker := time.NewTicker(2 * time.Second) | ||||
| restApiHandler := handlers.CORS(originsOk, headersOk, methodsOk)(r) | restApiHandler := handlers.CORS(originsOk, headersOk, methodsOk)(r) | ||||
| @@ -68,6 +68,21 @@ func GetZones(token string, client *http.Client) ([]model.Zone, error) { | |||||
| return i, nil | return i, nil | ||||
| } | } | ||||
| func GetTracks(token string, client *http.Client) ([]model.Tracks, error) { | |||||
| res, err := getRequest(token, "getTracks", client) | |||||
| if err != nil { | |||||
| return []model.Tracks{}, err | |||||
| } | |||||
| var i []model.Tracks | |||||
| err = json.NewDecoder(res.Body).Decode(&i) | |||||
| if err != nil { | |||||
| return []model.Tracks{}, err | |||||
| } | |||||
| return i, nil | |||||
| } | |||||
| func getRequest(token, route string, client *http.Client) (*http.Response, error) { | func getRequest(token, route string, client *http.Client) (*http.Response, error) { | ||||
| url := fmt.Sprintf("https://10.251.0.30:5050/reslevis/%s", route) | url := fmt.Sprintf("https://10.251.0.30:5050/reslevis/%s", route) | ||||
| req, err := http.NewRequest("GET", url, nil) | req, err := http.NewRequest("GET", url, nil) | ||||
| @@ -50,6 +50,11 @@ func UpdateDB(db *gorm.DB, ctx context.Context, cfg *config.Config, writer *kafk | |||||
| syncTable(db, gateways) | syncTable(db, gateways) | ||||
| } | } | ||||
| if tracks, err := GetTracks(token, client); err == nil { | |||||
| fmt.Printf("Tracks: %+v\n", tracks) | |||||
| syncTable(db, tracks) | |||||
| } | |||||
| if zones, err := GetZones(token, client); err == nil { | if zones, err := GetZones(token, client); err == nil { | ||||
| syncTable(db, zones) | syncTable(db, zones) | ||||
| } | } | ||||
| @@ -0,0 +1,25 @@ | |||||
| package controller | |||||
| import ( | |||||
| "encoding/json" | |||||
| "net/http" | |||||
| "github.com/AFASystems/presence/internal/pkg/model" | |||||
| "github.com/gorilla/mux" | |||||
| "gorm.io/gorm" | |||||
| ) | |||||
| func TracksListController(db *gorm.DB) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| id := mux.Vars(r)["id"] | |||||
| var tracks []model.Tracks | |||||
| db.Where("uuid = ?", id).Order("timestamp DESC").Limit(100).Find(&tracks) | |||||
| res, err := json.Marshal(tracks) | |||||
| if err != nil { | |||||
| http.Error(w, err.Error(), 400) | |||||
| return | |||||
| } | |||||
| w.Write(res) | |||||
| } | |||||
| } | |||||
| @@ -26,7 +26,7 @@ func Connect(cfg *config.Config) (*gorm.DB, error) { | |||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| if err := db.AutoMigrate(&model.Gateway{}, model.Zone{}, model.TrackerZones{}, model.Tracker{}, model.Config{}, model.Settings{}); err != nil { | |||||
| if err := db.AutoMigrate(&model.Gateway{}, model.Zone{}, model.TrackerZones{}, model.Tracker{}, model.Config{}, model.Settings{}, model.Tracks{}); err != nil { | |||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| @@ -0,0 +1,20 @@ | |||||
| package model | |||||
| import "time" | |||||
| type Tracks struct { | |||||
| ID uint `gorm:"unique;primaryKey;autoIncrement"` | |||||
| UUID string `json:"id" gorm:"foreignKey"` | |||||
| Timestamp time.Time `json:"timestamp"` | |||||
| Type string `json:"type"` | |||||
| Status string `json:"status"` | |||||
| Gateway string `json:"gateway" gorm:"index"` | |||||
| GatewayMac string `json:"gatewayMac"` | |||||
| Tracker string `json:"tracker" gorm:"index"` | |||||
| TrackerMac string `json:"trackerMac"` | |||||
| Subject string `json:"subject"` | |||||
| SubjectName string `json:"subjectName"` | |||||
| Floor string `json:"floor"` | |||||
| Signal int `json:"signal"` | |||||
| Building string `json:"building"` | |||||
| } | |||||
| @@ -6,6 +6,7 @@ import ( | |||||
| "fmt" | "fmt" | ||||
| "slices" | "slices" | ||||
| "strings" | "strings" | ||||
| "time" | |||||
| "github.com/AFASystems/presence/internal/pkg/common/appcontext" | "github.com/AFASystems/presence/internal/pkg/common/appcontext" | ||||
| "github.com/AFASystems/presence/internal/pkg/model" | "github.com/AFASystems/presence/internal/pkg/model" | ||||
| @@ -54,6 +55,11 @@ func LocationToBeaconService(msg model.HTTPLocation, db *gorm.DB, writer *kafka. | |||||
| } | } | ||||
| } | } | ||||
| if err := db.Create(&model.Tracks{UUID: msg.ID, Timestamp: time.Now(), Gateway: gw.ID, GatewayMac: gw.MAC, Tracker: msg.ID}).Error; err != nil { | |||||
| fmt.Println("Error in saving distance for beacon: ", err) | |||||
| return | |||||
| } | |||||
| if err := db.Updates(&model.Tracker{ID: msg.ID, Location: gw.ID, Distance: msg.Distance}).Error; err != nil { | if err := db.Updates(&model.Tracker{ID: msg.ID, Location: gw.ID, Distance: msg.Distance}).Error; err != nil { | ||||
| fmt.Println("Error in saving distance for beacon: ", err) | fmt.Println("Error in saving distance for beacon: ", err) | ||||
| return | return | ||||