x-pack/lib/geoip_database_management/metric.rb (52 lines of code) (raw):
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License;
# you may not use this file except in compliance with the Elastic License.
require_relative 'util'
module LogStash module GeoipDatabaseManagement
class Metric
include GeoipDatabaseManagement::Util
DATABASE_INIT = "init".freeze
DATABASE_UP_TO_DATE = "up_to_date".freeze
DATABASE_TO_BE_EXPIRED = "to_be_expired".freeze
DATABASE_EXPIRED = "expired".freeze
DOWNLOAD_SUCCEEDED = "succeeded".freeze
DOWNLOAD_FAILED = "failed".freeze
DOWNLOAD_UPDATING = "updating".freeze
def initialize(metric)
# Fallback when testing plugin and no metric collector are correctly configured.
@metric = metric || LogStash::Instrument::NamespacedNullMetric.new
end
def initialize_metrics(metadatas)
metadatas.each do |row|
type = row[Metadata::Column::DATABASE_TYPE]
@metric.namespace([:database, type.to_sym]).tap do |n|
n.gauge(:status, DATABASE_INIT)
n.gauge(:last_updated_at, unix_time_to_iso8601(row[Metadata::Column::CHECK_AT]))
n.gauge(:fail_check_in_days, time_diff_in_days(row[Metadata::Column::CHECK_AT]))
end
end
@metric.namespace([:download_stats]).tap do |n|
check_at = metadatas.map { |row| row[Metadata::Column::CHECK_AT].to_i }.max
n.gauge(:last_checked_at, unix_time_to_iso8601(check_at))
end
end
def update_download_stats(is_success)
@metric.namespace([:download_stats]).tap do |n|
n.gauge(:last_checked_at, Time.now.iso8601)
if is_success
n.increment(:successes, 1)
n.gauge(:status, DOWNLOAD_SUCCEEDED)
else
n.increment(:failures, 1)
n.gauge(:status, DOWNLOAD_FAILED)
end
end
end
def set_download_status_updating
@metric.namespace([:download_stats]).gauge(:status, DOWNLOAD_UPDATING)
end
def update_database_status(database_type, database_status, metadata, days_without_update)
@metric.namespace([:database, database_type.to_sym]).tap do |n|
n.gauge(:status, database_status)
n.gauge(:last_updated_at, unix_time_to_iso8601(metadata[Metadata::Column::CHECK_AT]))
n.gauge(:fail_check_in_days, days_without_update)
end
end
end
end end