X-Git-Url: http://www.git.cypherpunks.ru/?p=govpn.git;a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fgovpn%2Fstats.go;fp=src%2Fcypherpunks.ru%2Fgovpn%2Fstats.go;h=8354d39de8a2f73008cb0883ae23eea51d0946b3;hp=c8ea6223e655912e60e6623344838174a7f6a718;hb=c982ccb214ba8d0fd8a30dee7439ea2db1559f6f;hpb=b772182c156a0eab0798d12ca196610ac736035e diff --git a/src/cypherpunks.ru/govpn/stats.go b/src/cypherpunks.ru/govpn/stats.go index c8ea622..8354d39 100644 --- a/src/cypherpunks.ru/govpn/stats.go +++ b/src/cypherpunks.ru/govpn/stats.go @@ -22,6 +22,7 @@ import ( "encoding/json" "log" "net" + "sync" "time" ) @@ -29,15 +30,13 @@ const ( RWTimeout = 10 * time.Second ) -type KnownPeers map[string]**Peer - // StatsProcessor is assumed to be run in background. It accepts // connection on statsPort, reads anything one send to them and show // information about known peers in serialized JSON format. peers // argument is a reference to the map with references to the peers as // values. Map is used here because of ease of adding and removing // elements in it. -func StatsProcessor(statsPort net.Listener, peers *KnownPeers) { +func StatsProcessor(statsPort net.Listener, peers *sync.Map) { var conn net.Conn var err error var data []byte @@ -52,9 +51,10 @@ func StatsProcessor(statsPort net.Listener, peers *KnownPeers) { conn.Read(buf) conn.Write([]byte("HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n")) var peersList []*Peer - for _, peer := range *peers { - peersList = append(peersList, *peer) - } + peers.Range(func(_, peerI interface{}) bool { + peersList = append(peersList, *peerI.(**Peer)) + return true + }) data, err = json.Marshal(peersList) if err != nil { panic(err)