From 8ba25622176aac0dedd70892624e93b541c3824b Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Thu, 15 Jan 2026 10:39:10 -0500 Subject: [PATCH 01/11] Added local environments Local Stack for s3 --- cloud_webserver_v2/.env.development | 7 +++ .../cmd/cloud_webserver_v2/main.go | 3 ++ cloud_webserver_v2/docker-compose.yml | 46 +++++++++++++++---- cloud_webserver_v2/internal/s3/s3.go | 1 + cloud_webserver_v2/localstack/init/01-s3.sh | 4 ++ 5 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 cloud_webserver_v2/.env.development create mode 100755 cloud_webserver_v2/localstack/init/01-s3.sh diff --git a/cloud_webserver_v2/.env.development b/cloud_webserver_v2/.env.development new file mode 100644 index 0000000..d148592 --- /dev/null +++ b/cloud_webserver_v2/.env.development @@ -0,0 +1,7 @@ +AWS_S3_ENDPOINT=http://localstack:4566 +AWS_ACCESS_KEY=test +AWS_SECRET_KEY=test +AWS_S3_RUN_BUCKET=dops-dev +AWS_REGION=us-east-1 +MONGODB_URI=mongodb://test:test@mongo:27017/?authSource=admin +MATLAB_URI=https://mps.hytechracing.duckdns.org \ No newline at end of file diff --git a/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go b/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go index 6f92325..a614f49 100644 --- a/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go +++ b/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go @@ -64,6 +64,9 @@ func main() { if uri == "" { log.Fatal("could not get mongodb uri environment variable") } + + log.Println("MONGO_URI =", uri) + dbClient, err := database.NewDatabaseClient(ctx, uri) if err != nil { log.Fatal(err) diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index 6b4b71e..b428533 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -1,20 +1,50 @@ services: + localstack: + image: localstack/localstack:latest + container_name: localstack + ports: + - "4566:4566" + environment: + - SERVICES=s3 + - DEBUG=1 + - DEFAULT_REGION=us-east-1 + volumes: + - localstack-data:/var/lib/localstack + - /var/run/docker.sock:/var/run/docker.sock + - ./localstack/init:/etc/localstack/init + - ./localstack/init:/etc/localstack/init/ready.d + + mongo: + image: mongo:7 + container_name: mongo + ports: + - "27017:27017" + volumes: + - mongo-data:/data/db + environment: + - MONGO_INITDB_ROOT_USERNAME=test + - MONGO_INITDB_ROOT_PASSWORD=test + cloud_webserver_v2: container_name: cloud_webserver_v2 - volumes: - - matlab_mps_data:/mps_data - - run_metadata:/data/run_metadata - - ./htmls:/app/files - - ./logs:/app/logs build: context: . - env_file: - - .env + env_file: + - .env.development ports: - "8080:8080" restart: unless-stopped + depends_on: + - mongo + - localstack + volumes: + - matlab_mps_data:/mps_data + - run_metadata:/data/run_metadata + - ./htmls:/app/files + - ./logs:/app/logs volumes: + localstack-data: + mongo-data: run_metadata: matlab_mps_data: - external: true diff --git a/cloud_webserver_v2/internal/s3/s3.go b/cloud_webserver_v2/internal/s3/s3.go index bfa9423..e6d0746 100644 --- a/cloud_webserver_v2/internal/s3/s3.go +++ b/cloud_webserver_v2/internal/s3/s3.go @@ -30,6 +30,7 @@ func NewS3Session(accessKey string, secretKey string, region string, bucket stri // Create an aws s3 service client client := s3.NewFromConfig(cfg, func(o *s3.Options) { o.BaseEndpoint = aws.String(endpoint) + o.UsePathStyle = true }) presignClient := s3.NewPresignClient(client) diff --git a/cloud_webserver_v2/localstack/init/01-s3.sh b/cloud_webserver_v2/localstack/init/01-s3.sh new file mode 100755 index 0000000..f40f6e6 --- /dev/null +++ b/cloud_webserver_v2/localstack/init/01-s3.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail + +awslocal s3api create-bucket --bucket dops-dev || true From b8a39ea0c0dc94a2528d1cc3acd20aeb90fa0132 Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Thu, 15 Jan 2026 10:44:31 -0500 Subject: [PATCH 02/11] better env handling --- cloud_webserver_v2/docker-compose.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index b428533..5c6c142 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -30,7 +30,10 @@ services: build: context: . env_file: - - .env.development + - path: .env + required: true + - path: .env.development + required: false ports: - "8080:8080" restart: unless-stopped From 9b15a4cfb4d272258958d23ce39a4d9ce0d3f21f Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Sun, 18 Jan 2026 16:13:40 -0500 Subject: [PATCH 03/11] swapped order of env --- cloud_webserver_v2/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index 5c6c142..657482f 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -30,10 +30,10 @@ services: build: context: . env_file: - - path: .env - required: true - path: .env.development required: false + - path: .env + required: true ports: - "8080:8080" restart: unless-stopped From 61f9bd75f579927738ee9343990508850ae99892 Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Sun, 18 Jan 2026 16:14:18 -0500 Subject: [PATCH 04/11] d --- cloud_webserver_v2/cmd/cloud_webserver_v2/main.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go b/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go index a614f49..6e8d93a 100644 --- a/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go +++ b/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go @@ -65,8 +65,6 @@ func main() { log.Fatal("could not get mongodb uri environment variable") } - log.Println("MONGO_URI =", uri) - dbClient, err := database.NewDatabaseClient(ctx, uri) if err != nil { log.Fatal(err) From 4eaa563310bbfb516f79dac0ebf1c3f4a6c81a06 Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Sun, 18 Jan 2026 16:35:53 -0500 Subject: [PATCH 05/11] adjusted o.UsePathStyle = true --- cloud_webserver_v2/.env.development | 3 ++- cloud_webserver_v2/docker-compose.yml | 2 +- cloud_webserver_v2/internal/s3/s3.go | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cloud_webserver_v2/.env.development b/cloud_webserver_v2/.env.development index d148592..1561ee4 100644 --- a/cloud_webserver_v2/.env.development +++ b/cloud_webserver_v2/.env.development @@ -4,4 +4,5 @@ AWS_SECRET_KEY=test AWS_S3_RUN_BUCKET=dops-dev AWS_REGION=us-east-1 MONGODB_URI=mongodb://test:test@mongo:27017/?authSource=admin -MATLAB_URI=https://mps.hytechracing.duckdns.org \ No newline at end of file +MATLAB_URI=https://mps.hytechracing.duckdns.org +ENV=DEVELOPMENT \ No newline at end of file diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index 657482f..d7888ac 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -33,7 +33,7 @@ services: - path: .env.development required: false - path: .env - required: true + required: false ports: - "8080:8080" restart: unless-stopped diff --git a/cloud_webserver_v2/internal/s3/s3.go b/cloud_webserver_v2/internal/s3/s3.go index e6d0746..d19ae13 100644 --- a/cloud_webserver_v2/internal/s3/s3.go +++ b/cloud_webserver_v2/internal/s3/s3.go @@ -3,6 +3,7 @@ package s3 import ( "context" "log" + "os" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" @@ -30,7 +31,7 @@ func NewS3Session(accessKey string, secretKey string, region string, bucket stri // Create an aws s3 service client client := s3.NewFromConfig(cfg, func(o *s3.Options) { o.BaseEndpoint = aws.String(endpoint) - o.UsePathStyle = true + o.UsePathStyle = os.Getenv("ENV") == "DEVELOPMENT" }) presignClient := s3.NewPresignClient(client) From 684a632fa3dabf9986cb81b9aa27667269aad399 Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Sun, 1 Feb 2026 16:14:07 -0500 Subject: [PATCH 06/11] added health check so that main program only runs after mongo+s3 finish loading --- cloud_webserver_v2/docker-compose.yml | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index d7888ac..9570e1b 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -13,6 +13,16 @@ services: - /var/run/docker.sock:/var/run/docker.sock - ./localstack/init:/etc/localstack/init - ./localstack/init:/etc/localstack/init/ready.d + healthcheck: + test: + [ + "CMD-SHELL", + 'curl -fsS http://localhost:4566/_localstack/health | grep -q ''"s3": "running"''', + ] + interval: 5s + timeout: 3s + retries: 30 + start_period: 10s mongo: image: mongo:7 @@ -24,6 +34,16 @@ services: environment: - MONGO_INITDB_ROOT_USERNAME=test - MONGO_INITDB_ROOT_PASSWORD=test + healthcheck: + test: + [ + "CMD-SHELL", + "mongosh --quiet --eval 'db.runCommand({ ping: 1 }).ok' localhost:27017 | grep -q 1", + ] + interval: 5s + timeout: 5s + retries: 30 + start_period: 10s cloud_webserver_v2: container_name: cloud_webserver_v2 @@ -38,8 +58,10 @@ services: - "8080:8080" restart: unless-stopped depends_on: - - mongo - - localstack + mongo: + condition: service_healthy + localstack: + condition: service_healthy volumes: - matlab_mps_data:/mps_data - run_metadata:/data/run_metadata From 6698487f5af44e41e4651a41a38a2ed86761b9a9 Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Mon, 16 Feb 2026 10:40:52 -0500 Subject: [PATCH 07/11] habdle corrupted files --- .../cmd/cloud_webserver_v2/main.go | 1 - cloud_webserver_v2/docker-compose.yml | 71 +---- .../database/usecase/vehicle_run_usecase.go | 36 +++ .../internal/delivery/http/mcap_handler.go | 45 ++++ cloud_webserver_v2/internal/s3/s3.go | 2 - .../internal/utils/mcap_recovery.go | 247 ++++++++++++++++++ 6 files changed, 336 insertions(+), 66 deletions(-) create mode 100644 cloud_webserver_v2/internal/utils/mcap_recovery.go diff --git a/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go b/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go index 6e8d93a..6f92325 100644 --- a/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go +++ b/cloud_webserver_v2/cmd/cloud_webserver_v2/main.go @@ -64,7 +64,6 @@ func main() { if uri == "" { log.Fatal("could not get mongodb uri environment variable") } - dbClient, err := database.NewDatabaseClient(ctx, uri) if err != nil { log.Fatal(err) diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index 9570e1b..6b4b71e 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -1,75 +1,20 @@ services: - localstack: - image: localstack/localstack:latest - container_name: localstack - ports: - - "4566:4566" - environment: - - SERVICES=s3 - - DEBUG=1 - - DEFAULT_REGION=us-east-1 - volumes: - - localstack-data:/var/lib/localstack - - /var/run/docker.sock:/var/run/docker.sock - - ./localstack/init:/etc/localstack/init - - ./localstack/init:/etc/localstack/init/ready.d - healthcheck: - test: - [ - "CMD-SHELL", - 'curl -fsS http://localhost:4566/_localstack/health | grep -q ''"s3": "running"''', - ] - interval: 5s - timeout: 3s - retries: 30 - start_period: 10s - - mongo: - image: mongo:7 - container_name: mongo - ports: - - "27017:27017" - volumes: - - mongo-data:/data/db - environment: - - MONGO_INITDB_ROOT_USERNAME=test - - MONGO_INITDB_ROOT_PASSWORD=test - healthcheck: - test: - [ - "CMD-SHELL", - "mongosh --quiet --eval 'db.runCommand({ ping: 1 }).ok' localhost:27017 | grep -q 1", - ] - interval: 5s - timeout: 5s - retries: 30 - start_period: 10s - cloud_webserver_v2: container_name: cloud_webserver_v2 - build: - context: . - env_file: - - path: .env.development - required: false - - path: .env - required: false - ports: - - "8080:8080" - restart: unless-stopped - depends_on: - mongo: - condition: service_healthy - localstack: - condition: service_healthy volumes: - matlab_mps_data:/mps_data - run_metadata:/data/run_metadata - ./htmls:/app/files - ./logs:/app/logs + build: + context: . + env_file: + - .env + ports: + - "8080:8080" + restart: unless-stopped volumes: - localstack-data: - mongo-data: run_metadata: matlab_mps_data: + external: true diff --git a/cloud_webserver_v2/internal/database/usecase/vehicle_run_usecase.go b/cloud_webserver_v2/internal/database/usecase/vehicle_run_usecase.go index fe19a0a..494df95 100644 --- a/cloud_webserver_v2/internal/database/usecase/vehicle_run_usecase.go +++ b/cloud_webserver_v2/internal/database/usecase/vehicle_run_usecase.go @@ -132,3 +132,39 @@ func (uc *VehicleRunUseCase) DeleteVehicleRunById(ctx context.Context, id primit func (uc *VehicleRunUseCase) UpdateVehicleRun(ctx context.Context, id primitive.ObjectID, model *models.VehicleRunModel) error { return uc.vechicleRunRepo.UpdateVehicleRunFromId(ctx, id, model) } + +func (uc *VehicleRunUseCase) AddMiscFile(ctx context.Context, vehicleRunID primitive.ObjectID, awsBucket string, fileName string, filePath string) (*models.VehicleRunModel, error) { + vehicleRun, err := uc.vechicleRunRepo.GetVehicleRunFromId(ctx, vehicleRunID) + if err != nil { + return nil, err + } + miscFile := models.FileModel{ + AwsBucket: awsBucket, + FilePath: filePath, + FileName: fileName, + } + if vehicleRun.ContentFiles["misc_files"] == nil { + vehicleRun.ContentFiles["misc_files"] = []models.FileModel{} + } + vehicleRun.ContentFiles["misc_files"] = append(vehicleRun.ContentFiles["misc_files"], miscFile) + err = uc.vechicleRunRepo.UpdateVehicleRunFromId(ctx, vehicleRunID, vehicleRun) + if err != nil { + return nil, err + } + return vehicleRun, nil +} + +func (uc *VehicleRunUseCase) FileNameExists(ctx context.Context, vehicleRunID primitive.ObjectID, fileName string) (bool, error) { + vehicleRun, err := uc.vechicleRunRepo.GetVehicleRunFromId(ctx, vehicleRunID) + if err != nil { + return true, err + } + if vehicleRun.ContentFiles["misc_files"] != nil { + for _, f := range vehicleRun.ContentFiles["misc_files"] { + if f.FileName == fileName { + return true, nil + } + } + } + return false, nil +} diff --git a/cloud_webserver_v2/internal/delivery/http/mcap_handler.go b/cloud_webserver_v2/internal/delivery/http/mcap_handler.go index 4d0aaac..815cd71 100644 --- a/cloud_webserver_v2/internal/delivery/http/mcap_handler.go +++ b/cloud_webserver_v2/internal/delivery/http/mcap_handler.go @@ -67,9 +67,54 @@ func NewMcapHandler( r.Get("/{id}/process", HandlerFunc(handler.ProcessMatlabJob).ServeHTTP) r.Post("/{id}/updateMetadataRecords", HandlerFunc(handler.UpdateMetadataRecordFromID).ServeHTTP) r.Delete("/{id}/resetMetaDataRecord/{metadata}", HandlerFunc(handler.ResetMetadataRecordFromID).ServeHTTP) + r.Post("/{id}/addMiscFile", HandlerFunc(handler.UploadNewMiscFile).ServeHTTP) }) } +// Retrieves misc files uploaded from request, calls S3 usecase to update S3, & calls vehicle run usecase to +// update MongoDB +func (h *mcapHandler) UploadNewMiscFile(w http.ResponseWriter, r *http.Request) *HandlerError { + ctx := r.Context() + err := r.ParseMultipartForm(32 << 20) + if err != nil { + return NewHandlerError(fmt.Sprintf("Failed to parse multipart form"), http.StatusBadRequest) + } + file, header, err := r.FormFile("file") + if err != nil { + return NewHandlerError(fmt.Sprintf("Could not read file from request"), http.StatusBadRequest) + } + defer file.Close() + + idStr := chi.URLParam(r, "id") + vehicleRunID, err := primitive.ObjectIDFromHex(idStr) + if err != nil { + return NewHandlerError(fmt.Sprint("Invalid vehicle run ID"), http.StatusBadRequest) + } + + s3Key := fmt.Sprintf("%s/miscFiles/%s", vehicleRunID.Hex(), header.Filename) + exists, err := h.dbClient.VehicleRunUseCase().FileNameExists(ctx, vehicleRunID, header.Filename) + if err != nil { + return NewHandlerError(fmt.Sprintf("Failed to save misc file to vehicle run: "+err.Error()), http.StatusInternalServerError) + } + if exists { + return NewHandlerError(fmt.Sprintf("File name already exists, duplicate file names not allowed"), http.StatusNotAcceptable) + } + err = h.s3Repository.WriteObjectReader(ctx, file, s3Key) + if err != nil { + return NewHandlerError(fmt.Sprintf("Failed to upload to S3: "+err.Error()), http.StatusInternalServerError) + } + + _, err = h.dbClient.VehicleRunUseCase().AddMiscFile(ctx, vehicleRunID, h.s3Repository.Bucket(), header.Filename, s3Key) + if err != nil { + return NewHandlerError(fmt.Sprintf("Failed to save misc file to vehicle run: "+err.Error()), http.StatusInternalServerError) + } + response := map[string]interface{}{ + "message": "Misc file uploaded successfully", + } + render.JSON(w, r, response) + return nil +} + // GetMcapsFromFilters takes in filters through Query parameters and will respond with a // map with a message and data field where data contains the filtered MCAPs func (h *mcapHandler) GetMcapsFromFilters(w http.ResponseWriter, r *http.Request) { diff --git a/cloud_webserver_v2/internal/s3/s3.go b/cloud_webserver_v2/internal/s3/s3.go index d19ae13..bfa9423 100644 --- a/cloud_webserver_v2/internal/s3/s3.go +++ b/cloud_webserver_v2/internal/s3/s3.go @@ -3,7 +3,6 @@ package s3 import ( "context" "log" - "os" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" @@ -31,7 +30,6 @@ func NewS3Session(accessKey string, secretKey string, region string, bucket stri // Create an aws s3 service client client := s3.NewFromConfig(cfg, func(o *s3.Options) { o.BaseEndpoint = aws.String(endpoint) - o.UsePathStyle = os.Getenv("ENV") == "DEVELOPMENT" }) presignClient := s3.NewPresignClient(client) diff --git a/cloud_webserver_v2/internal/utils/mcap_recovery.go b/cloud_webserver_v2/internal/utils/mcap_recovery.go new file mode 100644 index 0000000..222fff2 --- /dev/null +++ b/cloud_webserver_v2/internal/utils/mcap_recovery.go @@ -0,0 +1,247 @@ +// Adapted from https://github.com/foxglove/mcap/blob/main/go/cli/mcap/cmd/recover.go + +package utils + +import ( + "errors" + "fmt" + "io" + "log" + + "github.com/foxglove/mcap/go/cli/mcap/utils" + "github.com/foxglove/mcap/go/mcap" +) + +type RecoverOptions struct { + DecodeChunk bool + ChunkSize int64 + Compression mcap.CompressionFormat +} + +func RecoverRun( + r io.Reader, + w io.Writer, + ops *RecoverOptions, +) error { + log.Println("RUNNING RECOVERY FUNCTION") + if ops == nil { + ops = &RecoverOptions{ + DecodeChunk: false, + ChunkSize: 64, + Compression: mcap.CompressionNone, + } + } + + decodeChunk := ops.DecodeChunk + mcapWriter, err := mcap.NewWriter(w, &mcap.WriterOptions{ + Chunked: true, + ChunkSize: ops.ChunkSize, + Compression: ops.Compression, + }) + if err != nil { + return err + } + + info := &mcap.Info{ + Statistics: &mcap.Statistics{ + ChannelMessageCounts: make(map[uint16]uint64), + }, + Channels: make(map[uint16]*mcap.Channel), + Schemas: make(map[uint16]*mcap.Schema), + } + + defer func() { + mcapWriter.Statistics.MessageCount += info.Statistics.MessageCount + for channelID, count := range info.Statistics.ChannelMessageCounts { + mcapWriter.Statistics.ChannelMessageCounts[channelID] += count + } + + for _, schema := range info.Schemas { + mcapWriter.AddSchema(schema) + } + for _, channel := range info.Channels { + mcapWriter.AddChannel(channel) + } + + err := mcapWriter.Close() + if err != nil { + utils.EprintF("failed to close mcap writer: %v\n", err) + return + } + utils.EprintF( + "Recovered %d messages, %d attachments, and %d metadata records.\n", + mcapWriter.Statistics.MessageCount, + mcapWriter.Statistics.AttachmentCount, + mcapWriter.Statistics.MetadataCount, + ) + }() + + lexer, err := mcap.NewLexer(r, &mcap.LexerOptions{ + ValidateChunkCRCs: true, + EmitChunks: !ops.DecodeChunk, + EmitInvalidChunks: true, + AttachmentCallback: func(ar *mcap.AttachmentReader) error { + err = mcapWriter.WriteAttachment(&mcap.Attachment{ + LogTime: ar.LogTime, + CreateTime: ar.CreateTime, + Name: ar.Name, + MediaType: ar.MediaType, + DataSize: ar.DataSize, + Data: ar.Data(), + }) + if err != nil { + return err + } + return nil + }, + }) + if err != nil { + return err + } + + buf := make([]byte, 1024) + var lastChunk *mcap.Chunk + var lastIndexes []*mcap.MessageIndex + var recordsCopy []byte + + for { + token, data, err := lexer.Next(buf) + if err != nil { + if token == mcap.TokenInvalidChunk { + utils.EprintF("Invalid chunk encountered, skipping: %s\n", err) + continue + } + if lastChunk != nil { + // Reconstruct message indexes for the last chunk, because it is unclear if the + // message indexes are complete or not. + idx, err := utils.UpdateInfoFromChunk(info, lastChunk, nil) + if err != nil { + utils.EprintF("Failed to update info from chunk, skipping: %s\n", err) + } else { + err = mcapWriter.WriteChunkWithIndexes(lastChunk, idx) + if err != nil { + utils.EprintF("Failed to write chunk, skipping: %s\n", err) + } + } + } + if errors.Is(err, io.EOF) { + return nil + } + var expected *mcap.ErrTruncatedRecord + if errors.As(err, &expected) { + utils.Eprintln(expected.Error()) + return nil + } + return nil + } + if len(data) > len(buf) { + buf = data + } + + if token != mcap.TokenMessageIndex { + if lastChunk != nil { + lastIndexes, err = utils.UpdateInfoFromChunk(info, lastChunk, lastIndexes) + if err != nil { + utils.EprintF("Failed to update info from chunk, skipping: %s\n", err) + } else { + err = mcapWriter.WriteChunkWithIndexes(lastChunk, lastIndexes) + if err != nil { + utils.EprintF("Failed to write chunk, skipping: %s\n", err) + } + } + lastIndexes = nil + lastChunk = nil + } + } + + switch token { + case mcap.TokenHeader: + header, err := mcap.ParseHeader(data) + if err != nil { + return err + } + if err := mcapWriter.WriteHeader(header); err != nil { + return err + } + case mcap.TokenChunk: + chunk, err := mcap.ParseChunk(data) + + if decodeChunk { + idx, err := utils.UpdateInfoFromChunk(info, chunk, nil) + if err != nil { + utils.EprintF("Failed to update info from chunk, skipping: %s\n", err) + } else { + err = mcapWriter.WriteChunkWithIndexes(chunk, idx) + if err != nil { + utils.EprintF("Failed to write chunk, skipping: %s\n", err) + } + } + } else { + // copy the records, since it is referenced and the buffer will be reused + if cap(recordsCopy) < len(chunk.Records) { + recordsCopy = make([]byte, len(chunk.Records)) + } else { + recordsCopy = recordsCopy[:len(chunk.Records)] + } + copy(recordsCopy, chunk.Records) + lastChunk = chunk + lastChunk.Records = recordsCopy + + if err != nil { + return err + } + } + case mcap.TokenMessageIndex: + if !decodeChunk { + if lastChunk == nil { + return fmt.Errorf("got message index but not chunk before it") + } + index, err := mcap.ParseMessageIndex(data) + if err != nil { + return err + } + lastIndexes = append(lastIndexes, index) + } + case mcap.TokenMetadata: + metadata, err := mcap.ParseMetadata(data) + if err != nil { + return err + } + if err := mcapWriter.WriteMetadata(metadata); err != nil { + return err + } + case mcap.TokenSchema: + decodeChunk = true // mcap is not chunked + schema, err := mcap.ParseSchema(data) + if err != nil { + return err + } + if err := mcapWriter.WriteSchema(schema); err != nil { + return err + } + case mcap.TokenChannel: + decodeChunk = true // mcap is not chunked + channel, err := mcap.ParseChannel(data) + if err != nil { + return err + } + if err := mcapWriter.WriteChannel(channel); err != nil { + return err + } + case mcap.TokenMessage: + decodeChunk = true // mcap is not chunked + message, err := mcap.ParseMessage(data) + if err != nil { + return err + } + if err := mcapWriter.WriteMessage(message); err != nil { + return err + } + case mcap.TokenDataEnd, mcap.TokenFooter: + // data section is over, either because the file is over or the summary section starts. + return nil + case mcap.TokenError: + return errors.New("received error token but lexer did not return error on Next") + } + } +} From 872667d5870554d268b51a3d8cffe6faee03675d Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Thu, 26 Feb 2026 18:03:33 -0500 Subject: [PATCH 08/11] debug --- cloud_webserver_v2/docker-compose.yml | 49 +++++ cloud_webserver_v2/go.mod | 72 +++++-- cloud_webserver_v2/go.sum | 202 ++++++++++++++++++ .../internal/background/mcap_jobs.go | 25 ++- .../internal/delivery/http/mcap_handler.go | 1 + .../internal/utils/mcap_recovery.go | 14 ++ 6 files changed, 342 insertions(+), 21 deletions(-) diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index 6b4b71e..598895b 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -1,4 +1,53 @@ services: +<<<<<<< Updated upstream +======= + localstack: + image: localstack/localstack:latest + container_name: localstack + ports: + - "4566:4566" + environment: + - SERVICES=s3 + - DEBUG=1 + - DEFAULT_REGION=us-east-1 + volumes: + - localstack-data:/var/lib/localstack + - /var/run/docker.sock:/var/run/docker.sock + # Put your init scripts here (ready.d) + - ./localstack/init:/etc/localstack/init/ready.d + healthcheck: + test: + [ + "CMD-SHELL", + 'curl -fsS http://localhost:4566/_localstack/health | grep -Eq ''"s3"[[:space:]]*:[[:space:]]*"running"''', + ] + interval: 5s + timeout: 3s + retries: 60 + start_period: 10s + + mongo: + image: mongo:7 + container_name: mongo + ports: + - "27017:27017" + volumes: + - mongo-data:/data/db + environment: + - MONGO_INITDB_ROOT_USERNAME=test + - MONGO_INITDB_ROOT_PASSWORD=test + healthcheck: + test: + [ + "CMD-SHELL", + "mongosh --quiet --username test --password test --authenticationDatabase admin localhost:27017 --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 1)' >/dev/null 2>&1", + ] + interval: 30s + timeout: 5s + retries: 30 + start_period: 10s + +>>>>>>> Stashed changes cloud_webserver_v2: container_name: cloud_webserver_v2 volumes: diff --git a/cloud_webserver_v2/go.mod b/cloud_webserver_v2/go.mod index 4aed507..fec9fc9 100644 --- a/cloud_webserver_v2/go.mod +++ b/cloud_webserver_v2/go.mod @@ -3,11 +3,11 @@ module github.com/hytech-racing/cloud-webserver-v2 go 1.22.3 require ( - github.com/aws/aws-sdk-go-v2 v1.30.3 - github.com/aws/aws-sdk-go-v2/config v1.27.27 - github.com/aws/aws-sdk-go-v2/credentials v1.17.27 - github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 - github.com/foxglove/mcap/go/mcap v1.4.1 + github.com/aws/aws-sdk-go-v2 v1.39.2 + github.com/aws/aws-sdk-go-v2/config v1.31.12 + github.com/aws/aws-sdk-go-v2/credentials v1.18.16 + github.com/aws/aws-sdk-go-v2/service/s3 v1.88.4 + github.com/foxglove/mcap/go/mcap v1.7.4 github.com/go-chi/chi/v5 v5.1.0 github.com/go-chi/cors v1.2.1 github.com/go-chi/render v1.0.3 @@ -22,49 +22,81 @@ require ( ) require ( + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/storage v1.30.1 // indirect git.sr.ht/~sbinet/gg v0.5.0 // indirect github.com/ajg/form v1.5.1 // indirect github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect - github.com/aws/smithy-go v1.20.3 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.9 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 // indirect + github.com/aws/smithy-go v1.23.0 // indirect github.com/bufbuild/protocompile v0.14.0 // indirect github.com/campoy/embedmd v1.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/foxglove/mcap/go/cli/mcap v0.0.0-20260128210300-23764dde5086 // indirect github.com/go-fonts/liberation v0.3.3 // indirect github.com/go-latex/latex v0.0.0-20240709081214-31cef3c7570e // indirect github.com/go-pdf/fpdf v0.9.0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/gonuts/binary v0.2.0 // indirect github.com/google/go-querystring v1.1.0 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.4.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/googleapis/go-type-adapters v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/montanaflynn/stats v0.7.1 // indirect - github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/schollz/progressbar/v3 v3.13.1 // indirect + github.com/spf13/cobra v1.10.2 // indirect + github.com/spf13/pflag v1.0.9 // indirect github.com/stretchr/testify v1.9.0 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + go.opencensus.io v0.24.0 // indirect golang.org/x/crypto v0.24.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/image v0.18.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/oauth2 v0.14.0 // indirect golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect gonum.org/v1/gonum v0.15.0 // indirect + google.golang.org/api v0.149.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/grpc v1.61.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/cloud_webserver_v2/go.sum b/cloud_webserver_v2/go.sum index 3709e5c..784d9f8 100644 --- a/cloud_webserver_v2/go.sum +++ b/cloud_webserver_v2/go.sum @@ -1,3 +1,14 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo= git.sr.ht/~sbinet/cmpimg v0.1.0/go.mod h1:FU12psLbF4TfNXkKH2ZZQ29crIqoiqTZmeQ7dkp/pxE= git.sr.ht/~sbinet/epok v0.5.0 h1:eQcocQpGQVYWLiA93dkIgngH0jjjDiTdj7rS3vQLp6w= @@ -13,49 +24,99 @@ github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyR github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc= +github.com/aws/aws-sdk-go-v2 v1.39.2 h1:EJLg8IdbzgeD7xgvZ+I8M1e0fL0ptn/M47lianzth0I= +github.com/aws/aws-sdk-go-v2 v1.39.2/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 h1:tW1/Rkad38LA15X4UQtjXZXNKsCgkshC3EbmcUmghTg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3/go.mod h1:UbnqO+zjqk3uIt9yCACHJ9IVNhyhOCnYk8yA19SAWrM= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1 h1:i8p8P4diljCr60PpJp6qZXNlgX4m2yQFpYk+9ZT+J4E= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1/go.mod h1:ddqbooRZYNoJ2dsTwOty16rM+/Aqmk/GOXrK8cg7V00= github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90= github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg= +github.com/aws/aws-sdk-go-v2/config v1.31.12 h1:pYM1Qgy0dKZLHX2cXslNacbcEFMkDMl+Bcj5ROuS6p8= +github.com/aws/aws-sdk-go-v2/config v1.31.12/go.mod h1:/MM0dyD7KSDPR+39p9ZNVKaHDLb9qnfDurvVS2KAhN8= github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI= github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4= +github.com/aws/aws-sdk-go-v2/credentials v1.18.16 h1:4JHirI4zp958zC026Sm+V4pSDwW4pwLefKrc0bF2lwI= +github.com/aws/aws-sdk-go-v2/credentials v1.18.16/go.mod h1:qQMtGx9OSw7ty1yLclzLxXCRbrkjWAM7JnObZjmCB7I= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 h1:Mv4Bc0mWmv6oDuSWTKnk+wgeqPL5DRFu5bQL9BGPQ8Y= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9/go.mod h1:IKlKfRppK2a1y0gy1yH6zD+yX5uplJ6UuPlgd48dJiQ= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 h1:se2vOWGD3dWQUtfn4wEjRQJb1HK1XsNIt825gskZ970= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9/go.mod h1:hijCGH2VfbZQxqCDN7bwz/4dzxV+hkyhjawAtdPWKZA= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 h1:6RBnKZLkJM4hQ+kN6E7yWFveOTg8NLPHAkqrs4ZPlTU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9/go.mod h1:V9rQKRmK7AWuEsOMnHzKj8WyrIir1yUJbZxDuZLFvXI= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 h1:Z5r7SycxmSllHYmaAZPpmN8GviDrSGhMS6bldqtXZPw= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15/go.mod h1:CetW7bDE00QoGEmPUoZuRog07SGVAUVW6LFpNP0YfIg= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.9 h1:w9LnHqTq8MEdlnyhV4Bwfizd65lfNCNgdlNC6mM5paE= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.9/go.mod h1:LGEP6EK4nj+bwWNdrvX/FnDTFowdBNwcSPuZu/ouFys= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 h1:oegbebPEMA/1Jny7kvwejowCaHz1FWZAQ94WXFNCyTM= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1/go.mod h1:kemo5Myr9ac0U9JfSjMo9yHLtw+pECEHsFtJ9tqCEI8= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 h1:YPYe6ZmvUfDDDELqEKtAd6bo8zxhkm+XEFEzQisqUIE= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17/go.mod h1:oBtcnYua/CgzCWYN7NZ5j7PotFDaFSUjCYVTtfyn7vw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.0 h1:X0FveUndcZ3lKbSpIC6rMYGRiQTcUVRNH6X4yYtIrlU= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.0/go.mod h1:IWjQYlqw4EX9jw2g3qnEPPWvCE6bS8fKzhMed1OK7c8= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 h1:5r34CgVOD4WZudeEKZ9/iKpiT6cM1JyEROpXjOcdWv8= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9/go.mod h1:dB12CEbNWPbzO2uC6QSWHteqOg4JfBVJOojbAoAUb5I= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 h1:246A4lSTXWJw/rmlQI+TT2OcqeDMKBdyjEQrafMaQdA= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15/go.mod h1:haVfg3761/WF7YPuJOER2MP0k4UAXyHaLclKXB6usDg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.9 h1:wuZ5uW2uhJR63zwNlqWH2W4aL4ZjeJP3o92/W+odDY4= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.9/go.mod h1:/G58M2fGszCrOzvJUkDdY8O9kycodunH4VdT5oBAqls= github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 h1:sZXIzO38GZOU+O0C+INqbH7C2yALwfMWpd64tONS/NE= github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2/go.mod h1:Lcxzg5rojyVPU/0eFwLtcyTaek/6Mtic5B1gJo7e/zE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.88.4 h1:mUI3b885qJgfqKDUSj6RgbRqLdX0wGmg8ruM03zNfQA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.88.4/go.mod h1:6v8ukAxc7z4x4oBjGUsLnH7KGLY9Uhcgij19UJNkiMg= github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM= github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU= +github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 h1:A1oRkiSQOWstGh61y4Wc/yQ04sqrQZr1Si/oAXj20/s= +github.com/aws/aws-sdk-go-v2/service/sso v1.29.6/go.mod h1:5PfYspyCU5Vw1wNPsxi15LZovOnULudOQuVxphSflQA= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 h1:5fm5RTONng73/QA73LhCNR7UT9RpFH3hR6HWL6bIgVY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1/go.mod h1:xBEjWD13h+6nq+z4AkqSfSvqRKFgDIQeaMguAJndOWo= github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE= github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 h1:p3jIvqYwUZgu/XYeI48bJxOhvm47hZb5HUQ0tn6Q9kA= +github.com/aws/aws-sdk-go-v2/service/sts v1.38.6/go.mod h1:WtKK+ppze5yKPkZ0XwqIVWD4beCwv056ZbPQNoeHqM8= github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE= github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= +github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE= +github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= github.com/bufbuild/protocompile v0.14.0/go.mod h1:N6J1NYzkspJo3ZwyL4Xjvli86XOj1xq4qAasUFxGups= github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/foxglove/mcap/go/cli/mcap v0.0.0-20260128210300-23764dde5086 h1:7qct0s7x2WhDwPIXljRmGtL5EDpGuF1EmCQ9RnUnWYk= +github.com/foxglove/mcap/go/cli/mcap v0.0.0-20260128210300-23764dde5086/go.mod h1:/mcOzVX33tngVl2OYZurgndB8xpZYJ0MKzf0Hx5aKRA= github.com/foxglove/mcap/go/mcap v1.4.1 h1:ZveN2IqavMz+eST9v/S9e0teRrRLatsy+pvNqh7MF/k= github.com/foxglove/mcap/go/mcap v1.4.1/go.mod h1:3UsmtxZGHWURgxEgQh3t0cGfyPyLoCGsa/gtS/Y6UPM= +github.com/foxglove/mcap/go/mcap v1.7.4 h1:uoWXtM/2XyqFQ9yQeoj+HZ/PnhlDIhirRNqBYR4vBuA= +github.com/foxglove/mcap/go/mcap v1.7.4/go.mod h1:MBbbGkXnTAU3fj5ZEDA/ioXIe7gFk21SxfqKW8bQfsE= github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4= @@ -74,38 +135,106 @@ github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw= github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gonuts/binary v0.2.0 h1:caITwMWAoQWlL0RNvv2lTU/AHqAJlVuu6nZmNgfbKW4= github.com/gonuts/binary v0.2.0/go.mod h1:kM+CtBrCGDSKdv8WXTuCUsw+loiy8f/QEI8YCCC0M/E= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jhump/protoreflect v1.16.0 h1:54fZg+49widqXYQ0b+usAFHbMkBGR4PpXrsHc8+TBDg= github.com/jhump/protoreflect v1.16.0/go.mod h1:oYPd7nPvcBw/5wlDfm/AVmU9zH9BgqGCI469pGxfj/8= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= +github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE= +github.com/schollz/progressbar/v3 v3.13.1/go.mod h1:xvrbki8kfT1fzWzBT/UZd9L6GA+jdL7HAgq2RFnO6fQ= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/teambition/rrule-go v1.8.2 h1:lIjpjvWTj9fFUZCmuoVDrKVOtdiyzbzc93qTmRVe/J8= @@ -124,50 +253,84 @@ go-hep.org/x/hep v0.35.0 h1:FFAqEzWu4yqYIQu9ASVbfMjbgQcmGSZ4i3Nmt0IYmfI= go-hep.org/x/hep v0.35.0/go.mod h1:72kciVomdlLgeHaUWGHFZSNiqkwe0WUQuGapm2ie7Lg= go.mongodb.org/mongo-driver v1.16.0 h1:tpRsfBJMROVHKpdGyc1BBEzzjDUWjItxbVSZ8Ls4BQ4= go.mongodb.org/mongo-driver v1.16.0/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= @@ -176,23 +339,62 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ= gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo= gonum.org/v1/hdf5 v0.0.0-20210714002203-8c5d23bc6946 h1:vJpL69PeUullhJyKtTjHjENEmZU3BkO4e+fod7nKzgM= gonum.org/v1/hdf5 v0.0.0-20210714002203-8c5d23bc6946/go.mod h1:BQUWDHIAygjdt1HnUPQ0eWqLN2n5FwJycrpYUVUOx2I= gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= +google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.61.0 h1:TOvOcuXn30kRao+gfcvsebNEa5iZIiLkisYEkf7R7o0= google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/cloud_webserver_v2/internal/background/mcap_jobs.go b/cloud_webserver_v2/internal/background/mcap_jobs.go index a06f813..35ca947 100644 --- a/cloud_webserver_v2/internal/background/mcap_jobs.go +++ b/cloud_webserver_v2/internal/background/mcap_jobs.go @@ -9,12 +9,20 @@ import ( "os" "strings" + "github.com/foxglove/mcap/go/mcap" "github.com/hytech-racing/cloud-webserver-v2/internal/messaging" "github.com/hytech-racing/cloud-webserver-v2/internal/models" "github.com/hytech-racing/cloud-webserver-v2/internal/utils" "go.mongodb.org/mongo-driver/bson/primitive" ) +// global mcap recovery options +var RECOVER_OPTIONS = utils.RecoverOptions{ + DecodeChunk: true, + ChunkSize: 64, + Compression: mcap.CompressionZSTD, +} + // PostProcessMCAPUploadJob handles the post processing of MCAP files. // PostProcessMCAPUploadJob serves as a wrapper struct to hold the Process function // so it implicitely inherits FileJobProcessor. @@ -24,6 +32,21 @@ type PostProcessMCAPUploadJob struct{} // handle operations like creating HDF5 files and generating graphs. // It also saves all this information to the database and stores files on S3. func (p *PostProcessMCAPUploadJob) ProcessFileJob(fp *FileProcessor, job *FileJob) error { + + reader, err := os.Open(job.FilePath) + if err != nil { + } + defer reader.Close() + + file, err := os.Create("recovered.mcap") + if err != nil { + } + defer file.Close() + + job.FilePath = file.Name() + + err = utils.RecoverRun(reader, file, &RECOVER_OPTIONS) + ctx := context.Background() fp.setCurrentlyProcessing(true) fp.updateJobStatus(job, StatusProcessing) @@ -66,7 +89,7 @@ func (p *PostProcessMCAPUploadJob) ProcessFileJob(fp *FileProcessor, job *FileJo defer mcapFileS3Reader.Close() recordId := primitive.NewObjectID() - mcapFileName := job.Filename + mcapFileName := "recovered.mcap" mcapObjectFilePath := fmt.Sprintf("%s/%s", recordId.Hex(), mcapFileName) err = fp.s3Repository.WriteObjectReader(ctx, mcapFileS3Reader, mcapObjectFilePath) if err != nil { diff --git a/cloud_webserver_v2/internal/delivery/http/mcap_handler.go b/cloud_webserver_v2/internal/delivery/http/mcap_handler.go index 815cd71..89ee8c0 100644 --- a/cloud_webserver_v2/internal/delivery/http/mcap_handler.go +++ b/cloud_webserver_v2/internal/delivery/http/mcap_handler.go @@ -15,6 +15,7 @@ import ( "github.com/hytech-racing/cloud-webserver-v2/internal/models" "github.com/hytech-racing/cloud-webserver-v2/internal/mps" "github.com/hytech-racing/cloud-webserver-v2/internal/s3" + "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/cloud_webserver_v2/internal/utils/mcap_recovery.go b/cloud_webserver_v2/internal/utils/mcap_recovery.go index 222fff2..42851ef 100644 --- a/cloud_webserver_v2/internal/utils/mcap_recovery.go +++ b/cloud_webserver_v2/internal/utils/mcap_recovery.go @@ -6,7 +6,14 @@ import ( "errors" "fmt" "io" +<<<<<<< Updated upstream "log" +======= +<<<<<<< Updated upstream +======= + "log" +>>>>>>> Stashed changes +>>>>>>> Stashed changes "github.com/foxglove/mcap/go/cli/mcap/utils" "github.com/foxglove/mcap/go/mcap" @@ -23,7 +30,14 @@ func RecoverRun( w io.Writer, ops *RecoverOptions, ) error { +<<<<<<< Updated upstream + log.Println("RUNNING RECOVERY FUNCTION") +======= +<<<<<<< Updated upstream +======= log.Println("RUNNING RECOVERY FUNCTION") +>>>>>>> Stashed changes +>>>>>>> Stashed changes if ops == nil { ops = &RecoverOptions{ DecodeChunk: false, From 7954df2f77689388b9ca597d176da5b39f1807b2 Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Thu, 26 Feb 2026 18:52:11 -0500 Subject: [PATCH 09/11] corrupted file recovery finished --- cloud_webserver_v2/docker-compose.yml | 23 +++++++++++-------- cloud_webserver_v2/go.mod | 1 + cloud_webserver_v2/go.sum | 2 ++ .../internal/background/mcap_jobs.go | 4 ++-- cloud_webserver_v2/internal/s3/s3.go | 11 +++++---- .../internal/utils/mcap_recovery.go | 15 ++---------- cloud_webserver_v2/localstack/init/01-s3.sh | 3 +++ 7 files changed, 30 insertions(+), 29 deletions(-) diff --git a/cloud_webserver_v2/docker-compose.yml b/cloud_webserver_v2/docker-compose.yml index 598895b..62896e8 100644 --- a/cloud_webserver_v2/docker-compose.yml +++ b/cloud_webserver_v2/docker-compose.yml @@ -1,6 +1,4 @@ services: -<<<<<<< Updated upstream -======= localstack: image: localstack/localstack:latest container_name: localstack @@ -13,7 +11,6 @@ services: volumes: - localstack-data:/var/lib/localstack - /var/run/docker.sock:/var/run/docker.sock - # Put your init scripts here (ready.d) - ./localstack/init:/etc/localstack/init/ready.d healthcheck: test: @@ -47,23 +44,29 @@ services: retries: 30 start_period: 10s ->>>>>>> Stashed changes cloud_webserver_v2: container_name: cloud_webserver_v2 - volumes: - - matlab_mps_data:/mps_data - - run_metadata:/data/run_metadata - - ./htmls:/app/files - - ./logs:/app/logs build: context: . - env_file: + env_file: - .env ports: - "8080:8080" + volumes: + - matlab_mps_data:/mps_data + - run_metadata:/data/run_metadata + - ./htmls:/app/files + - ./logs:/app/logs + depends_on: + localstack: + condition: service_healthy + mongo: + condition: service_healthy restart: unless-stopped volumes: + localstack-data: + mongo-data: run_metadata: matlab_mps_data: external: true diff --git a/cloud_webserver_v2/go.mod b/cloud_webserver_v2/go.mod index fec9fc9..e9abb4e 100644 --- a/cloud_webserver_v2/go.mod +++ b/cloud_webserver_v2/go.mod @@ -47,6 +47,7 @@ require ( github.com/bufbuild/protocompile v0.14.0 // indirect github.com/campoy/embedmd v1.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/foxglove/mcap v0.0.0 // indirect github.com/foxglove/mcap/go/cli/mcap v0.0.0-20260128210300-23764dde5086 // indirect github.com/go-fonts/liberation v0.3.3 // indirect github.com/go-latex/latex v0.0.0-20240709081214-31cef3c7570e // indirect diff --git a/cloud_webserver_v2/go.sum b/cloud_webserver_v2/go.sum index 784d9f8..28947a5 100644 --- a/cloud_webserver_v2/go.sum +++ b/cloud_webserver_v2/go.sum @@ -111,6 +111,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/foxglove/mcap v0.0.0 h1:YadOlLL+JDW9TqgpPvXUFFmEb30T97zxS7THsaEFdaQ= +github.com/foxglove/mcap v0.0.0/go.mod h1:xZ5yfiA5sedJJ67mJRjgi0shtEpFRow77qgm4SeFpIg= github.com/foxglove/mcap/go/cli/mcap v0.0.0-20260128210300-23764dde5086 h1:7qct0s7x2WhDwPIXljRmGtL5EDpGuF1EmCQ9RnUnWYk= github.com/foxglove/mcap/go/cli/mcap v0.0.0-20260128210300-23764dde5086/go.mod h1:/mcOzVX33tngVl2OYZurgndB8xpZYJ0MKzf0Hx5aKRA= github.com/foxglove/mcap/go/mcap v1.4.1 h1:ZveN2IqavMz+eST9v/S9e0teRrRLatsy+pvNqh7MF/k= diff --git a/cloud_webserver_v2/internal/background/mcap_jobs.go b/cloud_webserver_v2/internal/background/mcap_jobs.go index 35ca947..d41519f 100644 --- a/cloud_webserver_v2/internal/background/mcap_jobs.go +++ b/cloud_webserver_v2/internal/background/mcap_jobs.go @@ -38,7 +38,7 @@ func (p *PostProcessMCAPUploadJob) ProcessFileJob(fp *FileProcessor, job *FileJo } defer reader.Close() - file, err := os.Create("recovered.mcap") + file, err := os.Create(fmt.Sprintf("%s-recovered.mcap", job.Filename)) if err != nil { } defer file.Close() @@ -89,7 +89,7 @@ func (p *PostProcessMCAPUploadJob) ProcessFileJob(fp *FileProcessor, job *FileJo defer mcapFileS3Reader.Close() recordId := primitive.NewObjectID() - mcapFileName := "recovered.mcap" + mcapFileName := fmt.Sprintf("%s-recovered.mcap", job.Filename) mcapObjectFilePath := fmt.Sprintf("%s/%s", recordId.Hex(), mcapFileName) err = fp.s3Repository.WriteObjectReader(ctx, mcapFileS3Reader, mcapObjectFilePath) if err != nil { diff --git a/cloud_webserver_v2/internal/s3/s3.go b/cloud_webserver_v2/internal/s3/s3.go index bfa9423..3fb67a4 100644 --- a/cloud_webserver_v2/internal/s3/s3.go +++ b/cloud_webserver_v2/internal/s3/s3.go @@ -19,18 +19,20 @@ type s3Session struct { func NewS3Session(accessKey string, secretKey string, region string, bucket string, endpoint string) *S3Repository { staticCreds := credentials.NewStaticCredentialsProvider(accessKey, secretKey, "") - cfg, err := config.LoadDefaultConfig(context.TODO(), + cfg, err := config.LoadDefaultConfig( + context.TODO(), config.WithRegion(region), - config.WithCredentialsProvider(staticCreds)) - + config.WithCredentialsProvider(staticCreds), + ) if err != nil { log.Fatalf("could not load config: %v", err) } - // Create an aws s3 service client client := s3.NewFromConfig(cfg, func(o *s3.Options) { + o.UsePathStyle = true o.BaseEndpoint = aws.String(endpoint) }) + presignClient := s3.NewPresignClient(client) session := &s3Session{ @@ -38,6 +40,7 @@ func NewS3Session(accessKey string, secretKey string, region string, bucket stri bucket: bucket, presignClient: presignClient, } + return &S3Repository{ s3_session: session, } diff --git a/cloud_webserver_v2/internal/utils/mcap_recovery.go b/cloud_webserver_v2/internal/utils/mcap_recovery.go index 42851ef..0dba6da 100644 --- a/cloud_webserver_v2/internal/utils/mcap_recovery.go +++ b/cloud_webserver_v2/internal/utils/mcap_recovery.go @@ -6,14 +6,7 @@ import ( "errors" "fmt" "io" -<<<<<<< Updated upstream "log" -======= -<<<<<<< Updated upstream -======= - "log" ->>>>>>> Stashed changes ->>>>>>> Stashed changes "github.com/foxglove/mcap/go/cli/mcap/utils" "github.com/foxglove/mcap/go/mcap" @@ -30,14 +23,10 @@ func RecoverRun( w io.Writer, ops *RecoverOptions, ) error { -<<<<<<< Updated upstream log.Println("RUNNING RECOVERY FUNCTION") -======= -<<<<<<< Updated upstream -======= + log.Println("RUNNING RECOVERY FUNCTION") ->>>>>>> Stashed changes ->>>>>>> Stashed changes + if ops == nil { ops = &RecoverOptions{ DecodeChunk: false, diff --git a/cloud_webserver_v2/localstack/init/01-s3.sh b/cloud_webserver_v2/localstack/init/01-s3.sh index f40f6e6..25f86a2 100755 --- a/cloud_webserver_v2/localstack/init/01-s3.sh +++ b/cloud_webserver_v2/localstack/init/01-s3.sh @@ -2,3 +2,6 @@ set -euo pipefail awslocal s3api create-bucket --bucket dops-dev || true +awslocal s3api create-bucket --bucket HT_proto || true +awslocal s3api create-bucket --bucket HT_CAN || true + From 7883ce91dcfb218ef931a4ccc0c8250e01550f8c Mon Sep 17 00:00:00 2001 From: huangjoseph45 Date: Mon, 6 Apr 2026 14:13:26 -0400 Subject: [PATCH 10/11] change file naming --- .../authentication/authetication_data.go | 17 +++++++++++++++++ .../internal/authentication/callback.go | 0 .../internal/authentication/login.go | 7 +++++++ .../internal/authentication/register.go | 1 + .../internal/background/mcap_jobs.go | 4 ++-- 5 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 cloud_webserver_v2/internal/authentication/authetication_data.go create mode 100644 cloud_webserver_v2/internal/authentication/callback.go create mode 100644 cloud_webserver_v2/internal/authentication/login.go create mode 100644 cloud_webserver_v2/internal/authentication/register.go diff --git a/cloud_webserver_v2/internal/authentication/authetication_data.go b/cloud_webserver_v2/internal/authentication/authetication_data.go new file mode 100644 index 0000000..b369843 --- /dev/null +++ b/cloud_webserver_v2/internal/authentication/authetication_data.go @@ -0,0 +1,17 @@ +package authentication + +type Discovery struct { + AuthorizationEndpoint string `json:"authorization_endpoint"` + TokenEndpoint string `json:"token_endpoint"` + UserinfoEndpoint string `json:"userinfo_endpoint"` + JwksURI string `json:"jwks_uri"` + EndSessionEndpoint string `json:"end_session_endpoint"` +} + +var DiscoveryConfig = Discovery{ + AuthorizationEndpoint: "https://sso.gatech.edu/cas/oidc/oidcAuthorize", + TokenEndpoint: "https://sso.gatech.edu/cas/oidc/oidcAccessToken", + UserinfoEndpoint: "https://sso.gatech.edu/cas/oidc/oidcProfile", + JwksURI: "https://sso.gatech.edu/cas/oidc/jwks", + EndSessionEndpoint: "https://sso.gatech.edu/cas/oidc/oidcLogout", +} diff --git a/cloud_webserver_v2/internal/authentication/callback.go b/cloud_webserver_v2/internal/authentication/callback.go new file mode 100644 index 0000000..e69de29 diff --git a/cloud_webserver_v2/internal/authentication/login.go b/cloud_webserver_v2/internal/authentication/login.go new file mode 100644 index 0000000..4fa1496 --- /dev/null +++ b/cloud_webserver_v2/internal/authentication/login.go @@ -0,0 +1,7 @@ +package authentication + +import "net/http" + +func login(w http.ResponseWriter, r *http.Request) { + +} diff --git a/cloud_webserver_v2/internal/authentication/register.go b/cloud_webserver_v2/internal/authentication/register.go new file mode 100644 index 0000000..706c4de --- /dev/null +++ b/cloud_webserver_v2/internal/authentication/register.go @@ -0,0 +1 @@ +package authentication diff --git a/cloud_webserver_v2/internal/background/mcap_jobs.go b/cloud_webserver_v2/internal/background/mcap_jobs.go index d41519f..f862629 100644 --- a/cloud_webserver_v2/internal/background/mcap_jobs.go +++ b/cloud_webserver_v2/internal/background/mcap_jobs.go @@ -38,7 +38,7 @@ func (p *PostProcessMCAPUploadJob) ProcessFileJob(fp *FileProcessor, job *FileJo } defer reader.Close() - file, err := os.Create(fmt.Sprintf("%s-recovered.mcap", job.Filename)) + file, err := os.Create(fmt.Sprintf("%s-recovered.mcap", strings.Trim(job.Filename, ".mcap"))) if err != nil { } defer file.Close() @@ -89,7 +89,7 @@ func (p *PostProcessMCAPUploadJob) ProcessFileJob(fp *FileProcessor, job *FileJo defer mcapFileS3Reader.Close() recordId := primitive.NewObjectID() - mcapFileName := fmt.Sprintf("%s-recovered.mcap", job.Filename) + mcapFileName := fmt.Sprintf("%s-recovered.mcap", strings.Trim(job.Filename, ".mcap")) mcapObjectFilePath := fmt.Sprintf("%s/%s", recordId.Hex(), mcapFileName) err = fp.s3Repository.WriteObjectReader(ctx, mcapFileS3Reader, mcapObjectFilePath) if err != nil { From c56a4e843185caa6ed4017fed8e8110420d131c4 Mon Sep 17 00:00:00 2001 From: Joseph Huang Date: Tue, 7 Apr 2026 10:29:39 -0400 Subject: [PATCH 11/11] Delete cloud_webserver_v2/internal/authentication directory removed in-progress auth --- .../authentication/authetication_data.go | 17 ----------------- .../internal/authentication/callback.go | 0 .../internal/authentication/login.go | 7 ------- .../internal/authentication/register.go | 1 - 4 files changed, 25 deletions(-) delete mode 100644 cloud_webserver_v2/internal/authentication/authetication_data.go delete mode 100644 cloud_webserver_v2/internal/authentication/callback.go delete mode 100644 cloud_webserver_v2/internal/authentication/login.go delete mode 100644 cloud_webserver_v2/internal/authentication/register.go diff --git a/cloud_webserver_v2/internal/authentication/authetication_data.go b/cloud_webserver_v2/internal/authentication/authetication_data.go deleted file mode 100644 index b369843..0000000 --- a/cloud_webserver_v2/internal/authentication/authetication_data.go +++ /dev/null @@ -1,17 +0,0 @@ -package authentication - -type Discovery struct { - AuthorizationEndpoint string `json:"authorization_endpoint"` - TokenEndpoint string `json:"token_endpoint"` - UserinfoEndpoint string `json:"userinfo_endpoint"` - JwksURI string `json:"jwks_uri"` - EndSessionEndpoint string `json:"end_session_endpoint"` -} - -var DiscoveryConfig = Discovery{ - AuthorizationEndpoint: "https://sso.gatech.edu/cas/oidc/oidcAuthorize", - TokenEndpoint: "https://sso.gatech.edu/cas/oidc/oidcAccessToken", - UserinfoEndpoint: "https://sso.gatech.edu/cas/oidc/oidcProfile", - JwksURI: "https://sso.gatech.edu/cas/oidc/jwks", - EndSessionEndpoint: "https://sso.gatech.edu/cas/oidc/oidcLogout", -} diff --git a/cloud_webserver_v2/internal/authentication/callback.go b/cloud_webserver_v2/internal/authentication/callback.go deleted file mode 100644 index e69de29..0000000 diff --git a/cloud_webserver_v2/internal/authentication/login.go b/cloud_webserver_v2/internal/authentication/login.go deleted file mode 100644 index 4fa1496..0000000 --- a/cloud_webserver_v2/internal/authentication/login.go +++ /dev/null @@ -1,7 +0,0 @@ -package authentication - -import "net/http" - -func login(w http.ResponseWriter, r *http.Request) { - -} diff --git a/cloud_webserver_v2/internal/authentication/register.go b/cloud_webserver_v2/internal/authentication/register.go deleted file mode 100644 index 706c4de..0000000 --- a/cloud_webserver_v2/internal/authentication/register.go +++ /dev/null @@ -1 +0,0 @@ -package authentication