Skip to content
Snippets Groups Projects
Commit 06a9fdb6 authored by Richard T. Carback III's avatar Richard T. Carback III
Browse files

filling in details of tracker

parent f55ed1c7
No related branches found
No related tags found
4 merge requests!510Release,!207WIP: Client Restructure,!203Symmetric broadcast,!187Xx 3829/triggers
......@@ -9,6 +9,10 @@ package identity
import (
"encoding/json"
"os"
"sync"
"time"
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/interfaces"
......@@ -20,9 +24,6 @@ import (
"gitlab.com/xx_network/primitives/id"
"gitlab.com/xx_network/primitives/id/ephemeral"
"gitlab.com/xx_network/primitives/netTime"
"sort"
"sync"
"time"
)
const validityGracePeriod = 5 * time.Minute
......@@ -32,8 +33,11 @@ const TimestampKey = "IDTrackingTimestamp"
const TimestampStoreVersion = 0
const ephemeralStoppable = "EphemeralCheck"
const addressSpaceSizeChanTag = "ephemeralTracker"
var Forever time.Time = time.Time{}
const trackedIDChanSize = 1000
const deleteIDChanSize = 1000
type Tracker struct {
tracked []trackedID
......@@ -41,6 +45,8 @@ type Tracker struct{
session *storage.Session
newIdentity chan trackedID
deleteIdentity chan *id.ID
addrSpace *address.Space
mux *sync.Mutex
}
type trackedID struct {
......@@ -51,12 +57,32 @@ type trackedID struct{
Persistent bool
}
func NewTracker(session *storage.Session, addrSpace *address.Space)*Tracker{
func NewTracker(session *storage.Session, addrSpace *address.Space,
kv *versioned.KV) *Tracker {
//intilization
t := &Tracker{
tracked: make([]trackedID, 0),
session: session,
newIdentity: make(chan trackedID, trackedIDChanSize),
deleteIdentity: make(chan *id.ID, deleteIDChanSize),
addrSpace: addrSpace,
mux: &sync.Mutex{},
}
//loading
err := t.load()
if err != nil && os.IsNotExist(err) {
//if load fails, make a new
t.store = receptionID.NewStore(session.GetKV())
} else if err != nil {
jww.FATAL.Panicf("unable to create new Tracker: %+v", err)
} else {
t.store = receptionID.LoadStore(session.GetKV())
}
//check if there is an old timestamp, recreate the basic ID from it
//initilize the ephemeral identiies system
return t
}
//make the GetIdentities call on the ephemerals system public on this
......@@ -70,8 +96,6 @@ func (tracker Tracker)StartProcessies() stoppable.Stoppable {
return stop
}
// AddIdentity adds an identity to be tracked
func (tracker *Tracker) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {
tracker.newIdentity <- trackedID{
......@@ -287,6 +311,8 @@ func generateIdentitiesOverRange(lastGeneration, generateThrough time.Time,
}
func (tracker *Tracker) save() {
t.mux.Lock()
defer t.mux.Unlock()
persistant := make([]trackedID, 0, len(tracker.tracked))
for i := range tracker.tracked {
......@@ -299,20 +325,38 @@ func (tracker *Tracker)save(){
return
}
data, err := json.Marshal(&persistant)
if err != nil {
jww.FATAL.Panicf("Failed to marshal the tracked users")
jww.FATAL.Panicf("unable to marshal trackedID list: %+v", err)
}
obj := &versioned.Object{
Version: ,
Version: TrackerListVersion,
Timestamp: netTime.Now(),
Data: data,
}
err = tracker.session.GetKV().Set(TrackerListKey, TrackerListVersion, obj)
err = tracker.session.GetKV().Set(TrackerListKey, TrackerListVersion,
obj)
if err != nil {
jww.FATAL.Panicf("unable to save trackedID list: %+v", err)
}
}
func (t *Tracker) load() error {
t.mux.Lock()
defer t.mux.Unlock()
obj, err := t.session.GetKV().Get(TrackerListKey, TrackerListVersion)
if err != nil {
jww.FATAL.Panicf("Failed to store the tracked users")
return err
}
trackedID := make([]trackedID, 0)
err = json.Unmarshal(obj.Data, trackedID)
if err != nil {
return err
}
t.tracked = trackedID
return nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment