Class: JPSClient::UploadConfig
- Inherits:
-
Object
- Object
- JPSClient::UploadConfig
- Defined in:
- lib/jpsclient/upload/upload_config.rb
Overview
上传配置类
Instance Attribute Summary collapse
-
#attach_url ⇒ Object
Returns the value of attribute attach_url.
-
#bucket_name ⇒ Object
Returns the value of attribute bucket_name.
-
#chunk_size_mb ⇒ Object
分片大小(MB).
-
#concurrent_workers ⇒ Object
并发上传工作线程数.
-
#default_url ⇒ Object
Returns the value of attribute default_url.
-
#max_retry_times ⇒ Object
每个分片的最大重试次数.
-
#media_bucket_name ⇒ Object
媒体文件存储桶.
-
#media_default_url ⇒ Object
媒体文件默认路径.
-
#media_region ⇒ Object
媒体文件上传区域.
-
#region ⇒ Object
Returns the value of attribute region.
-
#timeout_seconds ⇒ Object
单个分片的超时时间(秒).
-
#upload_type ⇒ Object
上传类型.
Class Method Summary collapse
-
.determine_concurrent_workers(config_value) ⇒ Object
智能确定并发工作线程数 策略:使用 min(CPU自适应值, 配置最大值).
-
.from_json(json_config) ⇒ Object
从 JSON 配置创建实例.
Instance Method Summary collapse
-
#chunk_size_bytes ⇒ Object
获取分片大小(字节).
-
#initialize(region: nil, bucket_name: nil, default_url: nil, attach_url: nil, upload_type: nil, concurrent_workers: nil, chunk_size_mb: nil, max_retry_times: nil, timeout_seconds: nil, media_region: nil, media_bucket_name: nil, media_default_url: nil) ⇒ UploadConfig
constructor
A new instance of UploadConfig.
-
#to_h ⇒ Object
转换为 Hash.
-
#valid? ⇒ Boolean
验证配置完整性 注意:移除了对 access_key_id 和 access_key_secret 的验证 因为客户端使用预签名 URL,不直接使用 AWS 凭证 AWS 凭证由 JPS 服务器端管理.
Constructor Details
#initialize(region: nil, bucket_name: nil, default_url: nil, attach_url: nil, upload_type: nil, concurrent_workers: nil, chunk_size_mb: nil, max_retry_times: nil, timeout_seconds: nil, media_region: nil, media_bucket_name: nil, media_default_url: nil) ⇒ UploadConfig
Returns a new instance of UploadConfig.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/jpsclient/upload/upload_config.rb', line 19 def initialize( region: nil, bucket_name: nil, default_url: nil, attach_url: nil, upload_type: nil, concurrent_workers: nil, chunk_size_mb: nil, max_retry_times: nil, timeout_seconds: nil, media_region: nil, media_bucket_name: nil, media_default_url: nil ) @region = region @bucket_name = bucket_name @default_url = default_url @attach_url = attach_url @upload_type = upload_type @concurrent_workers = concurrent_workers @chunk_size_mb = chunk_size_mb @max_retry_times = max_retry_times @timeout_seconds = timeout_seconds @media_region = media_region @media_bucket_name = media_bucket_name @media_default_url = media_default_url end |
Instance Attribute Details
#attach_url ⇒ Object
Returns the value of attribute attach_url.
9 10 11 |
# File 'lib/jpsclient/upload/upload_config.rb', line 9 def attach_url @attach_url end |
#bucket_name ⇒ Object
Returns the value of attribute bucket_name.
7 8 9 |
# File 'lib/jpsclient/upload/upload_config.rb', line 7 def bucket_name @bucket_name end |
#chunk_size_mb ⇒ Object
分片大小(MB)
12 13 14 |
# File 'lib/jpsclient/upload/upload_config.rb', line 12 def chunk_size_mb @chunk_size_mb end |
#concurrent_workers ⇒ Object
并发上传工作线程数
11 12 13 |
# File 'lib/jpsclient/upload/upload_config.rb', line 11 def concurrent_workers @concurrent_workers end |
#default_url ⇒ Object
Returns the value of attribute default_url.
8 9 10 |
# File 'lib/jpsclient/upload/upload_config.rb', line 8 def default_url @default_url end |
#max_retry_times ⇒ Object
每个分片的最大重试次数
13 14 15 |
# File 'lib/jpsclient/upload/upload_config.rb', line 13 def max_retry_times @max_retry_times end |
#media_bucket_name ⇒ Object
媒体文件存储桶
16 17 18 |
# File 'lib/jpsclient/upload/upload_config.rb', line 16 def media_bucket_name @media_bucket_name end |
#media_default_url ⇒ Object
媒体文件默认路径
17 18 19 |
# File 'lib/jpsclient/upload/upload_config.rb', line 17 def media_default_url @media_default_url end |
#media_region ⇒ Object
媒体文件上传区域
15 16 17 |
# File 'lib/jpsclient/upload/upload_config.rb', line 15 def media_region @media_region end |
#region ⇒ Object
Returns the value of attribute region.
6 7 8 |
# File 'lib/jpsclient/upload/upload_config.rb', line 6 def region @region end |
#timeout_seconds ⇒ Object
单个分片的超时时间(秒)
14 15 16 |
# File 'lib/jpsclient/upload/upload_config.rb', line 14 def timeout_seconds @timeout_seconds end |
#upload_type ⇒ Object
上传类型
10 11 12 |
# File 'lib/jpsclient/upload/upload_config.rb', line 10 def upload_type @upload_type end |
Class Method Details
.determine_concurrent_workers(config_value) ⇒ Object
智能确定并发工作线程数策略:使用 min(CPU自适应值, 配置最大值)
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/jpsclient/upload/upload_config.rb', line 72 def self.determine_concurrent_workers(config_value) cpu_count = Etc.nprocessors # 根据CPU计算推荐值(I/O密集型任务,使用CPU核心数的2倍) cpu_recommended = cpu_count * 2 # 处理不同的配置值 if config_value.nil? # 没有配置,使用CPU推荐值,但限制在4-16之间 return [[cpu_recommended, 4].max, 16].min elsif config_value.to_s.downcase == 'auto' # 自动模式:使用CPU推荐值,限制在4-16之间 return [[cpu_recommended, 4].max, 16].min elsif config_value.is_a?(String) && config_value.include?('cpu') # 支持 "cpu*2", "cpu*3" 这样的配置 if config_value =~ /cpu\s*\*\s*(\d+)/ multiplier = $1.to_i calculated = cpu_count * multiplier # 限制在 2-30 之间 return [[calculated, 2].max, 30].min end end # 配置值是数字时,作为最大限制 max_workers = config_value.to_i if max_workers > 0 # 实际使用:min(CPU推荐值, 配置最大值) # 但至少保证2个线程 actual_workers = [cpu_recommended, max_workers].min return [actual_workers, 2].max end # 默认值 return 5 end |
.from_json(json_config) ⇒ Object
从 JSON 配置创建实例
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/jpsclient/upload/upload_config.rb', line 48 def self.from_json(json_config) return nil unless json_config # 动态计算并发数 concurrent_workers = determine_concurrent_workers(json_config['concurrent_workers']) new( region: json_config['region'] || "ap-southeast-1", bucket_name: json_config['bucket_name'] || "pgy-resource-new", default_url: json_config['default_url'] || "resource/", attach_url: json_config['attach_url'] || "attach_file/", upload_type: json_config['upload_type'] || "s3", concurrent_workers: concurrent_workers, chunk_size_mb: json_config['chunk_size_mb'] || 10, max_retry_times: json_config['max_retry_times'] || 6, # 每个分片重试6次 timeout_seconds: json_config['timeout_seconds'] || 600, # 单个分片超时10分钟 media_region: json_config['media_region'] || "ap-east-1", media_bucket_name: json_config['media_bucket_name'] || "jps-resource", media_default_url: json_config['media_default_url'] || "resource/" ) end |
Instance Method Details
#chunk_size_bytes ⇒ Object
获取分片大小(字节)
118 119 120 |
# File 'lib/jpsclient/upload/upload_config.rb', line 118 def chunk_size_bytes @chunk_size_mb * 1024 * 1024 end |
#to_h ⇒ Object
转换为 Hash
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/jpsclient/upload/upload_config.rb', line 123 def to_h { 'region' => @region, 'bucket_name' => @bucket_name, 'default_url' => @default_url, 'attach_url' => @attach_url, 'upload_type' => @upload_type, 'concurrent_workers' => @concurrent_workers, 'chunk_size_mb' => @chunk_size_mb, 'max_retry_times' => @max_retry_times, 'timeout_seconds' => @timeout_seconds, 'media_region' => @media_region, 'media_bucket_name' => @media_bucket_name, 'media_default_url' => @media_default_url } end |
#valid? ⇒ Boolean
验证配置完整性注意:移除了对 access_key_id 和 access_key_secret 的验证因为客户端使用预签名 URL,不直接使用 AWS 凭证AWS 凭证由 JPS 服务器端管理
112 113 114 115 |
# File 'lib/jpsclient/upload/upload_config.rb', line 112 def valid? !@region.nil? && !@bucket_name.nil? && !@default_url.nil? && !@attach_url.nil? end |