From 4bc102a718d1dba812cc7b134ecb35dfad949152 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Sun, 28 May 2023 17:42:41 -0700 Subject: [PATCH 1/2] timemachine: remove resource type tag Signed-off-by: Achille Roussel --- internal/cmd/get.go | 10 +++++++--- internal/timemachine/registry.go | 27 ++++----------------------- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/internal/cmd/get.go b/internal/cmd/get.go index 58db91ee..380074c3 100644 --- a/internal/cmd/get.go +++ b/internal/cmd/get.go @@ -39,8 +39,7 @@ Examples: "size": 7150231, "annotations": { "timecraft.module.name": "app.wasm", - "timecraft.object.created-at": "2023-05-28T21:52:26Z", - "timecraft.object.resource-type": "module" + "timecraft.object.created-at": "2023-05-28T21:52:26Z" } } @@ -53,6 +52,7 @@ Options: type resource struct { name string alt []string + typ format.MediaType get func(context.Context, io.Writer, *timemachine.Registry) stream.WriteCloser[*format.Descriptor] } @@ -60,21 +60,25 @@ var resources = [...]resource{ { name: "config", alt: []string{"conf", "configs"}, + typ: format.TypeTimecraftConfig, get: getConfigs, }, { name: "module", alt: []string{"mo", "mod", "mods", "modules"}, + typ: format.TypeTimecraftModule, get: getModules, }, { name: "process", alt: []string{"ps", "procs", "processes"}, + typ: format.TypeTimecraftProcess, get: getProcesses, }, { name: "runtime", alt: []string{"rt", "runtimes"}, + typ: format.TypeTimecraftRuntime, get: getRuntimes, }, } @@ -114,7 +118,7 @@ Did you mean?%s`, resourceNamePrefix, joinResourceNames(matchingResources, "\n return err } - reader := registry.ListResources(ctx, resource.name, timeRange) + reader := registry.ListResources(ctx, resource.typ, timeRange) defer reader.Close() var writer stream.WriteCloser[*format.Descriptor] diff --git a/internal/timemachine/registry.go b/internal/timemachine/registry.go index ab31b933..ba1a0472 100644 --- a/internal/timemachine/registry.go +++ b/internal/timemachine/registry.go @@ -10,7 +10,6 @@ import ( "io" "path" "strconv" - "strings" "time" "golang.org/x/exp/slices" @@ -114,8 +113,8 @@ func (reg *Registry) ListProcesses(ctx context.Context, timeRange TimeRange, tag return reg.listObjects(ctx, "process", timeRange, tags) } -func (reg *Registry) ListResources(ctx context.Context, resourceType string, timeRange TimeRange, tags ...object.Tag) stream.ReadCloser[*format.Descriptor] { - return reg.listObjects(ctx, resourceType, timeRange, tags) +func (reg *Registry) ListResources(ctx context.Context, mediaType format.MediaType, timeRange TimeRange, tags ...object.Tag) stream.ReadCloser[*format.Descriptor] { + return reg.listObjects(ctx, mediaType, timeRange, tags) } func errorCreateObject(hash format.Hash, value format.Resource, err error) error { @@ -130,15 +129,6 @@ func errorListObjects(mediaType format.MediaType, err error) error { return fmt.Errorf("list objects: %s: %w", mediaType, err) } -func resourceTypeOf(mediaType format.MediaType) string { - const prefix = "application/vnd.timecraft." - if strings.HasPrefix(string(mediaType), prefix) { - s, _, _ := strings.Cut(string(mediaType[len(prefix):]), ".") - return s - } - return "unknown" -} - func appendTagFilters(filters []object.Filter, tags []object.Tag) []object.Filter { for _, tag := range tags { filters = append(filters, object.MATCH(tag.Name, tag.Value)) @@ -196,10 +186,6 @@ func (reg *Registry) createObject(ctx context.Context, value format.ResourceMars Name: "timecraft.object.created-at", Value: time.Now().UTC().Format(time.RFC3339), }, - { - Name: "timecraft.object.resource-type", - Value: resourceTypeOf(mediaType), - }, }) tags := makeTags(annotations) @@ -242,13 +228,13 @@ func (reg *Registry) lookupObject(ctx context.Context, hash format.Hash, value f return nil } -func (reg *Registry) listObjects(ctx context.Context, resourceType string, timeRange TimeRange, matchTags []object.Tag) stream.ReadCloser[*format.Descriptor] { +func (reg *Registry) listObjects(ctx context.Context, mediaType format.MediaType, timeRange TimeRange, matchTags []object.Tag) stream.ReadCloser[*format.Descriptor] { if !timeRange.Start.IsZero() { timeRange.Start = timeRange.Start.Add(-1) } filters := []object.Filter{ - object.MATCH("timecraft.object.resource-type", resourceType), + object.MATCH("timecraft.object.media-type", mediaType.String()), object.AFTER(timeRange.Start), object.BEFORE(timeRange.End), } @@ -257,11 +243,6 @@ func (reg *Registry) listObjects(ctx context.Context, resourceType string, timeR reader := reg.Store.ListObjects(ctx, "obj/", filters...) return convert(reader, func(info object.Info) (*format.Descriptor, error) { - m, ok := info.Lookup("timecraft.object.media-type") - if !ok { - m = "application/octet-stream" - } - mediaType := format.MediaType(m) hash, err := format.ParseHash(path.Base(info.Name)) if err != nil { return nil, errorListObjects(mediaType, err) From 1887d66b3ee02c6dcfec8b7bea3285e8934f326e Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Sun, 28 May 2023 17:45:47 -0700 Subject: [PATCH 2/2] timemachine: fix media types Signed-off-by: Achille Roussel --- internal/timemachine/registry.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/timemachine/registry.go b/internal/timemachine/registry.go index ba1a0472..f99b001a 100644 --- a/internal/timemachine/registry.go +++ b/internal/timemachine/registry.go @@ -98,19 +98,19 @@ func (reg *Registry) LookupProcess(ctx context.Context, hash format.Hash) (*form } func (reg *Registry) ListModules(ctx context.Context, timeRange TimeRange, tags ...object.Tag) stream.ReadCloser[*format.Descriptor] { - return reg.listObjects(ctx, "module", timeRange, tags) + return reg.listObjects(ctx, format.TypeTimecraftModule, timeRange, tags) } func (reg *Registry) ListRuntimes(ctx context.Context, timeRange TimeRange, tags ...object.Tag) stream.ReadCloser[*format.Descriptor] { - return reg.listObjects(ctx, "runtime", timeRange, tags) + return reg.listObjects(ctx, format.TypeTimecraftRuntime, timeRange, tags) } func (reg *Registry) ListConfigs(ctx context.Context, timeRange TimeRange, tags ...object.Tag) stream.ReadCloser[*format.Descriptor] { - return reg.listObjects(ctx, "config", timeRange, tags) + return reg.listObjects(ctx, format.TypeTimecraftConfig, timeRange, tags) } func (reg *Registry) ListProcesses(ctx context.Context, timeRange TimeRange, tags ...object.Tag) stream.ReadCloser[*format.Descriptor] { - return reg.listObjects(ctx, "process", timeRange, tags) + return reg.listObjects(ctx, format.TypeTimecraftProcess, timeRange, tags) } func (reg *Registry) ListResources(ctx context.Context, mediaType format.MediaType, timeRange TimeRange, tags ...object.Tag) stream.ReadCloser[*format.Descriptor] {