zenbook migration
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"math/rand/v2"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/typesense/typesense-go/v2/typesense"
|
||||
"github.com/typesense/typesense-go/v2/typesense/api"
|
||||
"github.com/typesense/typesense-go/v2/typesense/api/pointer"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if err := run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func run() error {
|
||||
var url, apiKey string
|
||||
var list, del bool
|
||||
var delay time.Duration
|
||||
flag.StringVar(&url, "url", "url", "url")
|
||||
flag.StringVar(&apiKey, "api-key", "nope", "api key")
|
||||
flag.BoolVar(&list, "list", false, "whether to list 10 latest documents from collection")
|
||||
flag.BoolVar(&del, "delete", false, "whether delete collection")
|
||||
flag.DurationVar(&delay, "delay", time.Second, "delay between requests")
|
||||
flag.Parse()
|
||||
|
||||
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
|
||||
defer stop()
|
||||
|
||||
client := typesense.NewClient(
|
||||
typesense.WithServer(url),
|
||||
typesense.WithAPIKey(apiKey),
|
||||
)
|
||||
|
||||
{
|
||||
ok, err := client.Health(ctx, 5*time.Second)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !ok {
|
||||
return fmt.Errorf("health check failed")
|
||||
}
|
||||
}
|
||||
|
||||
const collectionName = "companies"
|
||||
|
||||
if del {
|
||||
_, err := client.Collection(collectionName).Delete(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("deleted collection: %s\n", collectionName)
|
||||
time.Sleep(3 * time.Second)
|
||||
}
|
||||
|
||||
var exists bool
|
||||
{
|
||||
collections, err := client.Collections().Retrieve(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, collection := range collections {
|
||||
fmt.Printf("listed collection: %s\n", collection.Name)
|
||||
if collection.Name == collectionName {
|
||||
exists = true
|
||||
}
|
||||
}
|
||||
}
|
||||
if !exists {
|
||||
collection, err := client.Collections().Create(ctx, &api.CollectionSchema{
|
||||
Name: "companies",
|
||||
Fields: []api.Field{
|
||||
{
|
||||
Name: "num_employees",
|
||||
Type: "int32",
|
||||
},
|
||||
{
|
||||
Name: "created",
|
||||
Type: "string",
|
||||
},
|
||||
{
|
||||
Name: "unix",
|
||||
Type: "int64",
|
||||
},
|
||||
},
|
||||
DefaultSortingField: pointer.String("unix"),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("created collection: %s\n", collection.Name)
|
||||
time.Sleep(3 * time.Second)
|
||||
}
|
||||
|
||||
if list {
|
||||
search, err := client.Collection(collectionName).Documents().Search(ctx, &api.SearchCollectionParams{
|
||||
Q: pointer.String("*"),
|
||||
Limit: pointer.Int(250),
|
||||
SortBy: pointer.String("unix:desc"),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i := range *search.Hits {
|
||||
hit := (*search.Hits)[len(*search.Hits)-1-i]
|
||||
doc := *hit.Document
|
||||
fmt.Printf("LIST: ==> %s (%s)\n", doc["created"], doc["id"])
|
||||
}
|
||||
}
|
||||
|
||||
for {
|
||||
if ctx.Err() != nil {
|
||||
fmt.Println("context canceled")
|
||||
return nil
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
document := map[string]any{
|
||||
"num_employees": rand.Int32N(10000),
|
||||
"created": now.Format(time.TimeOnly),
|
||||
"unix": now.Unix(),
|
||||
}
|
||||
|
||||
var id string
|
||||
documentResponse, err := client.Collection(collectionName).Documents().Create(ctx, document)
|
||||
if err != nil {
|
||||
fmt.Printf("create document failed: %v\n", err)
|
||||
continue
|
||||
}
|
||||
fmt.Printf("%s ==>\n", document["created"])
|
||||
|
||||
id = documentResponse["id"].(string)
|
||||
for {
|
||||
documentResponse, err = client.Collection(collectionName).Document(id).Retrieve(ctx)
|
||||
if err != nil {
|
||||
if ctx.Err() != nil {
|
||||
fmt.Println("context canceled")
|
||||
return nil
|
||||
}
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
continue
|
||||
}
|
||||
fmt.Printf("==> %s (%s)\n", documentResponse["created"], documentResponse["id"])
|
||||
break
|
||||
}
|
||||
|
||||
time.Sleep(delay)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user