summaryrefslogtreecommitdiff
path: root/config
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/config-b2.sample.json10
-rw-r--r--config/config-local-unix.sample.json2
-rw-r--r--config/config-s3.sample.json53
-rw-r--r--config/config.go64
4 files changed, 115 insertions, 14 deletions
diff --git a/config/config-b2.sample.json b/config/config-b2.sample.json
index 043c1a6..60022dd 100644
--- a/config/config-b2.sample.json
+++ b/config/config-b2.sample.json
@@ -1,5 +1,4 @@
{
- "ForceRewrite": false,
"MaxProcessThreads": 4,
"MaxPreProcessThreads": 12,
"LogLevel": "info",
@@ -18,7 +17,9 @@
"jpg",
"jpeg",
"png"
- ]
+ ],
+ "CacheProcessed": true,
+ "CacheProcessedCsvPath": "cache.csv"
},
"Converters": [
{
@@ -31,6 +32,7 @@
}
},
"Output": {
+ "RewriteOn": "UnequalHashInCache",
"Storage": {
"Type": "b2",
"Config": {
@@ -53,6 +55,7 @@
}
},
"Output": {
+ "RewriteOn": "UnequalHashInCache",
"Storage": {
"Type": "b2",
"Config": {
@@ -75,6 +78,7 @@
}
},
"Output": {
+ "RewriteOn": "UnequalHashInCache",
"Storage": {
"Type": "b2",
"Config": {
@@ -97,6 +101,7 @@
}
},
"Output": {
+ "RewriteOn": "UnequalHashInCache",
"Storage": {
"Type": "b2",
"Config": {
@@ -119,6 +124,7 @@
}
},
"Output": {
+ "RewriteOn": "UnequalHashInCache",
"Storage": {
"Type": "b2",
"Config": {
diff --git a/config/config-local-unix.sample.json b/config/config-local-unix.sample.json
index 97f69f1..941d995 100644
--- a/config/config-local-unix.sample.json
+++ b/config/config-local-unix.sample.json
@@ -1,5 +1,4 @@
{
- "ForceRewrite": false,
"MaxProcessThreads": 4,
"MaxPreProcessThreads": 12,
"LogLevel": "debug",
@@ -27,6 +26,7 @@
}
},
"Output": {
+ "RewriteOn": "UnequalHashInCache",
"Storage": {
"Type": "local-unix",
"Config": {
diff --git a/config/config-s3.sample.json b/config/config-s3.sample.json
new file mode 100644
index 0000000..5b067a5
--- /dev/null
+++ b/config/config-s3.sample.json
@@ -0,0 +1,53 @@
+{
+ "MaxProcessThreads": 4,
+ "MaxPreProcessThreads": 12,
+ "LogLevel": "info",
+ "Input": {
+ "Storage": {
+ "Type": "s3",
+ "Config": {
+ "BucketName": "my-photos",
+ "Region": "",
+ "Prefix": "full/",
+ "Endpoint": "https://minio.local",
+ "UsePathStyle": true,
+ "AccessKeyID": "${AWS_ACCESS_KEY_ID}",
+ "SecretAccessKey": "${AWS_SECRET_ACCESS_KEY}"
+ }
+ },
+ "KnownExtensions": [
+ "jpg",
+ "jpeg",
+ "png"
+ ],
+ "CacheProcessed": true,
+ "CacheProcessedCsvPath": "cache.csv"
+ },
+ "Converters": [
+ {
+ "Type": "webp",
+ "Config": {
+ "Quality": 80,
+ "Size": {
+ "MaxWidth": 320,
+ "MaxHeight": 0
+ }
+ },
+ "Output": {
+ "RewriteOn": "UnequalHashInCache",
+ "Storage": {
+ "Type": "s3",
+ "Config": {
+ "BucketName": "my-photos",
+ "Region": "",
+ "Prefix": "webp-320p/",
+ "Endpoint": "https://minio.local",
+ "UsePathStyle": true,
+ "AccessKeyID": "${AWS_ACCESS_KEY_ID}",
+ "SecretAccessKey": "${AWS_SECRET_ACCESS_KEY}"
+ }
+ }
+ }
+ }
+ ]
+}
diff --git a/config/config.go b/config/config.go
index ab051b2..06fa94f 100644
--- a/config/config.go
+++ b/config/config.go
@@ -14,17 +14,18 @@ type Config struct {
Converters []ConverterConfig `json:"Converters" validate:"required"`
MaxProcessThreads int `json:"MaxProcessThreads" validate:"required,min=1"`
MaxPreProcessThreads int `json:"MaxPreProcessThreads" validate:"min=1;gtefield=MaxProcessThreads"`
- ForceRewrite bool `json:"ForceRewrite" validate:"required"`
LogLevel slog.Level `json:"LogLevel" validate:"required"`
}
type InputConfig struct {
- Storage InputStorageConfig `json:"Storage" validate:"required"`
- KnownExtensions []string `json:"KnownExtensions" validate:"required,min=0,dive,min=1"`
+ Storage InputStorageConfig `json:"Storage" validate:"required"`
+ KnownExtensions []string `json:"KnownExtensions" validate:"required,min=0,dive,min=1"`
+ CacheProcessed bool `json:"CacheProcessed"`
+ CacheProcessedCsvPath string `json:"CacheProcessedCsvPath" validate:"filepath"`
}
type InputStorageConfig struct {
- Type string `json:"Type" validate:"required,oneof=b2 local-unix"`
+ Type string `json:"Type" validate:"required,oneof=b2 s3 local-unix"`
Config any `json:"Config" validate:"required"`
}
@@ -47,6 +48,12 @@ func (sc *InputStorageConfig) UnmarshalJSON(data []byte) error {
return fmt.Errorf("unmarshal B2Config: %w", err)
}
sc.Config = &b2Config
+ case "s3":
+ var s3Config S3Config
+ if err := json.Unmarshal(tmp.Config, &s3Config); err != nil {
+ return fmt.Errorf("unmarshal S3Config: %w", err)
+ }
+ sc.Config = &s3Config
case "local-unix":
var localUnixConfig InputLocalUnixConfig
if err := json.Unmarshal(tmp.Config, &localUnixConfig); err != nil {
@@ -61,7 +68,7 @@ func (sc *InputStorageConfig) UnmarshalJSON(data []byte) error {
}
type ConverterConfig struct {
- Type string `json:"Type" validate:"required,oneof=webp"`
+ Type string `json:"Type" validate:"required,oneof=webp jpeg"`
Config any `json:"Config" validate:"required"`
Output OutputConfig `json:"Output" validate:"required"`
}
@@ -87,6 +94,12 @@ func (pc *ConverterConfig) UnmarshalJSON(data []byte) error {
return fmt.Errorf("unmarshal WebpConfig: %w", err)
}
pc.Config = &webpConfig
+ case "jpeg":
+ var jpegConfig JpegConfig
+ if err := json.Unmarshal(tmp.Config, &jpegConfig); err != nil {
+ return fmt.Errorf("unmarshal JpegConfig: %w", err)
+ }
+ pc.Config = &jpegConfig
default:
return fmt.Errorf("unsupported storage type: %s", tmp.Type)
}
@@ -96,16 +109,22 @@ func (pc *ConverterConfig) UnmarshalJSON(data []byte) error {
type WebpConfig struct {
Quality int `json:"Quality" validate:"required,min=1,max=100"`
- Size SizeConfig `json:"Size" validate:"required"`
+ Size SizeConfig `json:"Size"`
+}
+
+type JpegConfig struct {
+ ExtensionName string `json:"ExtensionName" validate:"alpha"`
+ Quality int `json:"Quality" validate:"required,min=1,max=100"`
+ Size SizeConfig `json:"Size"`
}
type SizeConfig struct {
- MaxWidth int `json:"MaxWidth" validate:"required,min=0"`
- MaxHeight int `json:"MaxHeight" validate:"required,min=0"`
+ MaxWidth int `json:"MaxWidth"`
+ MaxHeight int `json:"MaxHeight"`
}
type OutputStorageConfig struct {
- Type string `json:"Type" validate:"required,oneof=b2 local-unix"`
+ Type string `json:"Type" validate:"required,oneof=b2 s3 local-unix"`
Config any `json:"Config" validate:"required"`
}
@@ -128,6 +147,12 @@ func (sc *OutputStorageConfig) UnmarshalJSON(data []byte) error {
return fmt.Errorf("unmarshal B2Config: %w", err)
}
sc.Config = &b2Config
+ case "s3":
+ var s3Config S3Config
+ if err := json.Unmarshal(tmp.Config, &s3Config); err != nil {
+ return fmt.Errorf("unmarshal S3Config: %w", err)
+ }
+ sc.Config = &s3Config
case "local-unix":
var localUnixConfig OutputLocalUnixConfig
if err := json.Unmarshal(tmp.Config, &localUnixConfig); err != nil {
@@ -149,17 +174,28 @@ type B2Config struct {
ApplicationKey string `json:"ApplicationKey"`
}
+type S3Config struct {
+ BucketName string `json:"BucketName" validate:"required,min=1"`
+ Region string `json:"Region" validate:"required,min=1"`
+ Prefix string `json:"Prefix"`
+ Endpoint string `json:"Endpoint"`
+ UsePathStyle bool `json:"UsePathStyle"`
+ AccessKeyID string `json:"AccessKeyID"`
+ SecretAccessKey string `json:"SecretAccessKey"`
+}
+
type InputLocalUnixConfig struct {
MaxDepth int `json:"MaxDepth" validate:"required,min=0"`
Path string `json:"Path" validate:"required,min=1"`
}
type OutputConfig struct {
- Storage OutputStorageConfig `json:"Storage" validate:"required"`
+ RewriteOn string `json:"RewriteOn" validate:"oneof=Never UnequalHashInCache Always"`
+ Storage OutputStorageConfig `json:"Storage" validate:"required"`
}
type OutputLocalUnixConfig struct {
- Path string `json:"Path" validate:"required,min=1"`
+ Path string `json:"Path" validate:"required,min=1,dirpath"`
DirPermissionMode string `json:"DirPermissionMode" validate:"required,min=3"`
FilePermissionMode string `json:"FilePermissionMode" validate:"required,min=3"`
AttributesImplementation string `json:"AttributesImplementation" validate:"required,oneof=xattr none"`
@@ -177,6 +213,12 @@ func LoadConfig(path string, config *Config) error {
return err
}
+ for i := range config.Converters {
+ if config.Converters[i].Output.RewriteOn == "" {
+ config.Converters[i].Output.RewriteOn = "UnequalHashInCache"
+ }
+ }
+
return nil
}