Class: Azure::Storage::Common::Service::StorageService

Inherits:
Core::SignedService show all
Defined in:
lib/azure/storage/common/service/storage_service.rb

Overview

A base class for StorageService implementations

Class Attribute Summary collapse

Instance Attribute Summary collapse

Attributes inherited from Core::SignedService

#account_name, #signer

Attributes inherited from Core::FilteredService

#filters

Attributes inherited from Core::Service

#client, #host

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Core::FilteredService

#with_filter

Constructor Details

#initialize(signer = nil, account_name = nil, options = {}, &block) ⇒ StorageService

Create a new instance of the StorageService

Parameters:

  • signer (Azure::Core::Auth::Signer) (defaults to: nil)

    An implementation of Signer used for signing requests. (optional, Default=Azure::Storage::CommonAuth::SharedKey.new)

  • account_name (String) (defaults to: nil)

    The account name (optional, Default=Azure::Storage.storage_account_name)

  • options (Azure::Storage::CommonConfigurable) (defaults to: {})

    the client configuration context



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,  = nil, options = {}, &block)
  StorageService.register_request_callback(&block) if block_given?
  client_config = options[:client]
  signer = signer || Azure::Storage::Common::Core::Auth::SharedKey.new(
    client_config.,
    client_config.storage_access_key) if client_config.storage_access_key
  signer = signer || Azure::Storage::Common::Core::Auth::SharedAccessSignatureSigner.new(
    client_config.,
    client_config.storage_sas_token)
  @storage_service_host = { primary: "", secondary: "" };
  super(signer, , options)
end

Class Attribute Details

.request_callbackProc

Returns The callback before the request is signed and sent.

Returns:

  • (Proc)

    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_prefixProc

Returns Get or set the user agent prefix.

Returns:

  • (Proc)

    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_hostHash

Returns Get or set the storage service host.

Returns:

  • (Hash)

    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(options = {}, body = nil)
  headers = {}
  headers.merge!("x-ms-client-request-id" => options[:request_id]) if options[: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 decide

    which location the request should be sent to.
    
  • :request_location_mode - RequestLocationMode. Specifies the location used to indicate

    which 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_callbackObject

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 = {}, options = {})
  super(method, uri, body, StorageService.common_headers(options, body).merge(headers), options)
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 decide

    which location the request should be sent to.
    
  • :request_location_mode - RequestLocationMode. Specifies the location used to indicate

    which 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 = {}, options = {})
  location_mode =
    if options[:location_mode].nil?
      LocationMode::PRIMARY_ONLY
    else
      options[:location_mode]
    end

  request_location_mode =
    if options[:request_location_mode].nil?
      RequestLocationMode::PRIMARY_ONLY
    else
      request_location_mode = options[:request_location_mode]
    end

  location = StorageService.get_location location_mode, request_location_mode

  if self.client.is_a?(Azure::Storage::Common::Client) && self.client.options[:use_path_style_uri]
     =  location
    path = path.length > 0 ?  + "/" + path : 
  end

  @host = location == StorageLocation::PRIMARY ? @storage_service_host[:primary] : @storage_service_host[:secondary]

  encode = options[:encode].nil? ? false : options[: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]
  options[:primary_uri] = super path, query

  @host = storage_service_host[:secondary]
  options[:secondary_uri] = super path, query

  if location == StorageLocation::PRIMARY
    @host = @storage_service_host[:primary]
    return options[:primary_uri]
  else
    @host = @storage_service_host[:secondary]
    return options[: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 (location)
  if location == StorageLocation::PRIMARY
    self.client.options[:storage_account_name]
  else
    self.client.options[: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 recorded

    in 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(options = {})
  query = {}
  StorageService.with_query query, "timeout", options[:timeout].to_s if options[:timeout]

  response = call(:get, service_properties_uri(query), nil, {}, options)
  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 recorded

    in 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(options = {})
  query = {}
  StorageService.with_query query, "timeout", options[:timeout].to_s if options[:timeout]

  options.update(
    location_mode: LocationMode::SECONDARY_ONLY,
    request_location_mode: RequestLocationMode::SECONDARY_ONLY)
  response = call(:get, service_stats_uri(query, options), nil, {}, options)
  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 = {}, options = {})
  query.update(restype: "service", comp: "stats")
  generate_uri("", query, options)
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 recorded

    in 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, options = {})
  query = {}
  StorageService.with_query query, "timeout", options[:timeout].to_s if options[:timeout]

  body = Serialization.service_properties_to_xml service_properties
  call(:put, service_properties_uri(query), body, {}, options)
  nil
end