mirror of
https://github.com/elastic/logstash.git
synced 2025-04-24 06:37:19 -04:00
- Switch to using milestone numbers instead of plugin status labels
(LOGSTASH-1137) - Rename plugin-status doc to plugin-milestones
This commit is contained in:
parent
43a519a7f6
commit
0e4410a1f0
135 changed files with 208 additions and 224 deletions
|
@ -21,7 +21,7 @@ class LogStashConfigDocGenerator
|
|||
/^ *class.*< *LogStash::(Outputs|Filters|Inputs)::(Base|Threadable)/ => \
|
||||
lambda { |m| set_class_description },
|
||||
/^ *config +[^=].*/ => lambda { |m| add_config(m[0]) },
|
||||
/^ *plugin_status .*/ => lambda { |m| set_plugin_status(m[0]) },
|
||||
/^ *milestone .*/ => lambda { |m| set_milestone(m[0]) },
|
||||
/^ *config_name .*/ => lambda { |m| set_config_name(m[0]) },
|
||||
/^ *flag[( ].*/ => lambda { |m| add_flag(m[0]) },
|
||||
/^ *(class|def|module) / => lambda { |m| clear_comments },
|
||||
|
@ -97,9 +97,8 @@ class LogStashConfigDocGenerator
|
|||
@name = name
|
||||
end # def set_config_name
|
||||
|
||||
def set_plugin_status(code)
|
||||
status = eval(code)
|
||||
@plugin_status = status
|
||||
def set_milestone(code)
|
||||
@milestone = eval(code)
|
||||
end
|
||||
|
||||
# pretend to be the config DSL and just get the name
|
||||
|
@ -119,10 +118,10 @@ class LogStashConfigDocGenerator
|
|||
return name
|
||||
end # def config_name
|
||||
|
||||
# pretend to be the config dsl's 'plugin_status' method
|
||||
def plugin_status(status)
|
||||
return status
|
||||
end # def plugin_status
|
||||
# pretend to be the config dsl's 'milestone' method
|
||||
def milestone(m)
|
||||
return m
|
||||
end # def milestone
|
||||
|
||||
def clear_comments
|
||||
@comments.clear
|
||||
|
@ -130,7 +129,7 @@ class LogStashConfigDocGenerator
|
|||
|
||||
def generate(file, settings)
|
||||
@class_description = ""
|
||||
@plugin_status = ""
|
||||
@milestone = ""
|
||||
@comments = []
|
||||
@attributes = Hash.new { |h,k| h[k] = {} }
|
||||
@flags = {}
|
||||
|
|
|
@ -3,7 +3,7 @@ title: logstash docs for <%= section %>s/<%= name %>
|
|||
layout: content_right
|
||||
---
|
||||
<h2><%= name %></h2>
|
||||
<h3>Status: <a href="../plugin-status"><%= @plugin_status %></a></h3>
|
||||
<h3>Milestone: <a href="../plugin-milestones"><%= @milestone %></a></h3>
|
||||
|
||||
<%= description %>
|
||||
|
||||
|
|
41
docs/plugin-milestones.md
Normal file
41
docs/plugin-milestones.md
Normal file
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
title: Plugin Milestones - logstash
|
||||
layout: content_right
|
||||
---
|
||||
# Plugin Milestones
|
||||
|
||||
Plugins (inputs/outputs/filters/codecs) have a milestone label in logstash.
|
||||
This is to provide an indicator to the end-user as to the kinds of changes
|
||||
a given plugin could have between logstash releases.
|
||||
|
||||
The desire here is to allow plugin developers to quickly iterate on possible
|
||||
new plugins while conveying to the end-user a set of expectations about that
|
||||
plugin.
|
||||
|
||||
## Milestone 1
|
||||
|
||||
Plugins at this milestone need your feedback to improve! Plugins at this
|
||||
milestone may change between releases as the community figures out the best way
|
||||
for the plugin to behave and be configured.
|
||||
|
||||
## Milestone 2
|
||||
|
||||
Plugins at this milestone are more likely to have backwards-compatibility to
|
||||
previous releases than do Milestone 1 plugins. This milestone also indicates
|
||||
a greater level of in-the-wild usage by the community than the previous
|
||||
milestone.
|
||||
|
||||
## Milestone 3
|
||||
|
||||
Plugins at this milestone have strong promises towards backwards-compatibility.
|
||||
This is enforced by tests to ensure behavior and configuration are changing
|
||||
wildly across releases.
|
||||
|
||||
## Milestone 0
|
||||
|
||||
This milestone appears at the bottom of the page because it is very
|
||||
infrequently used.
|
||||
|
||||
This milestone marker is used to generally indicate that a plugin has no
|
||||
active code maintainer nor does it have support from the community in terms
|
||||
of getting help.
|
|
@ -1,50 +0,0 @@
|
|||
---
|
||||
title: Plugin Status - logstash
|
||||
layout: content_right
|
||||
---
|
||||
# Plugin Status
|
||||
|
||||
Plugins (inputs/outputs/filters) have a status in logstash. This is to provide
|
||||
an indicator to the end-user as to the 'state' of the plugin.
|
||||
|
||||
Terminology is still being worked out but there are three general states -
|
||||
experimental, beta, stable.
|
||||
|
||||
The desire here is to allow people to quickly iterate on possible new plugins
|
||||
while conveying to the end-user a set of expectations about that plugin. This
|
||||
allows you to make more informed decisions about when and where to use the
|
||||
functionality provided by the new plugin.
|
||||
|
||||
## Unsupported
|
||||
|
||||
This plugin is not supported. It should work, but if you have any problems with
|
||||
it you are unlikely to find any help due to lack of experience in the community.
|
||||
|
||||
Additionally, this label may mean that a plugin has no active maintainer.
|
||||
|
||||
## Experimental
|
||||
|
||||
When a plugin is in the `experimental` state, it is essentially untested. This
|
||||
does not mean that it does not have any associated unit tests. This applies
|
||||
more to in-the-wild usage. Most new plugins will probably fit in this category.
|
||||
There is a chance that experimental plugins may be removed at some point. It is
|
||||
possible that an experimental plugin will be broken mid-release.
|
||||
|
||||
## Beta
|
||||
|
||||
Beta plugins are plugins that are in the process of being stabalized into a
|
||||
final form. Beta plugins will have a bit more wide-spread usage in the
|
||||
community. The API for these plugins has stabilized and is unlikely to change
|
||||
mid-release. Test cases may or may not exist.
|
||||
|
||||
## Stable
|
||||
|
||||
Stable plugins are plugins that you can comfortably rely on in production.
|
||||
These have full test cases.
|
||||
|
||||
# A note about output plugins
|
||||
|
||||
It's worth reminding users that `output` plugins are currently blocking (by
|
||||
design). If any output plugin fails, all output plugins are blocked. Please
|
||||
keep this in mind when using experimental output plugins as it could cause
|
||||
unintended side-effects.
|
|
@ -2,7 +2,7 @@ require "logstash/codecs/base"
|
|||
|
||||
class LogStash::Codecs::Dots < LogStash::Codecs::Base
|
||||
config_name "dots"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
public
|
||||
def decode(data)
|
||||
|
|
|
@ -5,7 +5,7 @@ require "json"
|
|||
class LogStash::Codecs::Json < LogStash::Codecs::Base
|
||||
config_name "json"
|
||||
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
public
|
||||
def decode(data)
|
||||
|
|
|
@ -4,7 +4,7 @@ require "logstash/codecs/spool"
|
|||
# This is the base class for logstash codecs.
|
||||
class LogStash::Codecs::JsonSpooler < LogStash::Codecs::Spool
|
||||
config_name "json_spooler"
|
||||
plugin_status 'experimental'
|
||||
milestone 1
|
||||
|
||||
public
|
||||
def decode(data)
|
||||
|
|
|
@ -4,7 +4,7 @@ require "msgpack"
|
|||
class LogStash::Codecs::Msgpack < LogStash::Codecs::Base
|
||||
config_name "json"
|
||||
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
config :format, :validate => :string, :default => nil
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ require "logstash/codecs/base"
|
|||
# This is the base class for logstash codecs.
|
||||
class LogStash::Codecs::Multiline < LogStash::Codecs::Base
|
||||
config_name "multiline"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The regular expression to match
|
||||
config :pattern, :validate => :string, :required => true
|
||||
|
|
|
@ -3,7 +3,7 @@ require "logstash/codecs/base"
|
|||
class LogStash::Codecs::Noop < LogStash::Codecs::Base
|
||||
config_name "noop"
|
||||
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
public
|
||||
def decode(data)
|
||||
|
|
|
@ -4,7 +4,7 @@ require "logstash/codecs/base"
|
|||
class LogStash::Codecs::Plain < LogStash::Codecs::Base
|
||||
config_name "plain"
|
||||
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# TODO(sissel): Document.
|
||||
config :format, :validate => :string, :default => nil
|
||||
|
|
|
@ -2,7 +2,7 @@ require "logstash/codecs/base"
|
|||
|
||||
class LogStash::Codecs::RubyDebug < LogStash::Codecs::Base
|
||||
config_name "rubydebug"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
def register
|
||||
require "ap"
|
||||
|
|
|
@ -2,9 +2,7 @@ require "logstash/codecs/base"
|
|||
|
||||
class LogStash::Codecs::Spool < LogStash::Codecs::Base
|
||||
config_name 'spool'
|
||||
|
||||
plugin_status 'experimental'
|
||||
|
||||
milestone 1
|
||||
config :spool_size, :validate => :number, :default => 50
|
||||
|
||||
attr_reader :buffer
|
||||
|
|
|
@ -96,8 +96,12 @@ module LogStash::Config::Mixin
|
|||
end
|
||||
|
||||
def plugin_status(status=nil)
|
||||
@plugin_status = status if !status.nil?
|
||||
return @plugin_status
|
||||
milestone(status)
|
||||
end
|
||||
|
||||
def milestone(m=nil)
|
||||
@milestone = m if !m.nil?
|
||||
return @milestone
|
||||
end
|
||||
|
||||
# Define a new configuration setting
|
||||
|
@ -151,7 +155,7 @@ module LogStash::Config::Mixin
|
|||
end
|
||||
end
|
||||
subclass.instance_variable_set("@config", subconfig)
|
||||
@@status_notice_given = false
|
||||
@@milestone_notice_given = false
|
||||
end # def inherited
|
||||
|
||||
def validate(params)
|
||||
|
@ -160,7 +164,7 @@ module LogStash::Config::Mixin
|
|||
@logger = Cabin::Channel.get(LogStash)
|
||||
is_valid = true
|
||||
|
||||
is_valid &&= validate_plugin_status
|
||||
is_valid &&= validate_milestone
|
||||
is_valid &&= validate_check_invalid_parameter_names(params)
|
||||
is_valid &&= validate_check_required_parameter_names(params)
|
||||
is_valid &&= validate_check_parameter_values(params)
|
||||
|
@ -168,26 +172,23 @@ module LogStash::Config::Mixin
|
|||
return is_valid
|
||||
end # def validate
|
||||
|
||||
def validate_plugin_status
|
||||
return true if @@status_notice_given
|
||||
docmsg = "For more information about plugin statuses, see http://logstash.net/docs/#{LOGSTASH_VERSION}/plugin-status "
|
||||
def validate_milestone
|
||||
return true if @@milestone_notice_given
|
||||
docmsg = "For more information about plugin milestones, see http://logstash.net/docs/#{LOGSTASH_VERSION}/plugin-milestones "
|
||||
plugin_type = ancestors.find { |a| a.name =~ /::Base$/ }.config_name
|
||||
log_data = { :type => plugin_type, :name => @config_name, :LOGSTASH_VERSION => LOGSTASH_VERSION }
|
||||
case @plugin_status
|
||||
when LogStash::Plugin::MILESTONE_0
|
||||
@logger.warn(I18n.t("logstash.plugin.milestone.0", log_data)
|
||||
when LogStash::PLugin::MILESTONE_1
|
||||
@logger.warn(I18n.t("logstash.plugin.milestone.1", log_data)
|
||||
when LogStash::PLugin::MILESTONE_2
|
||||
@logger.warn(I18n.t("logstash.plugin.milestone.2", log_data)
|
||||
when LogStash::PLugin::MILESTONE_3
|
||||
# No message to log, this plugin is of good quality with tests, etc.
|
||||
case @milestone
|
||||
when 0,1,2
|
||||
@logger.warn(I18n.t("logstash.plugin.milestone.#{@milestone}",
|
||||
:type => plugin_type, :name => @config_name,
|
||||
:LOGSTASH_VERSION => LOGSTASH_VERSION))
|
||||
when 3
|
||||
# No message to log for milestone 3 plugins.
|
||||
when nil
|
||||
raise "#{@config_name} must set a plugin_status. #{docmsg}"
|
||||
raise "#{@config_name} must set a milestone. #{docmsg}"
|
||||
else
|
||||
raise "#{@config_name} set an invalid plugin status #{@plugin_status}. Valid values are unsupported, experimental, beta and stable. #{docmsg}"
|
||||
raise "#{@config_name} set an invalid plugin status #{@milestone}. Valid values are 0, 1, 2, or 3. #{docmsg}"
|
||||
end
|
||||
@@status_notice_given = true
|
||||
@@milestone_notice_given = true
|
||||
return true
|
||||
end
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::Advisor < LogStash::Filters::Base
|
||||
|
||||
config_name "advisor"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# If you do not set time_adv the plugin does nothing.
|
||||
config :time_adv, :validate => :number, :default => 0
|
||||
|
|
|
@ -9,7 +9,7 @@ require "logstash/namespace"
|
|||
# be merged into the 'mutate' filter in future versions.
|
||||
class LogStash::Filters::Alter < LogStash::Filters::Base
|
||||
config_name "alter"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Change the content of the field to the specified value
|
||||
# if the actual content is equal to the expected one.
|
||||
|
|
|
@ -4,7 +4,7 @@ require "logstash/namespace"
|
|||
# Anonymize fields using by replacing values with a consistent hash.
|
||||
class LogStash::Filters::Anonymize < LogStash::Filters::Base
|
||||
config_name "anonymize"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The fields to be anonymized
|
||||
config :fields, :validate => :array, :required => true
|
||||
|
|
|
@ -11,7 +11,7 @@ require "yaml"
|
|||
class LogStash::Filters::Checksum < LogStash::Filters::Base
|
||||
|
||||
config_name "checksum"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# A list of keys to use in creating the string to checksum
|
||||
# Keys will be sorted before building the string
|
||||
|
|
|
@ -6,7 +6,7 @@ require "logstash/namespace"
|
|||
#
|
||||
class LogStash::Filters::Cipher < LogStash::Filters::Base
|
||||
config_name "cipher"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The field to perform filter
|
||||
#
|
||||
|
|
|
@ -7,7 +7,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::Clone < LogStash::Filters::Base
|
||||
|
||||
config_name "clone"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# A new clone will be created with the given type for each type in this list.
|
||||
config :clones, :validate => :array, :default => []
|
||||
|
|
|
@ -7,7 +7,7 @@ require "csv"
|
|||
# and stores it as individual fields (can optionally specify the names).
|
||||
class LogStash::Filters::CSV < LogStash::Filters::Base
|
||||
config_name "csv"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The CSV data in the value of the source field will be expanded into a
|
||||
# datastructure.
|
||||
|
|
|
@ -25,7 +25,7 @@ class LogStash::Filters::Date < LogStash::Filters::Base
|
|||
end
|
||||
|
||||
config_name "date"
|
||||
plugin_status "stable"
|
||||
milestone 3
|
||||
|
||||
# specify a timezone canonical ID to be used for date parsing.
|
||||
# The valid ID are listed on http://joda-time.sourceforge.net/timezones.html
|
||||
|
|
|
@ -30,7 +30,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::DNS < LogStash::Filters::Base
|
||||
|
||||
config_name "dns"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# Reverse resolve one or more fields.
|
||||
config :reverse, :validate => :array
|
||||
|
|
|
@ -17,7 +17,7 @@ require "logstash/namespace"
|
|||
# "debug". This will cause all events matching to be dropped.
|
||||
class LogStash::Filters::Drop < LogStash::Filters::Base
|
||||
config_name "drop"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
public
|
||||
def register
|
||||
|
|
|
@ -4,7 +4,7 @@ require "logstash/namespace"
|
|||
# Set fields from environment variables
|
||||
class LogStash::Filters::Environment < LogStash::Filters::Base
|
||||
config_name "environment"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Specify a hash of fields to the environment variable
|
||||
# A hash of matches of field => environment variable
|
||||
|
|
|
@ -5,7 +5,7 @@ require "logstash/namespace"
|
|||
# corresponding GELF levels.
|
||||
class LogStash::Filters::Gelfify < LogStash::Filters::Base
|
||||
config_name "gelfify"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
SYSLOG_LEVEL_MAP = {
|
||||
0 => 3, # Emergency => FATAL
|
||||
|
|
|
@ -13,7 +13,7 @@ require "tempfile"
|
|||
# <http://www.maxmind.com/en/geolite>.
|
||||
class LogStash::Filters::GeoIP < LogStash::Filters::Base
|
||||
config_name "geoip"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# GeoIP database file to use, Country, City, ASN, ISP and organization
|
||||
# databases are supported
|
||||
|
|
|
@ -9,7 +9,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::Grep < LogStash::Filters::Base
|
||||
|
||||
config_name "grep"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# Drop events that don't match
|
||||
#
|
||||
|
|
|
@ -132,7 +132,7 @@ require "set"
|
|||
# SYSLOGBASE pattern which itself is defined by other patterns.
|
||||
class LogStash::Filters::Grok < LogStash::Filters::Base
|
||||
config_name "grok"
|
||||
plugin_status "stable"
|
||||
milestone 3
|
||||
|
||||
# Specify a pattern to parse with. This will match the 'message' field.
|
||||
#
|
||||
|
|
|
@ -6,7 +6,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::Grokdiscovery < LogStash::Filters::Base
|
||||
|
||||
config_name "grokdiscovery"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
public
|
||||
def initialize(config = {})
|
||||
|
|
|
@ -6,7 +6,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::Json < LogStash::Filters::Base
|
||||
|
||||
config_name "json"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# Config for json is:
|
||||
#
|
||||
|
|
|
@ -24,7 +24,7 @@ require "logstash/namespace"
|
|||
# 'foo=bar&baz=fizz' by setting the field_split to "&"
|
||||
class LogStash::Filters::KV < LogStash::Filters::Base
|
||||
config_name "kv"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# A string of characters to trim from the value. This is useful if your
|
||||
# values are wrapped in brackets or are terminated by comma (like postfix
|
||||
|
|
|
@ -3,7 +3,7 @@ require "logstash/namespace"
|
|||
|
||||
class LogStash::Filters::Metaevent < LogStash::Filters::Base
|
||||
config_name "metaevent"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# syntax: `followed_by_tags => [ "tag", "tag" ]`
|
||||
config :followed_by_tags, :validate => :array, :required => true
|
||||
|
|
|
@ -93,7 +93,7 @@ require "logstash/namespace"
|
|||
# }
|
||||
class LogStash::Filters::Metrics < LogStash::Filters::Base
|
||||
config_name "metrics"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# syntax: `meter => [ "name of metric", "name of metric" ]`
|
||||
config :meter, :validate => :array, :default => []
|
||||
|
|
|
@ -8,7 +8,7 @@ require "logstash/errors"
|
|||
# See the multiline codec instead.
|
||||
class LogStash::Filters::Multiline < LogStash::Filters::Base
|
||||
config_name "multiline"
|
||||
plugin_status "stable"
|
||||
milestone 3
|
||||
|
||||
# Leave these config settings until we remove this filter entirely.
|
||||
# THe idea is that we want the register method to cause an abort
|
||||
|
|
|
@ -7,7 +7,7 @@ require "logstash/namespace"
|
|||
# TODO(sissel): Support regexp replacements like String#gsub ?
|
||||
class LogStash::Filters::Mutate < LogStash::Filters::Base
|
||||
config_name "mutate"
|
||||
plugin_status "stable"
|
||||
milestone 3
|
||||
|
||||
# Rename one or more fields.
|
||||
#
|
||||
|
|
|
@ -4,7 +4,7 @@ require "logstash/namespace"
|
|||
# No-op filter. This is used generally for internal/dev testing.
|
||||
class LogStash::Filters::NOOP < LogStash::Filters::Base
|
||||
config_name "noop"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
public
|
||||
def register
|
||||
|
|
|
@ -6,7 +6,7 @@ require "logstash/namespace"
|
|||
|
||||
class LogStash::Filters::Prune < LogStash::Filters::Base
|
||||
config_name "prune"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Trigger whether configation fields and values should be interpolated for
|
||||
# dynamic values.
|
||||
|
|
|
@ -14,7 +14,7 @@ require "logstash/namespace"
|
|||
|
||||
class LogStash::Filters::Range < LogStash::Filters::Base
|
||||
config_name "range"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# An array of field, min, max ,action tuples.
|
||||
# Example:
|
||||
|
|
|
@ -14,7 +14,7 @@ require "logstash/namespace"
|
|||
#
|
||||
class LogStash::Filters::Ruby < LogStash::Filters::Base
|
||||
config_name "ruby"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Any code to execute at logstash startup-time
|
||||
config :init, :validate => :string
|
||||
|
|
|
@ -7,7 +7,7 @@ require "logstash/namespace"
|
|||
#
|
||||
class LogStash::Filters::Sleep < LogStash::Filters::Base
|
||||
config_name "sleep"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The length of time to sleep, in seconds, for every event.
|
||||
#
|
||||
|
|
|
@ -12,7 +12,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::Split < LogStash::Filters::Base
|
||||
|
||||
config_name "split"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The string to split on. This is usually a line terminator, but can be any
|
||||
# string.
|
||||
|
|
|
@ -11,7 +11,7 @@ class LogStash::Filters::Syslog_pri < LogStash::Filters::Base
|
|||
config_name "syslog_pri"
|
||||
|
||||
# set the status to experimental/beta/stable
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Add human-readable names after parsing severity and facility from PRI
|
||||
config :use_labels, :validate => :boolean, :default => true
|
||||
|
|
|
@ -12,7 +12,7 @@ require "logstash/namespace"
|
|||
|
||||
class LogStash::Filters::Translate < LogStash::Filters::Base
|
||||
config_name "translate"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The field containing a response code If this field is an
|
||||
# array, only the first value will be used.
|
||||
|
|
|
@ -5,7 +5,7 @@ require "uri"
|
|||
# The urldecode filter is for decoding fields that are urlencoded.
|
||||
class LogStash::Filters::Urldecode < LogStash::Filters::Base
|
||||
config_name "urldecode"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The field which value is urldecoded
|
||||
config :field, :validate => :string, :default => "@message"
|
||||
|
|
|
@ -12,7 +12,7 @@ require "tempfile"
|
|||
# <https://github.com/tobie/ua-parser/>.
|
||||
class LogStash::Filters::UserAgent < LogStash::Filters::Base
|
||||
config_name "useragent"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The field containing the user agent string. If this field is an
|
||||
# array, only the first value will be used.
|
||||
|
|
|
@ -6,7 +6,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::Xml < LogStash::Filters::Base
|
||||
|
||||
config_name "xml"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Config for xml to hash is:
|
||||
#
|
||||
|
|
|
@ -16,7 +16,7 @@ require "logstash/namespace"
|
|||
class LogStash::Filters::ZeroMQ < LogStash::Filters::Base
|
||||
|
||||
config_name "zeromq"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# 0mq socket address to connect or bind
|
||||
# Please note that inproc:// will not work with logstash
|
||||
|
|
|
@ -3,7 +3,7 @@ require "logstash/inputs/rabbitmq"
|
|||
# This plugin has been renamed to 'rabbitmq'. Please use that one instead.
|
||||
class LogStash::Inputs::AMQP < LogStash::Inputs::RabbitMQ
|
||||
config_name "amqp"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
def register
|
||||
@logger.warn("The 'amqp' input plugin has been renamed to 'rabbitmq'. " \
|
||||
"Please update your configuration appropriately.")
|
||||
|
|
|
@ -15,7 +15,7 @@ require "logstash/namespace"
|
|||
#
|
||||
class LogStash::Inputs::DrupalDblog < LogStash::Inputs::Base
|
||||
config_name "drupal_dblog"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Specify all drupal databases that you whish to import from.
|
||||
# This can be as many as you whish.
|
||||
|
|
|
@ -20,7 +20,7 @@ require "logstash/util/socket_peer"
|
|||
# * TODO(sissel): Option to keep the index, type, and doc id so we can do reindexing?
|
||||
class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
|
||||
config_name "elasticsearch"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# When mode is `server`, the address to listen on.
|
||||
# When mode is `client`, the address to connect to.
|
||||
|
|
|
@ -15,7 +15,7 @@ require "socket"
|
|||
class LogStash::Inputs::EventLog < LogStash::Inputs::Base
|
||||
|
||||
config_name "eventlog"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# Event Log Name
|
||||
config :logfile, :validate => :array, :default => [ "Application", "Security", "System" ]
|
||||
|
|
|
@ -13,7 +13,7 @@ require "socket" # for Socket.gethostname
|
|||
class LogStash::Inputs::Exec < LogStash::Inputs::Base
|
||||
|
||||
config_name "exec"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# Set this to true to enable debugging on an input.
|
||||
config :debug, :validate => :boolean, :default => false
|
||||
|
@ -38,8 +38,8 @@ class LogStash::Inputs::Exec < LogStash::Inputs::Base
|
|||
out = IO.popen(@command)
|
||||
# out.read will block until the process finishes.
|
||||
@codec.decode(out.read) do |event|
|
||||
event["source"] => "exec://#{Socket.gethostname}"
|
||||
event["command"] => @command
|
||||
event["source"] = "exec://#{Socket.gethostname}"
|
||||
event["command"] = @command
|
||||
queue << event
|
||||
end
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ require "socket" # for Socket.gethostname
|
|||
# is detected and handled by this input.
|
||||
class LogStash::Inputs::File < LogStash::Inputs::Base
|
||||
config_name "file"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The path to the file to use as an input.
|
||||
# You can use globs here, such as `/var/log/*.log`
|
||||
|
|
|
@ -10,7 +10,7 @@ require "socket"
|
|||
#
|
||||
class LogStash::Inputs::Ganglia < LogStash::Inputs::Base
|
||||
config_name "ganglia"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The address to listen on
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -12,7 +12,7 @@ require "socket"
|
|||
#
|
||||
class LogStash::Inputs::Gelf < LogStash::Inputs::Base
|
||||
config_name "gelf"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The address to listen on
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -14,7 +14,7 @@ require "logstash/namespace"
|
|||
class LogStash::Inputs::Gemfire < LogStash::Inputs::Threadable
|
||||
|
||||
config_name "gemfire"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Your client cache name
|
||||
config :cache_name, :validate => :string, :default => "logstash"
|
||||
|
|
|
@ -9,7 +9,7 @@ require "socket" # for Socket.gethostname
|
|||
# An event is generated first
|
||||
class LogStash::Inputs::Generator < LogStash::Inputs::Threadable
|
||||
config_name "generator"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The message string to use in the event.
|
||||
#
|
||||
|
|
|
@ -15,7 +15,7 @@ require "logstash/namespace"
|
|||
# value as the field's value.
|
||||
class LogStash::Inputs::Graphite < LogStash::Inputs::Tcp
|
||||
config_name "graphite"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
ISO8601_STRFTIME = "%04d-%02d-%02dT%02d:%02d:%02d.%06d%+03d:00".freeze
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ require "logstash/namespace"
|
|||
# }
|
||||
class LogStash::Inputs::Heroku < LogStash::Inputs::Base
|
||||
config_name "heroku"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The name of your heroku application. This is usually the first part of the
|
||||
# the domain name 'my-app-name.herokuapp.com'
|
||||
|
|
|
@ -8,7 +8,7 @@ require "socket" # for Socket.gethostname
|
|||
# to the trash.
|
||||
class LogStash::Inputs::IMAP < LogStash::Inputs::Base
|
||||
config_name "imap"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
ISO8601_STRFTIME = "%04d-%02d-%02dT%02d:%02d:%02d.%06d%+03d:00".freeze
|
||||
|
||||
config :host, :validate => :string, :required => true
|
||||
|
|
|
@ -7,7 +7,7 @@ require "thread"
|
|||
class LogStash::Inputs::Irc < LogStash::Inputs::Base
|
||||
|
||||
config_name "irc"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Host of the IRC Server to connect to.
|
||||
config :host, :validate => :string, :required => true
|
||||
|
|
|
@ -11,7 +11,7 @@ require "timeout"
|
|||
class LogStash::Inputs::Log4j < LogStash::Inputs::Base
|
||||
|
||||
config_name "log4j"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# When mode is `server`, the address to listen on.
|
||||
# When mode is `client`, the address to connect to.
|
||||
|
|
|
@ -8,7 +8,7 @@ require "logstash/namespace"
|
|||
class LogStash::Inputs::Lumberjack < LogStash::Inputs::Base
|
||||
|
||||
config_name "lumberjack"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# the address to listen on.
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -8,7 +8,7 @@ require "logstash/namespace"
|
|||
class LogStash::Inputs::Lumberjack2 < LogStash::Inputs::Base
|
||||
|
||||
config_name "lumberjack2"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The address to listen on.
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -9,7 +9,7 @@ require "socket" # for Socket.gethostname
|
|||
#
|
||||
class LogStash::Inputs::Pipe < LogStash::Inputs::Base
|
||||
config_name "pipe"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Command to run and read events from, one line at a time.
|
||||
#
|
||||
|
|
|
@ -15,7 +15,7 @@ require "cgi" # for CGI.escape
|
|||
class LogStash::Inputs::RabbitMQ < LogStash::Inputs::Threadable
|
||||
|
||||
config_name "rabbitmq"
|
||||
plugin_status "unsupported"
|
||||
milestone 0
|
||||
|
||||
# Your amqp broker's custom arguments. For mirrored queues in RabbitMQ: [ "x-ha-policy", "all" ]
|
||||
config :arguments, :validate => :array, :default => []
|
||||
|
|
|
@ -13,7 +13,7 @@ require "logstash/namespace"
|
|||
# newer. Anything older does not support the operations used by batching.
|
||||
class LogStash::Inputs::Redis < LogStash::Inputs::Threadable
|
||||
config_name "redis"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# Name is used for logging in case there are multiple instances.
|
||||
# This feature has no real function and will be removed in future versions.
|
||||
|
|
|
@ -18,7 +18,7 @@ class LogStash::Inputs::Relp < LogStash::Inputs::Base
|
|||
class Interrupted < StandardError; end
|
||||
|
||||
config_name "relp"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The address to listen on.
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -12,7 +12,7 @@ require "logstash/namespace"
|
|||
|
||||
class LogStash::Inputs::Snmptrap < LogStash::Inputs::Base
|
||||
config_name "snmptrap"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The address to listen on
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -56,7 +56,7 @@ require "socket"
|
|||
#
|
||||
class LogStash::Inputs::Sqlite < LogStash::Inputs::Base
|
||||
config_name "sqlite"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The path to the sqlite database file.
|
||||
config :path, :validate => :string, :required => true
|
||||
|
|
|
@ -58,7 +58,7 @@ class LogStash::Inputs::SQS < LogStash::Inputs::Threadable
|
|||
include LogStash::PluginMixins::AwsConfig
|
||||
|
||||
config_name "sqs"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Name of the SQS Queue name to pull messages from. Note that this is just the name of the queue, not the URL or ARN.
|
||||
config :queue, :validate => :string, :required => true
|
||||
|
|
|
@ -8,7 +8,7 @@ require "socket" # for Socket.gethostname
|
|||
# want to join lines, you'll want to use the multiline filter.
|
||||
class LogStash::Inputs::Stdin < LogStash::Inputs::Base
|
||||
config_name "stdin"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
public
|
||||
def register
|
||||
|
|
|
@ -4,7 +4,7 @@ require 'pp'
|
|||
|
||||
class LogStash::Inputs::Stomp < LogStash::Inputs::Base
|
||||
config_name "stomp"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The address of the STOMP server.
|
||||
config :host, :validate => :string, :default => "localhost", :required => true
|
||||
|
|
|
@ -20,7 +20,7 @@ require "socket"
|
|||
# Note: this input will start listeners on both TCP and UDP
|
||||
class LogStash::Inputs::Syslog < LogStash::Inputs::Base
|
||||
config_name "syslog"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The address to listen on
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -11,7 +11,7 @@ require "logstash/util/socket_peer"
|
|||
class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
||||
class Interrupted < StandardError; end
|
||||
config_name "tcp"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# When mode is `server`, the address to listen on.
|
||||
# When mode is `client`, the address to connect to.
|
||||
|
|
|
@ -8,7 +8,7 @@ require "json"
|
|||
class LogStash::Inputs::Twitter < LogStash::Inputs::Base
|
||||
|
||||
config_name "twitter"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# Your twitter username
|
||||
config :user, :validate => :string, :required => true
|
||||
|
|
|
@ -7,7 +7,7 @@ require "socket"
|
|||
#
|
||||
class LogStash::Inputs::Udp < LogStash::Inputs::Base
|
||||
config_name "udp"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The address to listen on
|
||||
config :host, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -10,7 +10,7 @@ require "logstash/namespace"
|
|||
class LogStash::Inputs::Unix < LogStash::Inputs::Base
|
||||
class Interrupted < StandardError; end
|
||||
config_name "unix"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# When mode is `server`, the path to listen on.
|
||||
# When mode is `client`, the path to connect to.
|
||||
|
|
|
@ -5,7 +5,7 @@ require "socket" # for Socket.gethostname
|
|||
# Read from varnish cache's shared memory log
|
||||
class LogStash::Inputs::Varnishlog < LogStash::Inputs::Threadable
|
||||
config_name "varnishlog"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
public
|
||||
def register
|
||||
|
|
|
@ -5,7 +5,7 @@ require "socket"
|
|||
# Read events over the websocket protocol.
|
||||
class LogStash::Inputs::Websocket < LogStash::Inputs::Base
|
||||
config_name "websocket"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The url to connect to or serve from
|
||||
config :url, :validate => :string, :default => "0.0.0.0"
|
||||
|
|
|
@ -21,7 +21,7 @@ require "socket"
|
|||
class LogStash::Inputs::WMI < LogStash::Inputs::Base
|
||||
|
||||
config_name "wmi"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# WMI query
|
||||
config :query, :validate => :string, :required => true
|
||||
|
|
|
@ -9,7 +9,7 @@ require "logstash/namespace"
|
|||
class LogStash::Inputs::Xmpp < LogStash::Inputs::Base
|
||||
|
||||
config_name "xmpp"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The user or resource ID, like foo@example.com.
|
||||
config :user, :validate => :string, :required => :true
|
||||
|
|
|
@ -7,7 +7,7 @@ require "zlib"
|
|||
class LogStash::Inputs::Zenoss < LogStash::Inputs::RabbitMQ
|
||||
|
||||
config_name "zenoss"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Your rabbitmq server address
|
||||
config :host, :validate => :string, :default => "localhost"
|
||||
|
|
|
@ -14,7 +14,7 @@ require "socket"
|
|||
class LogStash::Inputs::ZeroMQ < LogStash::Inputs::Base
|
||||
|
||||
config_name "zeromq"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# 0mq socket address to connect or bind
|
||||
# Please note that `inproc://` will not work with logstash
|
||||
|
|
|
@ -3,7 +3,7 @@ require "logstash/outputs/rabbitmq"
|
|||
# This plugin has been renamed to 'rabbitmq'. Please use that one instead.
|
||||
class LogStash::Outputs::AMQP < LogStash::Outputs::RabbitMQ
|
||||
config_name "amqp"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
def register
|
||||
@logger.warn("The 'amqp' output plugin has been renamed to 'rabbitmq'. " \
|
||||
"Please update your configuration appropriately.")
|
||||
|
|
|
@ -13,7 +13,7 @@ class LogStash::Outputs::Boundary < LogStash::Outputs::Base
|
|||
#
|
||||
|
||||
config_name "boundary"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Your Boundary API key
|
||||
config :api_key, :validate => :string, :required => true
|
||||
|
|
|
@ -7,7 +7,7 @@ class LogStash::Outputs::Circonus < LogStash::Outputs::Base
|
|||
#
|
||||
|
||||
config_name "circonus"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Your Circonus API Token
|
||||
config :api_token, :validate => :string, :required => true
|
||||
|
|
|
@ -63,7 +63,7 @@ class LogStash::Outputs::CloudWatch < LogStash::Outputs::Base
|
|||
include LogStash::PluginMixins::AwsConfig
|
||||
|
||||
config_name "cloudwatch"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Constants
|
||||
# aggregate_key members
|
||||
|
|
|
@ -10,7 +10,7 @@ class LogStash::Outputs::Datadog < LogStash::Outputs::Base
|
|||
#
|
||||
|
||||
config_name "datadog"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Your DatadogHQ API key
|
||||
config :api_key, :validate => :string, :required => true
|
||||
|
|
|
@ -28,7 +28,7 @@ require "logstash/outputs/base"
|
|||
class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
|
||||
|
||||
config_name "elasticsearch"
|
||||
plugin_status "stable"
|
||||
milestone 3
|
||||
|
||||
# ElasticSearch server name. This is optional if your server is discoverable.
|
||||
config :host, :validate => :string
|
||||
|
|
|
@ -11,7 +11,7 @@ require "logstash/outputs/base"
|
|||
class LogStash::Outputs::ElasticSearchHTTP < LogStash::Outputs::Base
|
||||
|
||||
config_name "elasticsearch_http"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The index to write events to. This can be dynamic using the %{foo} syntax.
|
||||
# The default value will partition your indices by day so you can more easily
|
||||
|
|
|
@ -17,7 +17,7 @@ require "net/http"
|
|||
class LogStash::Outputs::ElasticSearchRiver < LogStash::Outputs::Base
|
||||
|
||||
config_name "elasticsearch_river"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
config :debug, :validate => :boolean, :default => false
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ require "logstash/namespace"
|
|||
class LogStash::Outputs::Email < LogStash::Outputs::Base
|
||||
|
||||
config_name "email"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# The registered fields that we want to monitor
|
||||
# A hash of matches of field => value
|
||||
|
|
|
@ -19,7 +19,7 @@ require "logstash/outputs/base"
|
|||
class LogStash::Outputs::Exec < LogStash::Outputs::Base
|
||||
|
||||
config_name "exec"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Command line to execute via subprocess. Use dtach or screen to make it non blocking
|
||||
config :command, :validate => :string, :required => true
|
||||
|
|
|
@ -9,7 +9,7 @@ require "zlib"
|
|||
class LogStash::Outputs::File < LogStash::Outputs::Base
|
||||
|
||||
config_name "file"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The path to the file to write. Event fields can be used here,
|
||||
# like "/var/log/logstash/%{@source_host}/%{application}"
|
||||
|
|
|
@ -5,7 +5,7 @@ require "logstash/namespace"
|
|||
# ganglia's gmond. This is heavily based on the graphite output.
|
||||
class LogStash::Outputs::Ganglia < LogStash::Outputs::Base
|
||||
config_name "ganglia"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# The address of the ganglia server.
|
||||
config :host, :validate => :string, :default => "localhost"
|
||||
|
|
|
@ -8,7 +8,7 @@ require "logstash/outputs/base"
|
|||
class LogStash::Outputs::Gelf < LogStash::Outputs::Base
|
||||
|
||||
config_name "gelf"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
# graylog2 server address
|
||||
config :host, :validate => :string, :required => true
|
||||
|
|
|
@ -13,7 +13,7 @@ require "logstash/namespace"
|
|||
class LogStash::Outputs::Gemfire < LogStash::Outputs::Base
|
||||
|
||||
config_name "gemfire"
|
||||
plugin_status "experimental"
|
||||
milestone 1
|
||||
|
||||
# Your client cache name
|
||||
config :cache_name, :validate => :string, :default => "logstash"
|
||||
|
|
|
@ -10,7 +10,7 @@ require "socket"
|
|||
# I can capture the metric values from the logs and emit them to graphite.
|
||||
class LogStash::Outputs::Graphite < LogStash::Outputs::Base
|
||||
config_name "graphite"
|
||||
plugin_status "beta"
|
||||
milestone 2
|
||||
|
||||
DEFAULT_METRICS_FORMAT = "*"
|
||||
METRIC_PLACEHOLDER = "*"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue