fluent-plugin-cloudwatch-put 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d384c9797d32c4f7342de78a6354b35112c7cce6
4
- data.tar.gz: f37a80601492563df64e5e77c2428ca22e72bd83
3
+ metadata.gz: fe04a863ed1a5b6c693fbc94a04d6b0f6f3d8fec
4
+ data.tar.gz: 78061618a796fbec0514aad7e9cb81e655abad51
5
5
  SHA512:
6
- metadata.gz: c9d30d0c594b9317f56c728f29745f78a8763bb36273556da7c57b9040e95c1081759779ff0102a9a55844e7810011dc921be452f412834836a8c3b9606cd797
7
- data.tar.gz: be243f0ef19d60b0eaffea326f9450b7a86fe878e00233408dbecb7cfa44246b056da77efe6df5c1f1330edfcc6aca697ac22477d95e3a9e9ab72f1276ff4d2f
6
+ metadata.gz: 67430ddd315340edf6d02888536074183b90e0a1cfa1eb0a00f294af1603cf750785259f00f4cbf49d44066436f9445de281d12ce7c434274d976cf6936be0ee
7
+ data.tar.gz: 40a9fa68966a9c7bd4c60507cf65863efcda4ac37ba5d23991a73b13ed7f12f8e697734b5f24242549faaa44a5657beb7aa95d7e8ee2624e8e004caff050c827
data/README.md CHANGED
@@ -72,11 +72,17 @@ CloudWatch metric namespace (support placeholder)
72
72
 
73
73
  CloudWatch metric name (support placeholder)
74
74
 
75
+ ### key_as_metric_name (bool) (optional)
76
+
77
+ Use record key as metric name
78
+
79
+ Default value: `false`
80
+
75
81
  ### unit (string) (required)
76
82
 
77
83
  CloudWatch metric unit (support placeholder)
78
84
 
79
- ### value_key (string) (required)
85
+ ### value_key (array\<string\>) (required)
80
86
 
81
87
  Use this key as metric value
82
88
 
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-cloudwatch-put"
6
- spec.version = "0.1.0"
6
+ spec.version = "0.2.0"
7
7
  spec.authors = ["joker1007"]
8
8
  spec.email = ["kakyoin.hierophant@gmail.com"]
9
9
 
@@ -61,7 +61,9 @@ module Fluent
61
61
  desc "CloudWatch metric namespace (support placeholder)"
62
62
  config_param :namespace, :string
63
63
  desc "CloudWatch metric name (support placeholder)"
64
- config_param :metric_name, :string
64
+ config_param :metric_name, :string, default: nil
65
+ desc "Use keyname as metric name"
66
+ config_param :key_as_metric_name, :bool, default: false
65
67
  desc "CloudWatch metric unit (support placeholder)"
66
68
  config_param :unit, :string
67
69
 
@@ -76,7 +78,7 @@ module Fluent
76
78
  end
77
79
 
78
80
  desc "Use this key as metric value"
79
- config_param :value_key, :string
81
+ config_param :value_key, :array, value_type: :string
80
82
 
81
83
  desc "Cloudwatch storage resolution"
82
84
  config_param :storage_resolution, :integer, default: 60
@@ -94,6 +96,10 @@ module Fluent
94
96
  def configure(conf)
95
97
  super
96
98
 
99
+ unless !!@metric_name ^ @key_as_metric_name
100
+ raise Fluent::ConfigError, "'Either 'metric_name'' or 'key_as_metric_name' must be set"
101
+ end
102
+
97
103
  @dimensions.each do |d|
98
104
  unless d.key.nil? ^ d.value.nil?
99
105
  raise Fluent::ConfigError, "'Either dimensions[key]' or 'dimensions[value]' must be set"
@@ -102,6 +108,15 @@ module Fluent
102
108
  if @use_statistic_sets && d.key
103
109
  raise Fluent::ConfigError, "If 'use_statistic_sets' is true, dimensions[key] is not supportted"
104
110
  end
111
+
112
+ if @use_statistic_sets && @key_as_metric_name
113
+ raise Fluent::ConfigError, "If 'use_statistic_sets' is true, 'key_as_metric_name' is not supportted"
114
+ end
115
+ end
116
+
117
+ @send_all_key = false
118
+ if @value_key.size == 1 && @value_key[0] == "*"
119
+ @send_all_key = true
105
120
  end
106
121
 
107
122
  placeholder_params = "namespace=#{@namespace}/metric_name=#{@metric_name}/unit=#{@unit}/dimensions[name]=#{@dimensions.map(&:name).join(",")}/dimensions[value]=#{@dimensions.map(&:value).join(",")}"
@@ -144,7 +159,6 @@ module Fluent
144
159
 
145
160
  def base_metric_data(meta)
146
161
  {
147
- metric_name: extract_placeholders(@metric_name, meta),
148
162
  unit: extract_placeholders(@unit, meta),
149
163
  storage_resolution: @storage_resolution,
150
164
  }
@@ -154,16 +168,23 @@ module Fluent
154
168
  meta = chunk.metadata
155
169
  metric_data = []
156
170
  chunk.msgpack_each do |(timestamp, record)|
157
- metric_data << base_metric_data(meta).merge({
158
- dimensions: @dimensions.map { |d|
159
- {
160
- name: extract_placeholders(d.name, meta),
161
- value: d.key ? record[d.key] : extract_placeholders(d.value, meta),
162
- }
163
- },
164
- value: record[@value_key].to_f,
165
- timestamp: Time.at(timestamp)
166
- })
171
+ record.each do |k, v|
172
+ next unless @value_key.include?(k) || @send_all_key
173
+
174
+ metric_data << {
175
+ metric_name: @key_as_metric_name ? k : extract_placeholders(@metric_name, meta),
176
+ unit: extract_placeholders(@unit, meta),
177
+ storage_resolution: @storage_resolution,
178
+ dimensions: @dimensions.map { |d|
179
+ {
180
+ name: extract_placeholders(d.name, meta),
181
+ value: d.key ? record[d.key] : extract_placeholders(d.value, meta),
182
+ }
183
+ },
184
+ value: v.to_f,
185
+ timestamp: Time.at(timestamp)
186
+ }
187
+ end
167
188
  end
168
189
  metric_data
169
190
  end
@@ -173,12 +194,16 @@ module Fluent
173
194
  values = []
174
195
  timestamps = []
175
196
  chunk.msgpack_each do |(timestamp, record)|
176
- values << record[@value_key].to_f
197
+ record.each do |k, v|
198
+ next unless @value_key.include?(k) || @send_all_key
199
+ values << v.to_f
200
+ end
177
201
  timestamps << timestamp
178
202
  end
179
203
 
180
204
  [
181
205
  base_metric_data(meta).merge({
206
+ metric_name: extract_placeholders(@metric_name, meta),
182
207
  dimensions: @dimensions.map { |d|
183
208
  {
184
209
  name: extract_placeholders(d.name, meta),
@@ -106,6 +106,95 @@ class CloudWatchPutOutputTest < Test::Unit::TestCase
106
106
  end
107
107
  end
108
108
 
109
+ test "write (multi value_key)" do
110
+ conf = %q{
111
+ region ap-northeast-1
112
+ namespace Test
113
+ key_as_metric_name true
114
+ unit Count
115
+
116
+ <dimensions>
117
+ name dim1
118
+ value dim_value1
119
+ </dimensions>
120
+
121
+ <dimensions>
122
+ name dim2
123
+ value dim_value2
124
+ </dimensions>
125
+
126
+ value_key key1, key2, key3
127
+
128
+ aws_key_id dummy
129
+ aws_sec_key dummy
130
+ }
131
+ d = create_driver(conf)
132
+ now = Time.now.to_i
133
+
134
+ d.instance.start
135
+
136
+ mock(d.instance.cloudwatch).put_metric_data({
137
+ namespace: "Test",
138
+ metric_data: [
139
+ {
140
+ metric_name: "key1",
141
+ dimensions: [
142
+ {
143
+ name: "dim1",
144
+ value: "dim_value1",
145
+ },
146
+ {
147
+ name: "dim2",
148
+ value: "dim_value2",
149
+ },
150
+ ],
151
+ timestamp: Time.at(now),
152
+ value: 1.0,
153
+ unit: "Count",
154
+ storage_resolution: 60,
155
+ },
156
+ {
157
+ metric_name: "key2",
158
+ dimensions: [
159
+ {
160
+ name: "dim1",
161
+ value: "dim_value1",
162
+ },
163
+ {
164
+ name: "dim2",
165
+ value: "dim_value2",
166
+ },
167
+ ],
168
+ timestamp: Time.at(now),
169
+ value: 2.0,
170
+ unit: "Count",
171
+ storage_resolution: 60,
172
+ },
173
+ {
174
+ metric_name: "key3",
175
+ dimensions: [
176
+ {
177
+ name: "dim1",
178
+ value: "dim_value1",
179
+ },
180
+ {
181
+ name: "dim2",
182
+ value: "dim_value2",
183
+ },
184
+ ],
185
+ timestamp: Time.at(now),
186
+ value: 3.0,
187
+ unit: "Count",
188
+ storage_resolution: 60,
189
+ },
190
+ ]
191
+ })
192
+
193
+ d.run do
194
+ d.feed('tag', now, {"key1" => 1, "key2" => 2, "key3" => 3})
195
+ end
196
+ end
197
+
109
198
  test "write (use_statistic_sets)" do
110
199
  conf = %q{
111
200
  region ap-northeast-1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-cloudwatch-put
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - joker1007
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-30 00:00:00.000000000 Z
11
+ date: 2017-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler