Class: Wavefront::Distribution
- Includes:
- Mixins
- Defined in:
- lib/wavefront-sdk/distribution.rb
Overview
Help a user write histogram distributions to a Wavefront proxy
Instance Attribute Summary
Attributes inherited from Write
#creds, #logger, #opts, #writer
Instance Method Summary collapse
-
#array2dist(values) ⇒ String
Turn an array of arrays into a the values part of a distribution.
- #data_format ⇒ Object
- #default_port ⇒ Object
-
#dist_hash(dist) ⇒ Object
rubocop:disable Metrics/AbcSize.
- #distribution_interval(dist) ⇒ Object
-
#distribution_timestamp(dist) ⇒ Object
rubocop:enable Metrics/AbcSize.
-
#hash_to_wf(dist) ⇒ Object
Convert a validated point to a string conforming to docs.wavefront.com/proxies_histograms.html.
-
#mk_distribution(*args) ⇒ Array[Array]
Make a distribution from a lot of numbers.
- #mk_wf_distribution(*args) ⇒ Object
- #validation ⇒ Object
Methods included from Mixins
#log, #parse_relative_time, #parse_time, #relative_time, #time_multiplier, #valid_relative_time?
Methods inherited from Write
#chunk_size, #close, #composite_response, #defaults, #initialize, #manage_conn, #open, #paths_to_deltas, #point_hash, #raw, #response_results, #send_point, #setup_options, #tags_or_nothing, #write, #write_delta
Methods included from Validators
#uuid?, #wf_account_id?, #wf_alert_id?, #wf_alert_severity?, #wf_apitoken_id?, #wf_aws_external_id?, #wf_cloudintegration_id?, #wf_dashboard_id?, #wf_derivedmetric_id?, #wf_distribution?, #wf_distribution_count?, #wf_distribution_interval?, #wf_distribution_values?, #wf_epoch?, #wf_event_id?, #wf_granularity?, #wf_ingestionpolicy_id?, #wf_integration_id?, #wf_link_id?, #wf_link_template?, #wf_maintenance_window_id?, #wf_message_id?, #wf_metric_name?, #wf_metricspolicy_id?, #wf_monitoredapplication_id?, #wf_monitoredcluster_id?, #wf_ms_ts?, #wf_name?, #wf_notificant_id?, #wf_permission?, #wf_point?, #wf_point_tag?, #wf_point_tags?, #wf_proxy_id?, #wf_role_id?, #wf_sampling_value?, #wf_savedsearch_entity?, #wf_savedsearch_id?, #wf_serviceaccount_id?, #wf_source_id?, #wf_spansamplingpolicy_id?, #wf_string?, #wf_tag?, #wf_trace?, #wf_ts?, #wf_user_id?, #wf_usergroup_id?, #wf_value?, #wf_version?, #wf_webhook_id?
Constructor Details
This class inherits a constructor from Wavefront::Write
Instance Method Details
#array2dist(values) ⇒ String
Turn an array of arrays into a the values part of a distribution
92 93 94 95 96 |
# File 'lib/wavefront-sdk/distribution.rb', line 92 def array2dist(values) values.map do |x, v| format('#%<count>i %<value>s', count: x, value: v) end.join(' ') end |
#data_format ⇒ Object
46 47 48 |
# File 'lib/wavefront-sdk/distribution.rb', line 46 def data_format :histogram end |
#default_port ⇒ Object
42 43 44 |
# File 'lib/wavefront-sdk/distribution.rb', line 42 def default_port 40_000 end |
#dist_hash(dist) ⇒ Object
rubocop:disable Metrics/AbcSize
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/wavefront-sdk/distribution.rb', line 69 def dist_hash(dist) dist.dup.tap do |d| d[:interval] = distribution_interval(dist) d[:ts] = (dist) d[:value] = array2dist(dist[:value]) d[:source] ||= HOSTNAME d[:tags] = (d[:tags]) d[:opttags] = (opts[:tags]) end end |
#distribution_interval(dist) ⇒ Object
85 86 87 |
# File 'lib/wavefront-sdk/distribution.rb', line 85 def distribution_interval(dist) dist[:interval].to_s.upcase end |
#distribution_timestamp(dist) ⇒ Object
rubocop:enable Metrics/AbcSize
81 82 83 |
# File 'lib/wavefront-sdk/distribution.rb', line 81 def (dist) parse_time(dist.fetch(:ts, Time.now)) end |
#hash_to_wf(dist) ⇒ Object
Convert a validated point to a string conforming to docs.wavefront.com/proxies_histograms.html. No validation is done here.
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/wavefront-sdk/distribution.rb', line 57 def hash_to_wf(dist) logger.log("writer subclass #{writer}", :debug) raise unless dist.key?(:interval) && dist.key?(:path) format('!%<interval>s %<ts>i %<value>s %<path>s source=%<source>s ' \ '%<tags>s %<opttags>s', dist_hash(dist)).squeeze(' ').strip rescue RuntimeError raise Wavefront::Exception::InvalidDistribution end |
#mk_distribution(*args) ⇒ Array[Array]
Make a distribution from a lot of numbers. The returned distribution is an array of arrays ready for dropping into #write. If you need a “real” Wavefront representation of the distribution, use #mk_wf_distribution.
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/wavefront-sdk/distribution.rb', line 22 def mk_distribution(*args) flat = args.flatten raw = flat.first.is_a?(String) ? flat.first.split : flat hash = raw.each_with_object(Hash.new(0)) do |v, sum| sum[v] += 1 sum end hash.to_a.map { |a, b| [b, a.to_f] } end |
#mk_wf_distribution(*args) ⇒ Object
34 35 36 |
# File 'lib/wavefront-sdk/distribution.rb', line 34 def mk_wf_distribution(*args) array2dist(mk_distribution(args)) end |
#validation ⇒ Object
38 39 40 |
# File 'lib/wavefront-sdk/distribution.rb', line 38 def validation :wf_distribution? end |