Class: Azure::Storage::Common::Service::StorageService
- Inherits:
-
Core::SignedService
- Object
- Core::SignedService
- Azure::Storage::Common::Service::StorageService
- Defined in:
- lib/azure/storage/common/service/storage_service.rb
Overview
A base class for StorageService implementations
Class Attribute Summary collapse
-
.request_callback ⇒ Proc
The callback before the request is signed and sent.
-
.user_agent_prefix ⇒ Proc
Get or set the user agent prefix.
Instance Attribute Summary collapse
-
#storage_service_host ⇒ Hash
Get or set the storage service host.
Class Method Summary collapse
-
.add_metadata_to_headers(metadata, headers) ⇒ Object
Adds metadata properties to header hash with required prefix.
-
.common_headers(options = {}, body = nil) ⇒ Object
Declares a default hash object for request headers.
-
.get_location(location_mode, request_location_mode) ⇒ Object
Get the request location.
-
.register_request_callback ⇒ Object
Registers the callback when sending the request The headers in the request can be viewed or changed in the code block.
-
.with_value(object, key, value) ⇒ Object
(also: with_header, with_query)
Adds a value to the Hash object.
Instance Method Summary collapse
- #call(method, uri, body = nil, headers = {}, options = {}) ⇒ Object
-
#generate_uri(path = "", query = {}, options = {}) ⇒ Object
Overrides the base class implementation to determine the request uri.
-
#get_account_path(location) ⇒ Object
Get account path according to the location settings.
-
#get_service_properties(options = {}) ⇒ Object
Public: Get Storage Service properties.
-
#get_service_stats(options = {}) ⇒ Object
Public: Retrieves statistics related to replication for the service.
-
#initialize(signer = nil, account_name = nil, options = {}, &block) ⇒ StorageService
constructor
Create a new instance of the StorageService.
-
#service_properties_uri(query = {}) ⇒ Object
Public: Generate the URI for the service properties.
-
#service_stats_uri(query = {}, options = {}) ⇒ Object
Public: Generate the URI for the service statistics.
-
#set_service_properties(service_properties, options = {}) ⇒ Object
Public: Set Storage Service properties.
Constructor Details
#initialize(signer = nil, account_name = nil, options = {}, &block) ⇒ StorageService
Create a new instance of the StorageService
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 46 def initialize(signer = nil, account_name = nil, = {}, &block) StorageService.register_request_callback(&block) if block_given? client_config = [:client] signer = signer || Azure::Storage::Common::Core::Auth::SharedKey.new( client_config.storage_account_name, client_config.storage_access_key) if client_config.storage_access_key signer = signer || Azure::Storage::Common::Core::Auth::SharedAccessSignatureSigner.new( client_config.storage_account_name, client_config.storage_sas_token) @storage_service_host = { primary: "", secondary: "" }; super(signer, account_name, ) end |
Class Attribute Details
.request_callback ⇒ Proc
Returns The callback before the request is signed and sent.
238 239 240 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 238 def request_callback @request_callback end |
.user_agent_prefix ⇒ Proc
Returns Get or set the user agent prefix.
234 235 236 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 234 def user_agent_prefix @user_agent_prefix end |
Instance Attribute Details
#storage_service_host ⇒ Hash
Returns Get or set the storage service host.
38 39 40 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 38 def storage_service_host @storage_service_host end |
Class Method Details
.add_metadata_to_headers(metadata, headers) ⇒ Object
Adds metadata properties to header hash with required prefix
-
:metadata
- A Hash of metadata name/value pairs -
:headers
- A Hash of HTTP headers
281 282 283 284 285 286 287 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 281 def (, headers) if .each do |key, value| headers["x-ms-meta-#{key}"] = value end end end |
.common_headers(options = {}, body = nil) ⇒ Object
Declares a default hash object for request headers
313 314 315 316 317 318 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 313 def common_headers( = {}, body = nil) headers = {} headers.merge!("x-ms-client-request-id" => [:request_id]) if [:request_id] @request_callback.call(headers) if @request_callback headers end |
.get_location(location_mode, request_location_mode) ⇒ Object
Get the request location.
-
:location_mode
- LocationMode. Specifies the location mode used to decidewhich location the request should be sent to.
-
:request_location_mode
- RequestLocationMode. Specifies the location used to indicatewhich location the operation (REST API) can be performed against. This is determined by the API and cannot be specified by the users.
Returns the reqeust location
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 255 def get_location(location_mode, request_location_mode) if request_location_mode == RequestLocationMode::PRIMARY_ONLY && location_mode == LocationMode::SECONDARY_ONLY raise InvalidOptionsError, "This operation can only be executed against the primary storage location." end if request_location_mode == RequestLocationMode::SECONDARY_ONLY && location_mode == LocationMode::PRIMARY_ONLY raise InvalidOptionsError, "This operation can only be executed against the secondary storage location." end if request_location_mode == RequestLocationMode::PRIMARY_ONLY return StorageLocation::PRIMARY elsif request_location_mode == RequestLocationMode::SECONDARY_ONLY return StorageLocation::SECONDARY end if location_mode == LocationMode::PRIMARY_ONLY || location_mode == LocationMode::PRIMARY_THEN_SECONDARY StorageLocation::PRIMARY elsif location_mode == LocationMode::SECONDARY_ONLY || location_mode == LocationMode::SECONDARY_THEN_PRIMARY StorageLocation::SECONDARY end end |
.register_request_callback ⇒ Object
Registers the callback when sending the request The headers in the request can be viewed or changed in the code block
242 243 244 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 242 def register_request_callback @request_callback = Proc.new end |
.with_value(object, key, value) ⇒ Object Also known as: with_header, with_query
Adds a value to the Hash object
-
:object
- A Hash object -
:key
- The key name -
:value
- The value
294 295 296 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 294 def with_value(object, key, value) object[key] = value.to_s if value end |
Instance Method Details
#call(method, uri, body = nil, headers = {}, options = {}) ⇒ Object
59 60 61 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 59 def call(method, uri, body = nil, headers = {}, = {}) super(method, uri, body, StorageService.common_headers(, body).merge(headers), ) end |
#generate_uri(path = "", query = {}, options = {}) ⇒ Object
Overrides the base class implementation to determine the request uri
path - String. the request path query - Hash. the query parameters
Options
-
:encode
- bool. Specifies whether to encode the path. -
:location_mode
- LocationMode. Specifies the location mode used to decidewhich location the request should be sent to.
-
:request_location_mode
- RequestLocationMode. Specifies the location used to indicatewhich location the operation (REST API) can be performed against. This is determined by the API and cannot be specified by the users.
Returns the uri hash
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 167 def generate_uri(path = "", query = {}, = {}) location_mode = if [:location_mode].nil? LocationMode::PRIMARY_ONLY else [:location_mode] end request_location_mode = if [:request_location_mode].nil? RequestLocationMode::PRIMARY_ONLY else request_location_mode = [:request_location_mode] end location = StorageService.get_location location_mode, request_location_mode if self.client.is_a?(Azure::Storage::Common::Client) && self.client.[:use_path_style_uri] account_path = get_account_path location path = path.length > 0 ? account_path + "/" + path : account_path end @host = location == StorageLocation::PRIMARY ? @storage_service_host[:primary] : @storage_service_host[:secondary] encode = [:encode].nil? ? false : [:encode] if encode path = CGI.escape(path.encode("UTF-8")) # decode the forward slashes to match what the server expects. path = path.gsub(/%2F/, "/") # decode the backward slashes to match what the server expects. path = path.gsub(/%5C/, "/") # Re-encode the spaces (encoded as space) to the % encoding. path = path.gsub(/\+/, "%20") end @host = storage_service_host[:primary] [:primary_uri] = super path, query @host = storage_service_host[:secondary] [:secondary_uri] = super path, query if location == StorageLocation::PRIMARY @host = @storage_service_host[:primary] return [:primary_uri] else @host = @storage_service_host[:secondary] return [:secondary_uri] end end |
#get_account_path(location) ⇒ Object
Get account path according to the location settings.
-
:location
- StorageLocation. Specifies the request location.
Returns the account path
223 224 225 226 227 228 229 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 223 def get_account_path(location) if location == StorageLocation::PRIMARY self.client.[:storage_account_name] else self.client.[:storage_account_name] + "-secondary" end end |
#get_service_properties(options = {}) ⇒ Object
Public: Get Storage Service properties
See msdn.microsoft.com/en-us/library/azure/hh452239 See msdn.microsoft.com/en-us/library/azure/hh452243
Options
-
:timeout
- Integer. A timeout in seconds. -
:request_id
- String. Provides a client-generated, opaque value with a 1 KB character limit that is recordedin the analytics logs when storage analytics logging is enabled.
Returns a Hash with the service properties or nil if the operation failed
75 76 77 78 79 80 81 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 75 def get_service_properties( = {}) query = {} StorageService.with_query query, "timeout", [:timeout].to_s if [:timeout] response = call(:get, service_properties_uri(query), nil, {}, ) Serialization.service_properties_from_xml response.body end |
#get_service_stats(options = {}) ⇒ Object
Public: Retrieves statistics related to replication for the service. It is only available on the secondary location endpoint when read-access geo-redundant replication is enabled for the storage account.
See docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-stats See docs.microsoft.com/en-us/rest/api/storageservices/get-queue-service-stats See docs.microsoft.com/en-us/rest/api/storageservices/get-table-service-stats
Options
-
:timeout
- Integer. A timeout in seconds. -
:request_id
- String. Provides a client-generated, opaque value with a 1 KB character limit that is recordedin the analytics logs when storage analytics logging is enabled.
Returns a Hash with the service statistics or nil if the operation failed
121 122 123 124 125 126 127 128 129 130 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 121 def get_service_stats( = {}) query = {} StorageService.with_query query, "timeout", [:timeout].to_s if [:timeout] .update( location_mode: LocationMode::SECONDARY_ONLY, request_location_mode: RequestLocationMode::SECONDARY_ONLY) response = call(:get, service_stats_uri(query, ), nil, {}, ) Serialization.service_stats_from_xml response.body end |
#service_properties_uri(query = {}) ⇒ Object
Public: Generate the URI for the service properties
-
:query
- see Azure::Storage::CommonServices::GetServiceProperties#call documentation.
Returns a URI.
137 138 139 140 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 137 def service_properties_uri(query = {}) query.update(restype: "service", comp: "properties") generate_uri("", query) end |
#service_stats_uri(query = {}, options = {}) ⇒ Object
Public: Generate the URI for the service statistics
-
:query
- see Azure::Storage::CommonServices::GetServiceStats#call documentation.
Returns a URI.
147 148 149 150 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 147 def service_stats_uri(query = {}, = {}) query.update(restype: "service", comp: "stats") generate_uri("", query, ) end |
#set_service_properties(service_properties, options = {}) ⇒ Object
Public: Set Storage Service properties
service_properties - An instance of Azure::Storage::CommonService::StorageServiceProperties
See msdn.microsoft.com/en-us/library/azure/hh452235 See msdn.microsoft.com/en-us/library/azure/hh452232
Options
-
:timeout
- Integer. A timeout in seconds. -
:request_id
- String. Provides a client-generated, opaque value with a 1 KB character limit that is recordedin the analytics logs when storage analytics logging is enabled.
Returns boolean indicating success.
97 98 99 100 101 102 103 104 |
# File 'lib/azure/storage/common/service/storage_service.rb', line 97 def set_service_properties(service_properties, = {}) query = {} StorageService.with_query query, "timeout", [:timeout].to_s if [:timeout] body = Serialization.service_properties_to_xml service_properties call(:put, service_properties_uri(query), body, {}, ) nil end |