class Azure::Storage::Common::Service::StorageService

A base class for StorageService implementations

Attributes

request_callback[R]

@!attribute request_callback @return [Proc] The callback before the request is signed and sent

user_agent_prefix[RW]

@!attribute user_agent_prefix @return [Proc] Get or set the user agent prefix

storage_service_host[RW]

@!attribute storage_service_host @return [Hash] Get or set the storage service host

Public Class Methods

add_metadata_to_headers(metadata, headers) click to toggle source

Adds metadata properties to header hash with required prefix

  • :metadata - A Hash of metadata name/value pairs

  • :headers - A Hash of HTTP headers

# File lib/azure/storage/common/service/storage_service.rb, line 281
def add_metadata_to_headers(metadata, headers)
  if metadata
    metadata.each do |key, value|
      headers["x-ms-meta-#{key}"] = value
    end
  end
end
common_headers(options = {}, body = nil) click to toggle source

Declares a default hash object for request headers

# 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) click to toggle source

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

# 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
new(signer = nil, account_name = nil, options = {}, &block) click to toggle source

Create a new instance of the StorageService

@param signer [Azure::Core::Auth::Signer] An implementation of Signer used for signing requests.

(optional, Default=Azure::Storage::CommonAuth::SharedKey.new)

@param account_name [String] The account name (optional, Default=Azure::Storage.storage_account_name) @param options [Azure::Storage::CommonConfigurable] the client configuration context

Calls superclass method Azure::Core::SignedService::new
# File lib/azure/storage/common/service/storage_service.rb, line 46
def initialize(signer = nil, account_name = 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.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, options)
end
register_request_callback() click to toggle source

Registers the callback when sending the request The headers in the request can be viewed or changed in the code block

# File lib/azure/storage/common/service/storage_service.rb, line 242
def register_request_callback
  @request_callback = Proc.new
end
with_header(object, key, value)

Adds a header with the value

  • :headers - A Hash of HTTP headers

  • :name - The header name

  • :value - The value

Alias for: with_value
with_query(object, key, value)

Adds a query parameter

  • :query - A Hash of HTTP query

  • :name - The parameter name

  • :value - The value

Alias for: with_value
with_value(object, key, value) click to toggle source

Adds a value to the Hash object

  • :object - A Hash object

  • :key - The key name

  • :value - The value

# 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
Also aliased as: with_header, with_query

Public Instance Methods

call(method, uri, body = nil, headers = {}, options = {}) click to toggle source
Calls superclass method Azure::Core::SignedService#call
# 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 = {}) click to toggle source

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

Calls superclass method
# 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]
    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 = 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) click to toggle source

Get account path according to the location settings.

Returns the account path

# File lib/azure/storage/common/service/storage_service.rb, line 223
def get_account_path(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 = {}) click to toggle source

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

# 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 = {}) click to toggle source

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

# 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 = {}) click to toggle source

Public: Generate the URI for the service properties

  • :query - see Azure::Storage::CommonServices::GetServiceProperties#call documentation.

Returns a URI.

# 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 = {}) click to toggle source

Public: Generate the URI for the service statistics

  • :query - see Azure::Storage::CommonServices::GetServiceStats#call documentation.

Returns a URI.

# 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 = {}) click to toggle source

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.

# 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