kopia lustrzana https://github.com/cyoung/stratux
Initial commit of ADSBTower mutex protection (needs testing)
rodzic
47271df764
commit
f1521d6e25
|
@ -26,6 +26,7 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -125,6 +126,7 @@ type ADSBTower struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var ADSBTowers map[string]ADSBTower // Running list of all towers seen. (lat,lng) -> ADSBTower
|
var ADSBTowers map[string]ADSBTower // Running list of all towers seen. (lat,lng) -> ADSBTower
|
||||||
|
var ADSBTowerMutex *sync.Mutex
|
||||||
|
|
||||||
func constructFilenames() {
|
func constructFilenames() {
|
||||||
var fileIndexNumber uint
|
var fileIndexNumber uint
|
||||||
|
@ -493,7 +495,8 @@ func makeStratuxStatus() []byte {
|
||||||
msg[26] = byte((v & 0xFF00) >> 8)
|
msg[26] = byte((v & 0xFF00) >> 8)
|
||||||
msg[27] = byte(v & 0xFF)
|
msg[27] = byte(v & 0xFF)
|
||||||
|
|
||||||
// Number of ADS-B towers.
|
// Number of ADS-B towers. Map structure is protected by ADSBTowerMutex.
|
||||||
|
ADSBTowerMutex.Lock()
|
||||||
num_towers := uint8(len(ADSBTowers))
|
num_towers := uint8(len(ADSBTowers))
|
||||||
|
|
||||||
msg[28] = byte(num_towers)
|
msg[28] = byte(num_towers)
|
||||||
|
@ -510,7 +513,7 @@ func makeStratuxStatus() []byte {
|
||||||
msg = append(msg, tmp[1]) // Longitude.
|
msg = append(msg, tmp[1]) // Longitude.
|
||||||
msg = append(msg, tmp[2]) // Longitude.
|
msg = append(msg, tmp[2]) // Longitude.
|
||||||
}
|
}
|
||||||
|
ADSBTowerMutex.Unlock()
|
||||||
return prepareMessage(msg)
|
return prepareMessage(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,6 +631,8 @@ func updateMessageStats() {
|
||||||
ES_messages_last_minute := uint(0)
|
ES_messages_last_minute := uint(0)
|
||||||
products_last_minute := make(map[string]uint32)
|
products_last_minute := make(map[string]uint32)
|
||||||
|
|
||||||
|
ADSBTowerMutex.Lock()
|
||||||
|
|
||||||
// Clear out ADSBTowers stats.
|
// Clear out ADSBTowers stats.
|
||||||
for t, tinf := range ADSBTowers {
|
for t, tinf := range ADSBTowers {
|
||||||
tinf.Messages_last_minute = 0
|
tinf.Messages_last_minute = 0
|
||||||
|
@ -681,6 +686,7 @@ func updateMessageStats() {
|
||||||
ADSBTowers[t] = tinf
|
ADSBTowers[t] = tinf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ADSBTowerMutex.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if CPU temperature is valid. Assume <= 0 is invalid.
|
// Check if CPU temperature is valid. Assume <= 0 is invalid.
|
||||||
|
@ -1262,6 +1268,7 @@ func main() {
|
||||||
constructFilenames()
|
constructFilenames()
|
||||||
|
|
||||||
ADSBTowers = make(map[string]ADSBTower)
|
ADSBTowers = make(map[string]ADSBTower)
|
||||||
|
ADSBTowerMutex = &sync.Mutex{}
|
||||||
MsgLog = make([]msg, 0)
|
MsgLog = make([]msg, 0)
|
||||||
|
|
||||||
crcInit() // Initialize CRC16 table.
|
crcInit() // Initialize CRC16 table.
|
||||||
|
|
|
@ -151,6 +151,8 @@ func handleSituationRequest(w http.ResponseWriter, r *http.Request) {
|
||||||
func handleTowersRequest(w http.ResponseWriter, r *http.Request) {
|
func handleTowersRequest(w http.ResponseWriter, r *http.Request) {
|
||||||
setNoCache(w)
|
setNoCache(w)
|
||||||
setJSONHeaders(w)
|
setJSONHeaders(w)
|
||||||
|
|
||||||
|
ADSBTowerMutex.Lock()
|
||||||
towersJSON, err := json.Marshal(&ADSBTowers)
|
towersJSON, err := json.Marshal(&ADSBTowers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error sending tower JSON data: %s\n", err.Error())
|
log.Printf("Error sending tower JSON data: %s\n", err.Error())
|
||||||
|
@ -158,6 +160,7 @@ func handleTowersRequest(w http.ResponseWriter, r *http.Request) {
|
||||||
// for testing purposes, we can return a fixed reply
|
// for testing purposes, we can return a fixed reply
|
||||||
// towersJSON = []byte(`{"(38.490880,-76.135554)":{"Lat":38.49087953567505,"Lng":-76.13555431365967,"Signal_strength_last_minute":100,"Signal_strength_max":67,"Messages_last_minute":1,"Messages_total":1059},"(38.978698,-76.309276)":{"Lat":38.97869825363159,"Lng":-76.30927562713623,"Signal_strength_last_minute":495,"Signal_strength_max":32,"Messages_last_minute":45,"Messages_total":83},"(39.179285,-76.668413)":{"Lat":39.17928457260132,"Lng":-76.66841268539429,"Signal_strength_last_minute":50,"Signal_strength_max":24,"Messages_last_minute":1,"Messages_total":16},"(39.666309,-74.315300)":{"Lat":39.66630935668945,"Lng":-74.31529998779297,"Signal_strength_last_minute":9884,"Signal_strength_max":35,"Messages_last_minute":4,"Messages_total":134}}`)
|
// towersJSON = []byte(`{"(38.490880,-76.135554)":{"Lat":38.49087953567505,"Lng":-76.13555431365967,"Signal_strength_last_minute":100,"Signal_strength_max":67,"Messages_last_minute":1,"Messages_total":1059},"(38.978698,-76.309276)":{"Lat":38.97869825363159,"Lng":-76.30927562713623,"Signal_strength_last_minute":495,"Signal_strength_max":32,"Messages_last_minute":45,"Messages_total":83},"(39.179285,-76.668413)":{"Lat":39.17928457260132,"Lng":-76.66841268539429,"Signal_strength_last_minute":50,"Signal_strength_max":24,"Messages_last_minute":1,"Messages_total":16},"(39.666309,-74.315300)":{"Lat":39.66630935668945,"Lng":-74.31529998779297,"Signal_strength_last_minute":9884,"Signal_strength_max":35,"Messages_last_minute":4,"Messages_total":134}}`)
|
||||||
fmt.Fprintf(w, "%s\n", towersJSON)
|
fmt.Fprintf(w, "%s\n", towersJSON)
|
||||||
|
ADSBTowerMutex.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// AJAX call - /getSatellites. Responds with all GNSS satellites that are being tracked, along with status information.
|
// AJAX call - /getSatellites. Responds with all GNSS satellites that are being tracked, along with status information.
|
||||||
|
|
Ładowanie…
Reference in New Issue