Example #1
0
// DELETEs the data it returns
func (db FlightDB) ExtractTrackFragments(icao string, callsign string) ([]f.Track, error) {
	q := datastore.
		NewQuery(kTrackFragmentKind).
		Filter("Icao24 = ", icao).
		Filter("Callsign = ", callsign)

	ftfs := []f.FrozenTrackFragment{}
	if keys, err := q.GetAll(db.C, &ftfs); err != nil {
		return nil, err

	} else {
		out := []f.Track{}
		for _, ftf := range ftfs {
			t := f.Track{}
			if err := t.Base64Decode(ftf.TrackBase64); err != nil {
				return nil, err
			}
			out = append(out, t)
		}

		// OK, safe to delete !!
		if true {
			if err := datastore.DeleteMulti(db.C, keys); err != nil {
				return nil, err
			}
		}

		return out, nil
	}
}
Example #2
0
func addtrackHandler(w http.ResponseWriter, r *http.Request) {
	ctx := req2ctx(r)
	db := fdb.NewDB(r)

	icaoId := r.FormValue("icaoid")
	callsign := strings.TrimSpace(r.FormValue("callsign"))
	tStr := r.FormValue("track")

	// Validate it works before persisting
	t := ftype.Track{}
	if err := t.Base64Decode(tStr); err != nil {
		log.Errorf(ctx, " /mdb/addtrack: decode failed: %v", err)
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}

	ftf := ftype.FrozenTrackFragment{
		TrackBase64: tStr,
		Callsign:    callsign,
		Icao24:      icaoId,
	}
	if err := db.AddTrackFrgament(ftf); err != nil {
		log.Errorf(ctx, " /mdb/addtrack: db.AddTrackFragment failed: %v", err)
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}

	// 3. Routine to merge track fragments ? Extra credit ?

	// c.Infof(" /mdb/addtrack: added %d points for [%s][%s]", len(t), icaoId, callsign)
	w.Write([]byte(fmt.Sprintf("Added %d for %s\n", len(t), icaoId)))
}
Example #3
0
// Leaves data intact ! There is some scope for refactoring here.
func (db FlightDB) ReadTrackFragments(icao string, callsign string) ([]f.Track, error) {
	q := datastore.
		NewQuery(kTrackFragmentKind).
		Filter("Icao24 = ", icao).
		Filter("Callsign = ", callsign)

	ftfs := []f.FrozenTrackFragment{}
	if _, err := q.GetAll(db.C, &ftfs); err != nil {
		return nil, err

	} else {
		out := []f.Track{}
		for _, ftf := range ftfs {
			t := f.Track{}
			if err := t.Base64Decode(ftf.TrackBase64); err != nil {
				return nil, err
			}
			out = append(out, t)
		}

		return out, nil
	}
}