class UC3CloudWatch::MetricsClient
Query for repository images by tag
Public Class Methods
Source
# File app/lib/client/cloudwatch/metrics.rb, line 10 def self.client UC3::UC3Client.clients.fetch(self.class.to_s, MetricsClient.new) end
Source
# File app/lib/client/cloudwatch/metrics.rb, line 14 def initialize begin @cw_client = Aws::CloudWatch::Client.new rescue StandardError => e # puts e raise "Unable to load configuration data from S3: #{e}" end super(enabled: true) rescue StandardError => e # puts e super(enabled: false, message: e.to_s) end
Calls superclass method
UC3::UC3Client::new
Public Instance Methods
Source
# File app/lib/client/cloudwatch/metrics.rb, line 45 def metric_query(fname, period_min: 15) query = [] %w[aws-s3 sdsc wasabi].each do |cloud| %w[access audit].each do |method| query << { id: "#{cloud.gsub('-', '_')}_#{method}", metric_stat: { metric: { namespace: 'merritt', metric_name: 'retrieval-duration-sec', dimensions: [ { name: 'filename', value: fname }, { name: 'cloud_service', value: cloud }, { name: 'retrieval_method', value: method } ] }, period: period_min * 60, stat: 'Average' }, return_data: true } end end query end
Source
# File app/lib/client/cloudwatch/metrics.rb, line 27 def metric_table(rows) cols = [ AdminUI::Column.new(:timestamp, header: 'Timestamp') ] %w[aws-s3 sdsc wasabi].each do |cloud| %w[access audit].each do |method| cols << AdminUI::Column.new("#{cloud.gsub('-', '_')}_#{method}", header: "#{cloud} #{method}") end end table = AdminUI::FilterTable.new( columns: cols ) rows.each do |row| table.add_row(AdminUI::Row.make_row(table.columns, row)) end table end
Source
# File app/lib/client/cloudwatch/metrics.rb, line 72 def retrieval_duration_sec_metrics(fname, period_min: 15, offset_days: 7) return { message: 'CloudWatch client not configured' } unless enabled results = {} next_token = nil starttime = Time.now - (offset_days * 24 * 3600) endtime = Time.now loop do metresults = @cw_client.get_metric_data( metric_data_queries: metric_query(fname, period_min: period_min), start_time: starttime, end_time: endtime, next_token: next_token ) next_token = metresults.next_token metresults.metric_data_results.each do |result| col = result.id result.timestamps.each_with_index do |tstamp, index| value = result.values[index] next unless value loctstamp = DateTime.parse(tstamp.to_s).to_time.localtime.strftime('%Y-%m-%d %H:%M:%S') results[loctstamp] ||= {} results[loctstamp][col] = value end end break unless next_token end rows = [] results.keys.sort.map do |tstamp| results[tstamp][:timestamp] = tstamp rows << results[tstamp] end rows end