opencensus-stackdriver 0.2.0 → 0.3.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
  SHA256:
3
- metadata.gz: de5d4705ab7b4fa7150e3b561d6f9c13767ac11421cb5a0c46d1fa0d74b1d755
4
- data.tar.gz: e01dec6e909b19e2eddbecc0fa325b0d57c8218ac62dbab45c11b025d628d941
3
+ metadata.gz: fccacbc5dbd93388ade17c168d77b0a31cd0369b952b27fa1cb4fbc707f21c01
4
+ data.tar.gz: 12a2e44508d7b3ee0a74e126931be8e1775bc3ee7e1e3473082291de1ae5240b
5
5
  SHA512:
6
- metadata.gz: 3dca3bcb5eb051ff45c181946e29e7a68e3a961ac818129c8de72dd83cae673a435878e4089a6875e57408b9a344a4c47bee0eac1a8d8d51e900a73d9a2237df
7
- data.tar.gz: 65d28205b8301f9a7b9e074428e5ba4e44c4380303762e8fb2f17219b7ef0985f494801dff38a6fb87b2899573795f1f6ffac3c5ae3ffb9ffa1055dd0ed2c650
6
+ metadata.gz: 885148fe5c54cca14e707a2ba774b9d1fa41df6e9f051ca106643149122f02f12e76ba53dec10b380f6662aa2b85ccbe28b7aa1687f7500925a41bc129180457
7
+ data.tar.gz: fc1572aa7fee3656ccc05632cd668efca389208bbcc6c0228907cd63e217a8ac1ecddc6efc9b0597268e6046f845de24180397d3500336c36b56e6347f753fdf
@@ -1,5 +1,12 @@
1
1
  # Release History
2
2
 
3
+ ### 0.3.0 / 2019-10-14
4
+
5
+ This release requires version 0.5 or later of the opencensus gem. It includes
6
+ experimental support for exporting OpenCensus Stats to the Stackdriver
7
+ Monitoring service. Note that Stats support is incomplete and there are known
8
+ issues.
9
+
3
10
  ### 0.2.0 / 2018-10-22
4
11
 
5
12
  This release requires version 0.4 or later of the opencensus gem.
data/README.md CHANGED
@@ -8,7 +8,8 @@ that exports data to [Stackdriver](https://cloud.google.com/stackdriver/).
8
8
  OpenCensus is a platform- and provider-agnostic framework for distributed
9
9
  tracing and stats collection. For more information, see https://opencensus.io.
10
10
 
11
- This library is in an alpha stage, and the API is subject to change.
11
+ This library is in an alpha stage, and the API is subject to change. In
12
+ particular, support for the Stats API is currently incomplete and experimental.
12
13
 
13
14
  ## Quick Start
14
15
 
@@ -21,7 +21,8 @@ module OpenCensus
21
21
  # stats information to Stackdriver Trace and Monitoring services.
22
22
  #
23
23
  # The Stackdriver Trace plugin for OpenCensus is implemented in the
24
- # {OpenCensus::Trace::Exporters::Stackdriver} class.
24
+ # {OpenCensus::Trace::Exporters::Stackdriver} class and
25
+ # {OpenCensus::Stats::Exporters::Stackdriver}
25
26
  #
26
27
  module Stackdriver
27
28
  end
@@ -30,3 +31,5 @@ end
30
31
  require "opencensus/stackdriver/version"
31
32
  require "opencensus/trace/exporters/stackdriver"
32
33
  require "opencensus/trace/exporters/stackdriver/converter"
34
+ require "opencensus/stats/exporters/stackdriver"
35
+ require "opencensus/stats/exporters/stackdriver/converter"
@@ -16,6 +16,6 @@
16
16
  module OpenCensus
17
17
  module Stackdriver
18
18
  ## Current OpenCensus Stackdriver plugin version
19
- VERSION = "0.2.0".freeze
19
+ VERSION = "0.3.0".freeze
20
20
  end
21
21
  end
@@ -0,0 +1,338 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 OpenCensus Authors
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ gem "google-cloud-monitoring"
19
+ gem "concurrent-ruby"
20
+
21
+ require "concurrent"
22
+ require "google/cloud/monitoring"
23
+ require "google/cloud/monitoring/v3"
24
+
25
+ module OpenCensus
26
+ ##
27
+ # OpenCensus Stats provides a standard interface for distributed stats
28
+ # recording.
29
+ #
30
+ module Stats
31
+ ##
32
+ # The exporters module is a namespace for stats exporters.
33
+ #
34
+ module Exporters
35
+ ##
36
+ # The Stackdriver exporter for OpenCensus Stats exports captured stats
37
+ # to a Google Monitoring project. It calls the Monitoring API in
38
+ # a background thread pool.
39
+ #
40
+ class Stackdriver
41
+ # Default custom opencensus domain name
42
+ # @return [String]
43
+ CUSTOM_OPENCENSUS_DOMAIN = "custom.googleapis.com/opencensus".freeze
44
+
45
+ # Default metric resouce type.
46
+ # @return [String]
47
+ GLOBAL_RESOURCE_TYPE = "global".freeze
48
+
49
+ # The project ID
50
+ # @return [String]
51
+ #
52
+ attr_reader :project_id
53
+
54
+ # Metric prefix
55
+ # @return [String]
56
+ attr_reader :metric_prefix
57
+
58
+ # Metric resource type
59
+ # @return [String]
60
+ attr_reader :resource_type
61
+
62
+ # Metric resource labels
63
+ # @return [Hash<String,String>]
64
+ attr_reader :resource_labels
65
+
66
+ # Create a Stackdriver exporter.
67
+ #
68
+ # @param [String] project_id The project identifier for the Stackdriver
69
+ # Monitoring service you are connecting to. If you are running on
70
+ # Google
71
+ # Cloud hosting (e.g. Compute Engine, Kubernetes Engine, or App
72
+ # Engine), this parameter is optional and will default to the
73
+ # hosting project. Otherwise, it is required.
74
+ # @param [String, Hash, Google::Auth::Credentials] credentials The
75
+ # Stackdriver API credentials, which can be a path to a keyfile as
76
+ # a String, the contents of a keyfile as a Hash, or a
77
+ # Google::Auth::Credentials object. If you are running on Google
78
+ # Cloud hosting (e.g. Compute Engine, Kubernetes Engine, or App
79
+ # Engine), this parameter is optional and will default to the
80
+ # credentials provided by the hosting project. Otherwise, it is
81
+ # required.
82
+ # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling
83
+ # the set of resources and operations the API client can access.
84
+ # Optional. Most applications can leave this set to the default.
85
+ # @param [Integer] timeout The default timeout for API requests, in
86
+ # seconds. Optional.
87
+ # @param [Hash] client_config An optional set of additional
88
+ # configuration values for the API connection.
89
+ # @param [Integer] max_queue The maximum number of API requests that
90
+ # can be queued for background operation. If the queue exceeds this
91
+ # value, additional requests will be run in the calling thread
92
+ # rather than in the background. Set to 0 to allow the queue to
93
+ # grow indefinitely. Default is 1000.
94
+ # @param [Integer] max_threads The maximum number of threads that can
95
+ # be spun up to handle API requests. Default is 1. If set to 0,
96
+ # backgrounding will be disabled and all requests will run in the
97
+ # calling thread.
98
+ # @param [Integer] auto_terminate_time The time in seconds allotted to
99
+ # complete any pending background requests when Ruby is exiting.
100
+ # @param [String] metric_prefix Prefix for stackdriver metric.
101
+ # Default value set to {CUSTOM_OPENCENSUS_DOMAIN}
102
+ # @param [String] resource_type Metric resource type.
103
+ # Default value set to {GLOBAL_RESOURCE_TYPE}
104
+ # @param [Hash<String,String>] resource_labels Metric resource labels.
105
+ # Default value set to { "project_id" => project_id }
106
+ #
107
+ def initialize \
108
+ project_id: nil,
109
+ credentials: nil,
110
+ scope: nil,
111
+ timeout: nil,
112
+ client_config: nil,
113
+ max_queue: 1000,
114
+ max_threads: 1,
115
+ auto_terminate_time: 10,
116
+ mock_client: nil,
117
+ metric_prefix: nil,
118
+ resource_type: nil,
119
+ resource_labels: nil
120
+ @project_id = final_project_id project_id
121
+ @metric_prefix = metric_prefix || CUSTOM_OPENCENSUS_DOMAIN
122
+ @resource_type = resource_type || GLOBAL_RESOURCE_TYPE
123
+ @resource_labels = resource_labels || {
124
+ "project_id" => @project_id
125
+ }
126
+ @executor = create_executor max_threads, max_queue
127
+
128
+ if auto_terminate_time
129
+ terminate_at_exit! @executor, auto_terminate_time
130
+ end
131
+
132
+ if mock_client
133
+ @client_promise =
134
+ Concurrent::Promise.fulfill mock_client, executor: @executor
135
+ else
136
+ credentials = final_credentials credentials, scope
137
+ @client_promise = create_client_promise \
138
+ @executor, credentials, scope, client_config, timeout
139
+ end
140
+
141
+ @converter = Converter.new @project_id
142
+ @project_path = Google::Cloud::Monitoring::V3:: \
143
+ MetricServiceClient.project_path @project_id
144
+ end
145
+
146
+ # Export stats to Monitoring service asynchronously.
147
+ #
148
+ # @param [Array<OpenCensus::Stats::ViewData>] views_data The captured
149
+ # stats data
150
+ #
151
+ def export views_data
152
+ raise "Exporter is no longer running" unless @executor.running?
153
+
154
+ return if views_data.nil? || views_data.empty?
155
+
156
+ @client_promise.execute
157
+ export_promise = @client_promise.then do |client|
158
+ export_as_batch(client, views_data)
159
+ end
160
+ export_promise.on_error do |reason|
161
+ warn "Unable to export to Monitering service because: #{reason}"
162
+ end
163
+
164
+ nil
165
+ end
166
+
167
+ ##
168
+ # Returns true if this exporter is running and will accept further
169
+ # export requests. Returns false once the exporter begins shutting down.
170
+ #
171
+ # @return [boolean]
172
+ #
173
+ def running?
174
+ @executor.running?
175
+ end
176
+
177
+ ##
178
+ # Returns true if this exporter has finished shutting down and all
179
+ # pending stats have been sent.
180
+ #
181
+ # @return [boolean]
182
+ #
183
+ def shutdown?
184
+ @executor.shutdown?
185
+ end
186
+
187
+ ##
188
+ # Returns true if this exporter has begun shutting down and is no
189
+ # longer accepting export requests, but is still running queued
190
+ # requests in the background.
191
+ #
192
+ # @return [boolean]
193
+ #
194
+ def shuttingdown?
195
+ @executor.shuttingdown?
196
+ end
197
+
198
+ ##
199
+ # Begin shutting down the exporter gracefully. After this operation is
200
+ # performed, the exporter will no longer accept export requests, but
201
+ # will finish any pending requests in the background.
202
+ #
203
+ def shutdown
204
+ @executor.shutdown
205
+ self
206
+ end
207
+
208
+ ##
209
+ # Begin shutting down the exporter forcefully. After this operation is
210
+ # performed, the exporter will no longer accept export requests, and
211
+ # will finish any currently running export requests, but will cancel
212
+ # all requests that are still pending in the queue.
213
+ #
214
+ def kill
215
+ @executor.kill
216
+ self
217
+ end
218
+
219
+ ##
220
+ # Wait for the exporter to finish shutting down.
221
+ #
222
+ # @param [Integer, nil] timeout A timeout in seconds, or nil for no
223
+ # timeout.
224
+ # @return [boolean] true if the exporter is shut down, or false if the
225
+ # wait timed out.
226
+ #
227
+ def wait_for_termination timeout = nil
228
+ @executor.wait_for_termination timeout
229
+ end
230
+
231
+ # Create a metric descriptor
232
+ #
233
+ # An error will be raised if there is
234
+ # already a metric descriptor created with the same name
235
+ # but it has a different aggregation or keys.
236
+ #
237
+ # @param [OpenCensus::Stats::View] view
238
+ # @return [Google::Api::MetricDescriptor]
239
+ #
240
+ def create_metric_descriptor view
241
+ metric_descriptor = @converter.convert_metric_descriptor(
242
+ view,
243
+ metric_prefix
244
+ )
245
+ metric_name = Google::Cloud::Monitoring::V3:: \
246
+ MetricServiceClient.metric_descriptor_path(
247
+ project_id,
248
+ metric_descriptor.type
249
+ )
250
+
251
+ @client_promise.execute
252
+ descriptor_create_promise = @client_promise.then do |client|
253
+ client.create_metric_descriptor metric_name, metric_descriptor
254
+ end
255
+ descriptor_create_promise.value!
256
+ end
257
+
258
+ private
259
+
260
+ # Create the executor
261
+ def create_executor max_threads, max_queue
262
+ if max_threads >= 1
263
+ Concurrent::ThreadPoolExecutor.new \
264
+ min_threads: 1, max_threads: max_threads,
265
+ max_queue: max_queue, fallback_policy: :caller_runs,
266
+ auto_terminate: false
267
+ else
268
+ Concurrent::ImmediateExecutor.new
269
+ end
270
+ end
271
+
272
+ # Create the client promise.
273
+ # We create the client lazily so grpc doesn't get initialized until
274
+ # we actually need it. This is important because if it is intialized
275
+ # too early, before a fork, it can go into a bad state.
276
+ def create_client_promise executor, credentials, scopes, client_config,
277
+ timeout
278
+ Concurrent::Promise.new executor: executor do
279
+ Google::Cloud::Monitoring::Metric.new(
280
+ credentials: credentials,
281
+ scopes: scopes,
282
+ client_config: client_config,
283
+ timeout: timeout,
284
+ lib_name: "opencensus",
285
+ lib_version: OpenCensus::Stackdriver::VERSION
286
+ )
287
+ end
288
+ end
289
+
290
+ # Set up an at_exit hook that shuts the exporter down.
291
+ def terminate_at_exit! executor, timeout
292
+ at_exit do
293
+ executor.shutdown
294
+ unless executor.wait_for_termination timeout
295
+ executor.kill
296
+ executor.wait_for_termination timeout
297
+ end
298
+ end
299
+ end
300
+
301
+ # Fall back to default project ID
302
+ def final_project_id project_id
303
+ project_id ||
304
+ Google::Cloud.configure.project_id ||
305
+ Google::Cloud.env.project_id
306
+ end
307
+
308
+ # Fall back to default credentials, and wrap in a creds object
309
+ def final_credentials credentials, scope
310
+ credentials ||=
311
+ Google::Cloud.configure.credentials ||
312
+ Google::Cloud::Monitoring::V3::Credentials.default(scope: scope)
313
+ unless credentials.is_a? Google::Auth::Credentials
314
+ credentials = Google::Cloud::Monitoring::V3::Credentials.new(
315
+ credentials,
316
+ scope: scope
317
+ )
318
+ end
319
+ credentials
320
+ end
321
+
322
+ # Export a list of stats in the current thread
323
+ def export_as_batch client, views_data
324
+ time_series = views_data.map do |view_data|
325
+ @converter.convert_time_series(
326
+ metric_prefix,
327
+ resource_type,
328
+ resource_labels,
329
+ view_data
330
+ )
331
+ end
332
+
333
+ client.create_time_series @project_path, time_series.flatten!
334
+ end
335
+ end
336
+ end
337
+ end
338
+ end
@@ -0,0 +1,258 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 OpenCensus Authors
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ module OpenCensus
19
+ module Stats
20
+ module Exporters
21
+ class Stackdriver
22
+ ##
23
+ # An object that converts OpenCensus stats data objects to Monitoring
24
+ # service protos
25
+ #
26
+ # @private
27
+ #
28
+ class Converter
29
+ ##
30
+ # Create a converter
31
+ #
32
+ # @param [String] project_id Google project ID
33
+ #
34
+ def initialize project_id
35
+ @project_id = project_id
36
+ end
37
+
38
+ # Convert view to metric descriptor
39
+ #
40
+ # @param [OpenCensus::Stats:View] view Stats view
41
+ # @param [String] metric_prefix Metric prefix name
42
+ # @return [Google::Api::MetricDescriptor]
43
+ #
44
+ def convert_metric_descriptor view, metric_prefix
45
+ descriptor = Google::Api::MetricDescriptor.new(
46
+ type: make_metric_type(metric_prefix, view.name),
47
+ display_name: view.measure.name,
48
+ metric_kind: convert_metric_kind(view.aggregation),
49
+ value_type: convert_metric_value_type(view),
50
+ unit: view.measure.unit,
51
+ labels: convert_labels(view.columns)
52
+ )
53
+
54
+ descriptor.description = view.description if view.description
55
+ descriptor
56
+ end
57
+
58
+ # Conver to lables
59
+ #
60
+ # @param [Array<String>] names
61
+ # @return [Array<Google::Api::LabelDescriptor>]
62
+ def convert_labels names
63
+ names.map do |name|
64
+ Google::Api::LabelDescriptor.new(
65
+ key: name,
66
+ value_type: Google::Api::LabelDescriptor::ValueType::STRING
67
+ )
68
+ end
69
+ end
70
+
71
+ # Convert to metric view type.
72
+ #
73
+ # @param [OpenCensus::Stats:View] view Stats view
74
+ # @return [Symbol] Metric value type
75
+ #
76
+ def convert_metric_value_type view
77
+ case view.aggregation
78
+ when OpenCensus::Stats::Aggregation::Distribution
79
+ Google::Api::MetricDescriptor::ValueType::DISTRIBUTION
80
+ when OpenCensus::Stats::Aggregation::Count
81
+ Google::Api::MetricDescriptor::ValueType::INT64
82
+ when OpenCensus::Stats::Aggregation::Sum,
83
+ OpenCensus::Stats::Aggregation::LastValue
84
+ if view.measure.int64?
85
+ Google::Api::MetricDescriptor::ValueType::INT64
86
+ else
87
+ Google::Api::MetricDescriptor::ValueType::DOUBLE
88
+ end
89
+ end
90
+ end
91
+
92
+ # Convert to metric kind
93
+ #
94
+ # @param [OpenCensus::Stats:Aggregation::LastValue,
95
+ # OpenCensus::Stats:Aggregation::Sum,
96
+ # OpenCensus::Stats:Aggregation::Count,
97
+ # OpenCensus::Stats:Aggregation::Distribution] aggregation
98
+ # Aggregation type
99
+ # @return [Symbol] Metric kind type
100
+ #
101
+ def convert_metric_kind aggregation
102
+ last_value_class = OpenCensus::Stats::Aggregation::LastValue
103
+
104
+ if aggregation.instance_of? last_value_class
105
+ return Google::Api::MetricDescriptor::MetricKind::GAUGE
106
+ end
107
+
108
+ Google::Api::MetricDescriptor::MetricKind::CUMULATIVE
109
+ end
110
+
111
+ # Convert view data to time series list
112
+ #
113
+ # @param [String] metric_prefix Metric prefix name
114
+ # @param [String] resource_type Metric resource type
115
+ # @param [Hash<String,String>] resource_labels Metric resource labels
116
+ # @param [OpenCensus::Stats::ViewData] view_data Stats view data
117
+ # @return [Array[Google::Monitoring::V3::TimeSeries]]
118
+ #
119
+ def convert_time_series metric_prefix, resource_type, resource_labels,
120
+ view_data
121
+ view = view_data.view
122
+
123
+ view_data.data.map do |tag_values, aggr_data|
124
+ series = Google::Monitoring::V3::TimeSeries.new(
125
+ metric: {
126
+ type: make_metric_type(metric_prefix, view.name),
127
+ labels: Hash[view.columns.zip tag_values]
128
+ },
129
+ resource: {
130
+ type: resource_type,
131
+ labels: resource_labels
132
+ },
133
+ metric_kind: convert_metric_kind(view.aggregation),
134
+ value_type: convert_metric_value_type(view)
135
+ )
136
+
137
+ series.points << convert_point(
138
+ view_data.start_time,
139
+ aggr_data.time,
140
+ view.measure,
141
+ aggr_data
142
+ )
143
+
144
+ series
145
+ end
146
+ end
147
+
148
+ # Convert aggr data to time series point proto
149
+ #
150
+ # @param [Time] start_time Start time
151
+ # @param [Time] end_time Start time
152
+ # @param [OpenCensus::Stats:Measure] measure Measure details
153
+ # @param [OpenCensus::Stats:AggregationData] aggr_data Aggregated data
154
+ # @raise [TypeError] If invalid aggr data type.
155
+ # @return [Google::Monitoring::V3::Point]
156
+ def convert_point start_time, end_time, measure, aggr_data
157
+ case aggr_data
158
+ when OpenCensus::Stats::AggregationData::Distribution
159
+ create_distribution_point start_time, end_time, aggr_data
160
+ when OpenCensus::Stats::AggregationData::LastValue
161
+ create_number_point(
162
+ start_time,
163
+ start_time,
164
+ aggr_data.value,
165
+ measure
166
+ )
167
+ when OpenCensus::Stats::AggregationData::Sum,
168
+ OpenCensus::Stats::AggregationData::Count
169
+ create_number_point(
170
+ start_time,
171
+ end_time,
172
+ aggr_data.value,
173
+ measure
174
+ )
175
+ else
176
+ raise TypeError, "invalid aggregation type : #{aggr_data.class}"
177
+ end
178
+ end
179
+
180
+ # Create a distribution point
181
+ # @param [Time] start_time Start time
182
+ # @param [Time] end_time Start time
183
+ # @param [OpenCensus::Stats::AggregationData::Distribution] aggr_data
184
+ # @return [Google::Monitoring::V3::Point]
185
+ #
186
+ def create_distribution_point start_time, end_time, aggr_data
187
+ value = {
188
+ count: aggr_data.count,
189
+ mean: aggr_data.mean,
190
+ sum_of_squared_deviation: aggr_data.sum_of_squared_deviation,
191
+ bucket_options: {
192
+ explicit_buckets: {
193
+ bounds: [0].concat(aggr_data.buckets)
194
+ }
195
+ },
196
+ bucket_counts: [0].concat(aggr_data.bucket_counts)
197
+ }
198
+
199
+ Google::Monitoring::V3::Point.new(
200
+ interval: {
201
+ start_time: convert_time(start_time),
202
+ end_time: convert_time(end_time)
203
+ },
204
+ value: {
205
+ distribution_value: value
206
+ }
207
+ )
208
+ end
209
+
210
+ # Create a number point
211
+ # @param [Time] start_time Start time
212
+ # @param [Time] end_time Start time
213
+ # @param [Integer, Float] value
214
+ # @param [OpenCensus::Stats::Measure] measure Measure defination
215
+ # @return [Google::Monitoring::V3::Point]
216
+ #
217
+ def create_number_point start_time, end_time, value, measure
218
+ value = if measure.int64?
219
+ { int64_value: value }
220
+ else
221
+ { double_value: value }
222
+ end
223
+
224
+ Google::Monitoring::V3::Point.new(
225
+ interval: {
226
+ start_time: convert_time(start_time),
227
+ end_time: convert_time(end_time)
228
+ },
229
+ value: value
230
+ )
231
+ end
232
+
233
+ # Convert time object to protobuf timestamp
234
+ #
235
+ # @param [Time] time Ruby Time object
236
+ # @return [Google::Protobuf::Timestamp] The generated proto
237
+ #
238
+ def convert_time time
239
+ proto = Google::Protobuf::Timestamp.new
240
+ proto.from_time(time)
241
+ proto
242
+ end
243
+
244
+ ##
245
+ # Make make metric type
246
+ #
247
+ # @param [String] metric_prefix The metric prefix
248
+ # @param [String] name The name of the mertic view
249
+ # @return [String] The metric type path
250
+ #
251
+ def make_metric_type metric_prefix, name
252
+ "#{metric_prefix}/#{name}"
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opencensus-stackdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-23 00:00:00.000000000 Z
11
+ date: 2019-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -44,28 +44,42 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.4'
47
+ version: '0.5'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.4'
54
+ version: '0.5'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: google-cloud-monitoring
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.16'
62
- type: :development
61
+ version: 0.29.2
62
+ type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.16'
68
+ version: 0.29.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '1.17'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '1.17'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: faraday
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -195,6 +209,8 @@ files:
195
209
  - lib/opencensus-stackdriver.rb
196
210
  - lib/opencensus/stackdriver.rb
197
211
  - lib/opencensus/stackdriver/version.rb
212
+ - lib/opencensus/stats/exporters/stackdriver.rb
213
+ - lib/opencensus/stats/exporters/stackdriver/converter.rb
198
214
  - lib/opencensus/trace/exporters/stackdriver.rb
199
215
  - lib/opencensus/trace/exporters/stackdriver/converter.rb
200
216
  homepage: https://github.com/census-instrumentation/ruby-stackdriver-exporter
@@ -216,8 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
232
  - !ruby/object:Gem::Version
217
233
  version: '0'
218
234
  requirements: []
219
- rubyforge_project:
220
- rubygems_version: 2.7.6
235
+ rubygems_version: 3.0.3
221
236
  signing_key:
222
237
  specification_version: 4
223
238
  summary: Stackdriver exporter for OpenCensus