Module: Wavefront::Validators
- Included in:
- Base
- Defined in:
- lib/wavefront-sdk/validators.rb
Overview
A module of mixins to validate input. The Wavefront documentation lays down restrictions on types and sizes of various inputs, which we will check on the user’s behalf. Most of the information used in this file comes from community.wavefront.com/docs/DOC-1031 Some comes from the Swagger API documentation, some has come directly from Wavefront engineers.
rubocop:disable Metrics/ModuleLength
Instance Method Summary collapse
-
#wf_alert_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront alert ID.
-
#wf_alert_severity?(v) ⇒ Boolean
Ensure the given argument is a valid alert severity.
-
#wf_cloudintegration_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront cloud integration ID.
-
#wf_dashboard_id?(v) ⇒ Boolean
There doesn’t seem to be a public statement on what’s allowed in a dashboard name.
-
#wf_derivedmetric_id?(v) ⇒ Boolean
Ensure the given argument is a valid derived metric ID.
-
#wf_epoch?(v) ⇒ Boolean
Ensure the given argument is a valid epoch timestamp.
-
#wf_event_id?(v) ⇒ Boolean
Ensure the given argument is a valid event ID.
-
#wf_granularity?(v) ⇒ Boolean
Ensure the given argument is a valid query granularity.
-
#wf_integration_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront integration ID.
-
#wf_link_id?(v) ⇒ Boolean
Ensure the given argument is a valid external Link ID.
-
#wf_link_template?(v) ⇒ Boolean
Ensure the given argument is a valid external link template.
-
#wf_maintenance_window_id?(v) ⇒ Boolean
Ensure the given argument is a valid maintenance window ID.
-
#wf_message_id?(v) ⇒ Boolean
Ensure the given argument is a valid message ID.
-
#wf_metric_name?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront metric name, or path.
-
#wf_ms_ts?(v) ⇒ Boolean
Ensure the given argument is a valid millisecond epoch timestamp.
-
#wf_name?(v) ⇒ Boolean
Ensure the given argument is a valid name, for instance for an event.
-
#wf_notificant_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront notificant ID.
-
#wf_point?(v) ⇒ Boolean
Validate a point so it conforms to the standard described in community.wavefront.com/docs/DOC-1031.
-
#wf_point_tag?(k, v) ⇒ Boolean
Validate a single point tag, probably on behalf of #wf_point_tags?.
-
#wf_point_tags?(tags) ⇒ Boolean
Ensure a hash of key:value point tags are value.
-
#wf_proxy_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront proxy ID.
-
#wf_savedsearch_entity?(v) ⇒ Boolean
Ensure the given argument is a valid saved search entity type.
-
#wf_savedsearch_id?(v) ⇒ Boolean
Ensure the given argument is a valid saved search ID.
-
#wf_source_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront source name.
-
#wf_string?(v) ⇒ Boolean
Ensure the given argument is a valid string, for a tag name.
-
#wf_tag?(*v) ⇒ Boolean
Ensure one, or an array, of tags are valid.
-
#wf_ts?(v) ⇒ Boolean
Ensure the given argument is a valid timestamp.
-
#wf_user_id?(v) ⇒ Boolean
Ensure the given argument is a valid user.
-
#wf_value?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront value.
-
#wf_version?(v) ⇒ Boolean
Ensure the given argument is a valid version number.
-
#wf_webhook_id?(v) ⇒ Boolean
Ensure the given argument is a valid webhook ID.
Instance Method Details
#wf_alert_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront alert ID. Alerts are identified by the epoch-nanosecond at which they were created.
209 210 211 212 213 |
# File 'lib/wavefront-sdk/validators.rb', line 209 def wf_alert_id?(v) v = v.to_s if v.is_a?(Numeric) return true if v.is_a?(String) && v.match(/^\d{13}$/) raise Wavefront::Exception::InvalidAlertId end |
#wf_alert_severity?(v) ⇒ Boolean
Ensure the given argument is a valid alert severity
310 311 312 313 |
# File 'lib/wavefront-sdk/validators.rb', line 310 def wf_alert_severity?(v) return true if %w[INFO SMOKE WARN SEVERE].include?(v) raise Wavefront::Exception::InvalidAlertSeverity end |
#wf_cloudintegration_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront cloud integration ID
223 224 225 226 227 228 229 230 231 |
# File 'lib/wavefront-sdk/validators.rb', line 223 def wf_cloudintegration_id?(v) if v.is_a?(String) && v.match( /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/ ) return true end raise Wavefront::Exception::InvalidCloudIntegrationId end |
#wf_dashboard_id?(v) ⇒ Boolean
There doesn’t seem to be a public statement on what’s allowed in a dashboard name. For now I’m going to assume up to 255 word characters.
242 243 244 245 |
# File 'lib/wavefront-sdk/validators.rb', line 242 def wf_dashboard_id?(v) return true if v.is_a?(String) && v.size < 256 && v.match(/^[\w\-]+$/) raise Wavefront::Exception::InvalidDashboardId end |
#wf_derivedmetric_id?(v) ⇒ Boolean
Ensure the given argument is a valid derived metric ID. IDs are the millisecond epoch timestamp at which the derived metric was created.
255 256 257 258 259 260 |
# File 'lib/wavefront-sdk/validators.rb', line 255 def wf_derivedmetric_id?(v) v = v.to_s if v.is_a?(Numeric) return true if v.is_a?(String) && v =~ /^\d{13}$/ raise Wavefront::Exception::InvalidDerivedMetricId end |
#wf_epoch?(v) ⇒ Boolean
Ensure the given argument is a valid epoch timestamp. Again, no range checking.
106 107 108 109 |
# File 'lib/wavefront-sdk/validators.rb', line 106 def wf_epoch?(v) return true if v.is_a?(Numeric) raise Wavefront::Exception::InvalidTimestamp end |
#wf_event_id?(v) ⇒ Boolean
Ensure the given argument is a valid event ID. Event IDs are an epoch-millisecond timestamp followed by a : followed by the name of the event.
271 272 273 274 |
# File 'lib/wavefront-sdk/validators.rb', line 271 def wf_event_id?(v) return true if v.is_a?(String) && v =~ /^\d{13}:.+/ raise Wavefront::Exception::InvalidEventId end |
#wf_granularity?(v) ⇒ Boolean
Ensure the given argument is a valid query granularity
334 335 336 337 |
# File 'lib/wavefront-sdk/validators.rb', line 334 def wf_granularity?(v) return true if %w[d h m s].include?(v.to_s) raise Wavefront::Exception::InvalidGranularity end |
#wf_integration_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront integration ID. These appear to be lower-case strings.
438 439 440 441 |
# File 'lib/wavefront-sdk/validators.rb', line 438 def wf_integration_id?(v) return true if v.is_a?(String) && v =~ /^[a-z0-9]+$/ raise Wavefront::Exception::InvalidIntegrationId end |
#wf_link_id?(v) ⇒ Boolean
Ensure the given argument is a valid external Link ID
283 284 285 286 |
# File 'lib/wavefront-sdk/validators.rb', line 283 def wf_link_id?(v) return true if v.is_a?(String) && v =~ /^\w{16}$/ raise Wavefront::Exception::InvalidExternalLinkId end |
#wf_link_template?(v) ⇒ Boolean
Ensure the given argument is a valid external link template
21 22 23 24 25 |
# File 'lib/wavefront-sdk/validators.rb', line 21 def wf_link_template?(v) return true if v.is_a?(String) && v.start_with?('http://', 'https://') raise Wavefront::Exception::InvalidLinkTemplate end |
#wf_maintenance_window_id?(v) ⇒ Boolean
Ensure the given argument is a valid maintenance window ID. IDs are the millisecond epoch timestamp at which the window was created.
296 297 298 299 300 301 |
# File 'lib/wavefront-sdk/validators.rb', line 296 def wf_maintenance_window_id?(v) v = v.to_s if v.is_a?(Numeric) return true if v.is_a?(String) && v =~ /^\d{13}$/ raise Wavefront::Exception::InvalidMaintenanceWindowId end |
#wf_message_id?(v) ⇒ Boolean
Ensure the given argument is a valid message ID
322 323 324 325 |
# File 'lib/wavefront-sdk/validators.rb', line 322 def (v) return true if v.is_a?(String) && v =~ /^\w+::\w+$/ raise Wavefront::Exception::InvalidMessageId end |
#wf_metric_name?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront metric name, or path.
is not valid.
35 36 37 38 39 40 41 42 43 |
# File 'lib/wavefront-sdk/validators.rb', line 35 def wf_metric_name?(v) if v.is_a?(String) && v.size < 1024 && (v.match(/^#{DELTA}?[\w\-\.]+$/) || v.match(%r{^\"#{DELTA}?[\w\-\.\/,]+\"$})) return true end raise Wavefront::Exception::InvalidMetricName end |
#wf_ms_ts?(v) ⇒ Boolean
Ensure the given argument is a valid millisecond epoch timestamp. We do no checking of the value, because who am I to say that the user doesn’t want to send a point relating to 1ms after the epoch, or a thousand years in the future?
94 95 96 97 |
# File 'lib/wavefront-sdk/validators.rb', line 94 def wf_ms_ts?(v) return true if v.is_a?(Numeric) raise Wavefront::Exception::InvalidTimestamp end |
#wf_name?(v) ⇒ Boolean
Ensure the given argument is a valid name, for instance for an event. Names can contain, AFAIK, word characters.
raise Wavefront::Exception::InvalidName if name is not valid
52 53 54 55 |
# File 'lib/wavefront-sdk/validators.rb', line 52 def wf_name?(v) return true if v.is_a?(String) && v.size < 1024 && v =~ /^\w+$/ raise Wavefront::Exception::InvalidName end |
#wf_notificant_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront notificant ID.
425 426 427 428 |
# File 'lib/wavefront-sdk/validators.rb', line 425 def wf_notificant_id?(v) return true if v.is_a?(String) && v =~ /^\w{16}$/ raise Wavefront::Exception::InvalidNotificantId end |
#wf_point?(v) ⇒ Boolean
Validate a point so it conforms to the standard described in community.wavefront.com/docs/DOC-1031
408 409 410 411 412 413 414 415 |
# File 'lib/wavefront-sdk/validators.rb', line 408 def wf_point?(v) wf_metric_name?(v[:path]) wf_value?(v[:value]) wf_epoch?(v[:ts]) if v[:ts] wf_source_id?(v[:source]) if v[:source] (v[:tags]) if v[:tags] true end |
#wf_point_tag?(k, v) ⇒ Boolean
Validate a single point tag, probably on behalf of #wf_point_tags?
177 178 179 180 181 |
# File 'lib/wavefront-sdk/validators.rb', line 177 def wf_point_tag?(k, v) return if k && v && (k.size + v.size < 254) && k =~ /^[\w\-\.:]+$/ && v !~ /\\$/ raise Wavefront::Exception::InvalidTag end |
#wf_point_tags?(tags) ⇒ Boolean
Ensure a hash of key:value point tags are value. Not to be confused with source tags.
165 166 167 168 |
# File 'lib/wavefront-sdk/validators.rb', line 165 def () raise Wavefront::Exception::InvalidTag unless .is_a?(Hash) .each { |k, v| wf_point_tag?(k, v) } end |
#wf_proxy_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront proxy ID
190 191 192 193 194 195 196 197 198 |
# File 'lib/wavefront-sdk/validators.rb', line 190 def wf_proxy_id?(v) if v.is_a?(String) && v.match( /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/ ) return true end raise Wavefront::Exception::InvalidProxyId end |
#wf_savedsearch_entity?(v) ⇒ Boolean
Ensure the given argument is a valid saved search entity type.
357 358 359 360 361 362 |
# File 'lib/wavefront-sdk/validators.rb', line 357 def wf_savedsearch_entity?(v) return true if %w[DASHBOARD ALERT MAINTENANCE_WINDOW NOTIFICANT EVENT SOURCE EXTERNAL_LINK AGENT CLOUD_INTEGRATION].include?(v) raise Wavefront::Exception::InvalidSavedSearchEntity end |
#wf_savedsearch_id?(v) ⇒ Boolean
Ensure the given argument is a valid saved search ID.
345 346 347 348 |
# File 'lib/wavefront-sdk/validators.rb', line 345 def wf_savedsearch_id?(v) return true if v.is_a?(String) && v =~ /^\w{8}$/ raise Wavefront::Exception::InvalidSavedSearchId end |
#wf_source_id?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront source name
371 372 373 374 375 |
# File 'lib/wavefront-sdk/validators.rb', line 371 def wf_source_id?(v) return true if v.is_a?(String) && v.match(/^[\w\.\-]+$/) && v.size < 1024 raise Wavefront::Exception::InvalidSourceId end |
#wf_string?(v) ⇒ Boolean
Ensure the given argument is a valid string, for a tag name.
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/wavefront-sdk/validators.rb', line 63 def wf_string?(v) # # Only allows PCRE "word" characters, spaces, full-stops and # commas in tags and descriptions. This might be too restrictive, # but if it is, this is the only place we need to change it. # return true if v.is_a?(String) && v.size < 1024 && v =~ /^[\-\w \.,]*$/ raise Wavefront::Exception::InvalidString end |
#wf_tag?(*v) ⇒ Boolean
Ensure one, or an array, of tags are valid. These tags are used as source tags, or tags for maintenance windows etc. They can contain letters, numbers, -, _ and :, and must be less than 256 characters long
120 121 122 123 124 125 126 127 128 |
# File 'lib/wavefront-sdk/validators.rb', line 120 def wf_tag?(*v) Array(*v).each do |t| unless t.is_a?(String) && t.size < 255 && t =~ /^[\w:\-\.]+$/ raise Wavefront::Exception::InvalidTag end end true end |
#wf_ts?(v) ⇒ Boolean
Ensure the given argument is a valid timestamp
80 81 82 83 |
# File 'lib/wavefront-sdk/validators.rb', line 80 def wf_ts?(v) return true if v.is_a?(Time) || v.is_a?(Date) raise Wavefront::Exception::InvalidTimestamp end |
#wf_user_id?(v) ⇒ Boolean
Ensure the given argument is a valid user.
383 384 385 386 387 |
# File 'lib/wavefront-sdk/validators.rb', line 383 def wf_user_id?(v) return true if v.is_a?(String) && v =~ /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i raise Wavefront::Exception::InvalidUserId end |
#wf_value?(v) ⇒ Boolean
Ensure the given argument is a valid Wavefront value. Can be any form of Numeric, including standard notation.
137 138 139 140 |
# File 'lib/wavefront-sdk/validators.rb', line 137 def wf_value?(v) return true if v.is_a?(Numeric) raise Wavefront::Exception::InvalidMetricValue end |
#wf_version?(v) ⇒ Boolean
Ensure the given argument is a valid version number
rubocop:disable Style/NumericPredicate
150 151 152 153 154 |
# File 'lib/wavefront-sdk/validators.rb', line 150 def wf_version?(v) v = v.to_i if v.is_a?(String) && v =~ /^\d+$/ return true if v.is_a?(Integer) && v > 0 raise Wavefront::Exception::InvalidVersion end |
#wf_webhook_id?(v) ⇒ Boolean
Ensure the given argument is a valid webhook ID.
395 396 397 398 |
# File 'lib/wavefront-sdk/validators.rb', line 395 def wf_webhook_id?(v) return true if v.is_a?(String) && v =~ /^[a-zA-Z0-9]{16}$/ raise Wavefront::Exception::InvalidWebhookId end |