func main() { flag.Parse() if *host == "" { log.Fatalf("Required flag: -host") } if *email == "" { log.Fatalf("Required flag: -email") } if *passwordFile == "" { log.Fatalf("Required flag: -password_file") } p, err := ioutil.ReadFile(*passwordFile) if err != nil { log.Fatalf("Unable to read password from %q: %v", *passwordFile, err) } password := strings.TrimSpace(string(p)) client := clientLoginClient(*host, *email, password) c, err := remote_api.NewRemoteContext(*host, client) if err != nil { log.Fatalf("Failed to create context: %v", err) } log.Printf("App ID %q", appengine.AppID(c)) q := datastore.NewQuery(DatastoreKindName).Order("kind_name") kinds := []*DatastoreKind{} if _, err := q.GetAll(c, &kinds); err != nil { log.Fatalf("Failed to fetch kind info: %v", err) } for _, k := range kinds { fmt.Printf("\nkind %q\t%d entries\t%d bytes\n", k.KindName, k.Count, k.Bytes) props := datastore.PropertyList{} if _, err := datastore.NewQuery(k.KindName).Limit(1).Run(c).Next(&props); err != nil { log.Printf("Unable to fetch sample entity kind %q: %v", k.KindName, err) continue } for _, prop := range props { fmt.Printf("\t%s: %v\n", prop.Name, prop.Value) } } }
///////////////////////////////////////////////// // This allows us to use the remote_api ///////////////////////////////////////////////// func (session *Session) AppEngineContext() (c appengine.Context, err error) { return remote_api.NewRemoteContext(session.AppHost, session.client) }