DataConnectors/microsoft-logstash-output-azure-loganalytics/lib/logstash/logAnalyticsClient/logstashLoganalyticsConfiguration.rb (115 lines of code) (raw):

# encoding: utf-8 class LogstashLoganalyticsOutputConfiguration def initialize(workspace_id, workspace_key, custom_log_table_name, logger) @workspace_id = workspace_id @workspace_key = workspace_key @custom_log_table_name = custom_log_table_name @logger = logger # Delay between each resending of a message @RETRANSMISSION_DELAY = 2 @MIN_MESSAGE_AMOUNT = 100 # Maximum of 30 MB per post to Log Analytics Data Collector API. # This is a size limit for a single post. # If the data from a single post that exceeds 30 MB, you should split it. @loganalytics_api_data_limit = 30 * 1000 * 1000 # Taking 4K safety buffer @MAX_SIZE_BYTES = @loganalytics_api_data_limit - 10000 end def validate_configuration() if @retransmission_time < 0 raise ArgumentError, "Setting retransmission_time which sets the time spent for resending each failed messages must be positive integer. [retransmission_time=#{@retransmission_time}]." elsif @max_items < @MIN_MESSAGE_AMOUNT raise ArgumentError, "Setting max_items to value must be greater then #{@MIN_MESSAGE_AMOUNT}." elsif @workspace_id.empty? or @workspace_key.empty? or @custom_log_table_name.empty? raise ArgumentError, "Malformed configuration , the following arguments can not be null or empty.[workspace_id=#{@workspace_id} , workspace_key=#{@workspace_key} , custom_log_table_name=#{@custom_log_table_name}]" elsif not @custom_log_table_name.match(/^[[:alpha:][:digit:]_]+$/) raise ArgumentError, 'custom_log_table_name must be only alpha characters, numbers and underscore.' elsif @custom_log_table_name.length > 100 raise ArgumentError, 'custom_log_table_name must not exceed 100 characters.' elsif custom_log_table_name.empty? raise ArgumentError, 'custom_log_table_name should not be empty.' elsif @key_names.length > 500 raise ArgumentError, 'Azure Loganalytics limits the amount of columns to 500 in each table.' end @logger.info("Azure Loganalytics configuration was found valid.") # If all validation pass then configuration is valid return true end # def validate_configuration def azure_resource_id @azure_resource_id end def RETRANSMISSION_DELAY @RETRANSMISSION_DELAY end def MAX_SIZE_BYTES @MAX_SIZE_BYTES end def amount_resizing @amount_resizing end def retransmission_time @retransmission_time end def proxy @proxy end def logger @logger end def decrease_factor @decrease_factor end def workspace_id @workspace_id end def workspace_key @workspace_key end def custom_log_table_name @custom_log_table_name end def endpoint @endpoint end def time_generated_field @time_generated_field end def key_names @key_names end def max_items @max_items end def plugin_flush_interval @plugin_flush_interval end def MIN_MESSAGE_AMOUNT @MIN_MESSAGE_AMOUNT end def max_items=(new_max_items) @max_items = new_max_items end def endpoint=(new_endpoint) @endpoint = new_endpoint end def time_generated_field=(new_time_generated_field) @time_generated_field = new_time_generated_field end def key_names=(new_key_names) @key_names = new_key_names end def plugin_flush_interval=(new_plugin_flush_interval) @plugin_flush_interval = new_plugin_flush_interval end def decrease_factor=(new_decrease_factor) @decrease_factor = new_decrease_factor end def amount_resizing=(new_amount_resizing) @amount_resizing = new_amount_resizing end def max_items=(new_max_items) @max_items = new_max_items end def azure_resource_id=(new_azure_resource_id) @azure_resource_id = new_azure_resource_id end def proxy=(new_proxy) @proxy = new_proxy end def retransmission_time=(new_retransmission_time) @retransmission_time = new_retransmission_time end end