package files import ( "encoding/json" "fmt" "os" "strings" "github.com/google/uuid" "edge-infra.dev/pkg/edge/datasync/chirp/model" gzip "edge-infra.dev/pkg/edge/datasync/internal/compressor" "edge-infra.dev/pkg/edge/datasync/internal/config" ) func createMessageFile(message model.MessageData, pathToPartition string, chirpConfig *config.Config) ([]byte, error) { fileNameWithoutExt := fmt.Sprintf("%s_%s", message.Type, message.ID) fullPathWithoutExt := fmt.Sprintf("%s/%s", pathToPartition, fileNameWithoutExt) filePath := fullPathWithoutExt + ".msg" shouldCompress := config.ShouldCompressMessage(message.Type, chirpConfig) if shouldCompress { err := gzip.CompressToFile(filePath, message.Payload) if err != nil { return nil, err } compressedContent, err := gzip.ReadCompressedContent(filePath) if err != nil { return nil, err } return compressedContent, nil } err := os.WriteFile(filePath, message.Payload, 0644) if err != nil { return nil, err } return message.Payload, nil } func createMetadateFile(messageID uuid.UUID, metadata *model.MessageMetadata, pathToPartition string) error { fileNameWithoutExt := fmt.Sprintf("%s_%s", metadata.MessageType, messageID) fullPathWithoutExt := fmt.Sprintf("%s/%s", pathToPartition, fileNameWithoutExt) content, _ := json.MarshalIndent(metadata, "", " ") tempExt := ".dsm.tmp" tempPath := fullPathWithoutExt + tempExt f, err := os.Create(tempPath) if err != nil { return err } defer f.Close() err = os.WriteFile(tempPath, content, 0644) if err != nil { return err } dsmFullPath := strings.ReplaceAll(tempPath, tempExt, ".dsm") err = os.Rename(tempPath, dsmFullPath) if err != nil { return err } return nil }