gcloud 0.6.3 → 0.7.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 +8 -8
- data/AUTHENTICATION.md +13 -9
- data/CHANGELOG.md +8 -3
- data/OVERVIEW.md +46 -8
- data/lib/gcloud.rb +123 -117
- data/lib/gcloud/backoff.rb +43 -15
- data/lib/gcloud/bigquery.rb +211 -195
- data/lib/gcloud/bigquery/connection.rb +9 -9
- data/lib/gcloud/bigquery/copy_job.rb +15 -16
- data/lib/gcloud/bigquery/credentials.rb +3 -3
- data/lib/gcloud/bigquery/data.rb +12 -11
- data/lib/gcloud/bigquery/dataset.rb +162 -216
- data/lib/gcloud/bigquery/dataset/access.rb +59 -43
- data/lib/gcloud/bigquery/dataset/list.rb +3 -3
- data/lib/gcloud/bigquery/errors.rb +9 -5
- data/lib/gcloud/bigquery/extract_job.rb +18 -18
- data/lib/gcloud/bigquery/insert_response.rb +7 -4
- data/lib/gcloud/bigquery/job.rb +48 -44
- data/lib/gcloud/bigquery/job/list.rb +3 -3
- data/lib/gcloud/bigquery/load_job.rb +24 -25
- data/lib/gcloud/bigquery/project.rb +145 -204
- data/lib/gcloud/bigquery/query_data.rb +10 -9
- data/lib/gcloud/bigquery/query_job.rb +23 -32
- data/lib/gcloud/bigquery/table.rb +238 -280
- data/lib/gcloud/bigquery/table/list.rb +3 -3
- data/lib/gcloud/bigquery/table/schema.rb +79 -87
- data/lib/gcloud/bigquery/view.rb +69 -82
- data/lib/gcloud/credentials.rb +3 -9
- data/lib/gcloud/datastore.rb +194 -170
- data/lib/gcloud/datastore/connection.rb +12 -8
- data/lib/gcloud/datastore/credentials.rb +6 -4
- data/lib/gcloud/datastore/dataset.rb +74 -141
- data/lib/gcloud/datastore/dataset/lookup_results.rb +6 -4
- data/lib/gcloud/datastore/dataset/query_results.rb +6 -4
- data/lib/gcloud/datastore/entity.rb +81 -76
- data/lib/gcloud/datastore/errors.rb +10 -8
- data/lib/gcloud/datastore/key.rb +41 -77
- data/lib/gcloud/datastore/properties.rb +3 -3
- data/lib/gcloud/datastore/proto.rb +7 -4
- data/lib/gcloud/datastore/query.rb +26 -3
- data/lib/gcloud/datastore/transaction.rb +12 -8
- data/lib/gcloud/dns.rb +180 -152
- data/lib/gcloud/dns/change.rb +16 -16
- data/lib/gcloud/dns/change/list.rb +3 -3
- data/lib/gcloud/dns/connection.rb +9 -10
- data/lib/gcloud/dns/credentials.rb +3 -3
- data/lib/gcloud/dns/errors.rb +9 -5
- data/lib/gcloud/dns/importer.rb +17 -23
- data/lib/gcloud/dns/project.rb +42 -64
- data/lib/gcloud/dns/record.rb +58 -46
- data/lib/gcloud/dns/record/list.rb +6 -7
- data/lib/gcloud/dns/zone.rb +198 -289
- data/lib/gcloud/dns/zone/list.rb +3 -3
- data/lib/gcloud/dns/zone/transaction.rb +56 -72
- data/lib/gcloud/errors.rb +174 -3
- data/lib/gcloud/gce.rb +3 -4
- data/lib/gcloud/grpc_utils.rb +76 -0
- data/lib/gcloud/logging.rb +308 -0
- data/lib/gcloud/logging/credentials.rb +29 -0
- data/lib/gcloud/logging/entry.rb +303 -0
- data/lib/gcloud/logging/entry/http_request.rb +141 -0
- data/lib/gcloud/logging/entry/list.rb +111 -0
- data/lib/gcloud/logging/entry/operation.rb +90 -0
- data/lib/gcloud/logging/logger.rb +307 -0
- data/lib/gcloud/logging/metric.rb +175 -0
- data/lib/gcloud/logging/metric/list.rb +98 -0
- data/lib/gcloud/logging/project.rb +650 -0
- data/lib/gcloud/logging/resource.rb +95 -0
- data/lib/gcloud/logging/resource_descriptor.rb +140 -0
- data/lib/gcloud/logging/resource_descriptor/list.rb +78 -0
- data/lib/gcloud/logging/service.rb +258 -0
- data/lib/gcloud/logging/sink.rb +233 -0
- data/lib/gcloud/logging/sink/list.rb +97 -0
- data/lib/gcloud/pubsub.rb +241 -199
- data/lib/gcloud/pubsub/credentials.rb +3 -3
- data/lib/gcloud/pubsub/message.rb +26 -20
- data/lib/gcloud/pubsub/project.rb +166 -233
- data/lib/gcloud/pubsub/received_message.rb +28 -38
- data/lib/gcloud/pubsub/service.rb +323 -0
- data/lib/gcloud/pubsub/subscription.rb +172 -242
- data/lib/gcloud/pubsub/subscription/list.rb +11 -9
- data/lib/gcloud/pubsub/topic.rb +152 -271
- data/lib/gcloud/pubsub/topic/batch.rb +66 -0
- data/lib/gcloud/pubsub/topic/list.rb +9 -7
- data/lib/gcloud/resource_manager.rb +158 -138
- data/lib/gcloud/resource_manager/connection.rb +6 -5
- data/lib/gcloud/resource_manager/credentials.rb +3 -3
- data/lib/gcloud/resource_manager/errors.rb +9 -5
- data/lib/gcloud/resource_manager/manager.rb +54 -86
- data/lib/gcloud/resource_manager/project.rb +69 -88
- data/lib/gcloud/resource_manager/project/list.rb +4 -5
- data/lib/gcloud/resource_manager/project/updater.rb +12 -14
- data/lib/gcloud/search.rb +158 -135
- data/lib/gcloud/search/api_client.rb +7 -7
- data/lib/gcloud/search/connection.rb +8 -8
- data/lib/gcloud/search/credentials.rb +3 -3
- data/lib/gcloud/search/document.rb +64 -87
- data/lib/gcloud/search/document/list.rb +5 -5
- data/lib/gcloud/search/errors.rb +9 -5
- data/lib/gcloud/search/field_value.rb +32 -38
- data/lib/gcloud/search/field_values.rb +50 -80
- data/lib/gcloud/search/fields.rb +44 -65
- data/lib/gcloud/search/index.rb +163 -204
- data/lib/gcloud/search/index/list.rb +5 -5
- data/lib/gcloud/search/project.rb +31 -47
- data/lib/gcloud/search/result.rb +27 -31
- data/lib/gcloud/search/result/list.rb +6 -6
- data/lib/gcloud/storage.rb +224 -190
- data/lib/gcloud/storage/bucket.rb +202 -227
- data/lib/gcloud/storage/bucket/acl.rb +83 -170
- data/lib/gcloud/storage/bucket/cors.rb +31 -34
- data/lib/gcloud/storage/bucket/list.rb +3 -3
- data/lib/gcloud/storage/connection.rb +11 -7
- data/lib/gcloud/storage/credentials.rb +3 -3
- data/lib/gcloud/storage/errors.rb +11 -8
- data/lib/gcloud/storage/file.rb +129 -171
- data/lib/gcloud/storage/file/acl.rb +51 -99
- data/lib/gcloud/storage/file/list.rb +3 -3
- data/lib/gcloud/storage/file/verifier.rb +3 -2
- data/lib/gcloud/storage/project.rb +111 -132
- data/lib/gcloud/upload.rb +4 -7
- data/lib/gcloud/version.rb +2 -4
- data/lib/google/api/annotations.rb +14 -0
- data/lib/google/api/http.rb +30 -0
- data/lib/google/api/label.rb +24 -0
- data/lib/google/api/monitored_resource.rb +25 -0
- data/lib/google/datastore/v1beta3/datastore.rb +115 -0
- data/lib/google/datastore/v1beta3/datastore_services.rb +33 -0
- data/lib/google/datastore/v1beta3/entity.rb +63 -0
- data/lib/google/datastore/v1beta3/query.rb +128 -0
- data/lib/google/devtools/cloudtrace/v1/trace.rb +78 -0
- data/lib/google/devtools/cloudtrace/v1/trace_services.rb +32 -0
- data/lib/google/example/library/v1/library.rb +91 -0
- data/lib/google/example/library/v1/library_services.rb +40 -0
- data/lib/google/iam/v1/iam_policy.rb +33 -0
- data/lib/google/iam/v1/iam_policy_services.rb +30 -0
- data/lib/google/iam/v1/policy.rb +25 -0
- data/lib/google/logging/type/http_request.rb +28 -0
- data/lib/google/logging/type/log_severity.rb +27 -0
- data/lib/google/logging/v2/log_entry.rb +44 -0
- data/lib/google/logging/v2/logging.rb +56 -0
- data/lib/google/logging/v2/logging_config.rb +59 -0
- data/lib/google/logging/v2/logging_config_services.rb +32 -0
- data/lib/google/logging/v2/logging_metrics.rb +51 -0
- data/lib/google/logging/v2/logging_metrics_services.rb +32 -0
- data/lib/google/logging/v2/logging_services.rb +31 -0
- data/lib/google/longrunning/operations.rb +50 -0
- data/lib/google/longrunning/operations_services.rb +29 -0
- data/lib/google/protobuf/any.rb +17 -0
- data/lib/google/protobuf/api.rb +31 -0
- data/lib/google/protobuf/descriptor.rb +0 -0
- data/lib/google/protobuf/duration.rb +17 -0
- data/lib/google/protobuf/empty.rb +15 -0
- data/lib/google/protobuf/field_mask.rb +16 -0
- data/lib/google/protobuf/source_context.rb +16 -0
- data/lib/google/protobuf/struct.rb +35 -0
- data/lib/google/protobuf/timestamp.rb +17 -0
- data/lib/google/protobuf/type.rb +79 -0
- data/lib/google/protobuf/wrappers.rb +48 -0
- data/lib/google/pubsub/v1/pubsub.rb +129 -0
- data/lib/google/pubsub/v1/pubsub_services.rb +56 -0
- data/lib/google/pubsub/v1beta2/pubsub.rb +126 -0
- data/lib/google/pubsub/v1beta2/pubsub_services.rb +56 -0
- data/lib/google/rpc/code.rb +32 -0
- data/lib/google/rpc/error_details.rb +61 -0
- data/lib/google/rpc/status.rb +19 -0
- data/lib/google/type/color.rb +20 -0
- data/lib/google/type/date.rb +18 -0
- data/lib/google/type/dayofweek.rb +23 -0
- data/lib/google/type/latlng.rb +17 -0
- data/lib/google/type/money.rb +18 -0
- data/lib/google/type/timeofday.rb +19 -0
- metadata +101 -4
- data/lib/gcloud/pubsub/connection.rb +0 -295
- data/lib/gcloud/pubsub/errors.rb +0 -93
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# Copyright 2016 Google Inc. All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
require "gcloud"
|
|
17
|
+
require "gcloud/logging/project"
|
|
18
|
+
|
|
19
|
+
module Gcloud
|
|
20
|
+
##
|
|
21
|
+
# Creates a new object for connecting to the Logging service.
|
|
22
|
+
# Each call creates a new connection.
|
|
23
|
+
#
|
|
24
|
+
# For more information on connecting to Google Cloud see the [Authentication
|
|
25
|
+
# Guide](https://googlecloudplatform.github.io/gcloud-ruby/#/docs/guides/authentication).
|
|
26
|
+
#
|
|
27
|
+
# @param [String] project Project identifier for the Logging service you are
|
|
28
|
+
# connecting to.
|
|
29
|
+
# @param [String, Hash] keyfile Keyfile downloaded from Google Cloud. If file
|
|
30
|
+
# path the file must be readable.
|
|
31
|
+
# @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
|
|
32
|
+
# set of resources and operations that the connection can access. See [Using
|
|
33
|
+
# OAuth 2.0 to Access Google
|
|
34
|
+
# APIs](https://developers.google.com/identity/protocols/OAuth2).
|
|
35
|
+
#
|
|
36
|
+
# The default scope is:
|
|
37
|
+
#
|
|
38
|
+
# * `https://www.googleapis.com/auth/logging.admin`
|
|
39
|
+
#
|
|
40
|
+
# @return [Gcloud::Logging::Project]
|
|
41
|
+
#
|
|
42
|
+
# @example
|
|
43
|
+
# require "gcloud/logging"
|
|
44
|
+
#
|
|
45
|
+
# gcloud = Gcloud.new
|
|
46
|
+
# logging = gcloud.logging
|
|
47
|
+
# # ...
|
|
48
|
+
#
|
|
49
|
+
def self.logging project = nil, keyfile = nil, scope: nil
|
|
50
|
+
project ||= Gcloud::Logging::Project.default_project
|
|
51
|
+
if keyfile.nil?
|
|
52
|
+
credentials = Gcloud::Logging::Credentials.default scope: scope
|
|
53
|
+
else
|
|
54
|
+
credentials = Gcloud::Logging::Credentials.new keyfile, scope: scope
|
|
55
|
+
end
|
|
56
|
+
Gcloud::Logging::Project.new project, credentials
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
##
|
|
60
|
+
# # Google Cloud Logging
|
|
61
|
+
#
|
|
62
|
+
# The Google Cloud Logging service collects and stores logs from applications
|
|
63
|
+
# and services on the Google Cloud Platform, giving you fine-grained,
|
|
64
|
+
# programmatic control over your projects' logs. You can use the Cloud Logging
|
|
65
|
+
# API to:
|
|
66
|
+
#
|
|
67
|
+
# * [Read and filter log entries](#listing-log-entries)
|
|
68
|
+
# * [Export your log entries](#exporting-log-entries) to Cloud Storage,
|
|
69
|
+
# BigQuery, or Cloud Pub/Sub
|
|
70
|
+
# * [Create logs-based metrics](#creating-logs-based-metrics) for use in Cloud
|
|
71
|
+
# Monitoring
|
|
72
|
+
# * [Write log entries](#writing-log-entries)
|
|
73
|
+
#
|
|
74
|
+
# For general information about Cloud Logging, read [What is Google Cloud
|
|
75
|
+
# Logging?](https://cloud.google.com/logging/docs/).
|
|
76
|
+
#
|
|
77
|
+
# Gcloud's goal is to provide an API that is familiar and comfortable to
|
|
78
|
+
# Rubyists. Authentication is handled by {Gcloud#logging}. You can provide the
|
|
79
|
+
# project and credential information to connect to the Cloud Logging service,
|
|
80
|
+
# or if you are running on Google Compute Engine this configuration is taken
|
|
81
|
+
# care of for you. You can read more about the options for connecting in the
|
|
82
|
+
# [Authentication
|
|
83
|
+
# Guide](https://googlecloudplatform.github.io/gcloud-ruby/#/docs/guides/authentication).
|
|
84
|
+
#
|
|
85
|
+
# ## Listing log entries
|
|
86
|
+
#
|
|
87
|
+
# Cloud Logging gathers log entries from many services, including Google App
|
|
88
|
+
# Engine and Google Compute Engine. (See the [List of Log
|
|
89
|
+
# Types](https://cloud.google.com/logging/docs/view/logs_index).) In addition,
|
|
90
|
+
# you can write your own log entries to the service.
|
|
91
|
+
#
|
|
92
|
+
# {Gcloud::Logging::Project#entries} returns the {Gcloud::Logging::Entry}
|
|
93
|
+
# records belonging to your project:
|
|
94
|
+
#
|
|
95
|
+
# ```ruby
|
|
96
|
+
# require "gcloud"
|
|
97
|
+
#
|
|
98
|
+
# gcloud = Gcloud.new
|
|
99
|
+
# logging = gcloud.logging
|
|
100
|
+
# entries = logging.entries
|
|
101
|
+
# entries.each do |e|
|
|
102
|
+
# puts "[#{e.timestamp}] #{e.log_name} #{e.payload.inspect}"
|
|
103
|
+
# end
|
|
104
|
+
# ```
|
|
105
|
+
#
|
|
106
|
+
# You can narrow the results to a single log using an [advanced logs
|
|
107
|
+
# filter](https://cloud.google.com/logging/docs/view/advanced_filters). A
|
|
108
|
+
# log is a named collection of entries. Logs can be produced by Google Cloud
|
|
109
|
+
# Platform services, by third-party services, or by your applications. For
|
|
110
|
+
# example, the log `compute.googleapis.com/activity_log` is produced by Google
|
|
111
|
+
# Compute Engine. Logs are simply referenced by name in Gcloud. There is no
|
|
112
|
+
# `Log` type in Gcloud or `Log` resource in the Cloud Logging API.
|
|
113
|
+
#
|
|
114
|
+
# ```ruby
|
|
115
|
+
# require "gcloud"
|
|
116
|
+
#
|
|
117
|
+
# gcloud = Gcloud.new
|
|
118
|
+
# logging = gcloud.logging
|
|
119
|
+
# entries = logging.entries filter: "log:syslog"
|
|
120
|
+
# entries.each do |e|
|
|
121
|
+
# puts "[#{e.timestamp}] #{e.payload.inspect}"
|
|
122
|
+
# end
|
|
123
|
+
# ```
|
|
124
|
+
#
|
|
125
|
+
# You can also order the log entries by `timestamp`.
|
|
126
|
+
#
|
|
127
|
+
# ```ruby
|
|
128
|
+
# require "gcloud"
|
|
129
|
+
#
|
|
130
|
+
# gcloud = Gcloud.new
|
|
131
|
+
# logging = gcloud.logging
|
|
132
|
+
# entries = logging.entries order: "timestamp desc"
|
|
133
|
+
# entries.each do |e|
|
|
134
|
+
# puts "[#{e.timestamp}] #{e.log_name} #{e.payload.inspect}"
|
|
135
|
+
# end
|
|
136
|
+
# ```
|
|
137
|
+
#
|
|
138
|
+
# ## Exporting log entries
|
|
139
|
+
#
|
|
140
|
+
# Cloud Logging lets you export log entries to destinations including Google
|
|
141
|
+
# Cloud Storage buckets (for long term log storage), Google BigQuery datasets
|
|
142
|
+
# (for log analysis), and Google Pub/Sub (for streaming to other
|
|
143
|
+
# applications).
|
|
144
|
+
#
|
|
145
|
+
# ### Creating sinks
|
|
146
|
+
#
|
|
147
|
+
# A {Gcloud::Logging::Sink} is an object that lets you to specify a set of log
|
|
148
|
+
# entries to export.
|
|
149
|
+
#
|
|
150
|
+
# In addition to the name of the sink and the export destination,
|
|
151
|
+
# {Gcloud::Logging::Project#create_sink} accepts an [advanced
|
|
152
|
+
# logs filter](https://cloud.google.com/logging/docs/view/advanced_filters) to
|
|
153
|
+
# narrow the collection.
|
|
154
|
+
#
|
|
155
|
+
# Before creating the sink, ensure that you have granted
|
|
156
|
+
# `cloud-logs@google.com` permission to write logs to the destination. See
|
|
157
|
+
# [Permissions for writing exported
|
|
158
|
+
# logs](https://cloud.google.com/logging/docs/export/configure_export#setting_product_name_short_permissions_for_writing_exported_logs).
|
|
159
|
+
#
|
|
160
|
+
# ```ruby
|
|
161
|
+
# require "gcloud"
|
|
162
|
+
#
|
|
163
|
+
# gcloud = Gcloud.new
|
|
164
|
+
# logging = gcloud.logging
|
|
165
|
+
# storage = gcloud.storage
|
|
166
|
+
#
|
|
167
|
+
# bucket = storage.create_bucket "my-logs-bucket"
|
|
168
|
+
#
|
|
169
|
+
# # Grant owner permission to Cloud Logging service
|
|
170
|
+
# email = "cloud-logs@google.com"
|
|
171
|
+
# bucket.acl.add_owner "group-#{email}"
|
|
172
|
+
#
|
|
173
|
+
# sink = logging.create_sink "my-sink", "storage.googleapis.com/#{bucket.id}"
|
|
174
|
+
# ```
|
|
175
|
+
#
|
|
176
|
+
# When you create a sink, only new log entries are exported. Cloud Logging
|
|
177
|
+
# does not send previously-ingested log entries to the sink's destination.
|
|
178
|
+
#
|
|
179
|
+
# ### Listing sinks
|
|
180
|
+
#
|
|
181
|
+
# You can also list the sinks belonging to your project with
|
|
182
|
+
# {Gcloud::Logging::Project#sinks}.
|
|
183
|
+
#
|
|
184
|
+
# ```ruby
|
|
185
|
+
# require "gcloud"
|
|
186
|
+
#
|
|
187
|
+
# gcloud = Gcloud.new
|
|
188
|
+
# logging = gcloud.logging
|
|
189
|
+
# sinks = logging.sinks
|
|
190
|
+
# sinks.each do |s|
|
|
191
|
+
# puts "#{s.name}: #{s.filter} -> #{s.destination}"
|
|
192
|
+
# end
|
|
193
|
+
# ```
|
|
194
|
+
#
|
|
195
|
+
# ## Creating logs-based metrics
|
|
196
|
+
#
|
|
197
|
+
# You can use log entries in your project as the basis for [Google Cloud
|
|
198
|
+
# Monitoring](https://cloud.google.com/monitoring/docs) metrics. These metrics
|
|
199
|
+
# can then be used to produce Cloud Monitoring reports and alerts.
|
|
200
|
+
#
|
|
201
|
+
# ### Creating metrics
|
|
202
|
+
#
|
|
203
|
+
# A metric is a measured value that can be used to assess a system. Use
|
|
204
|
+
# {Gcloud::Logging::Project#create_metric} to configure a
|
|
205
|
+
# {Gcloud::Logging::Metric} based on a collection of log entries matching an
|
|
206
|
+
# [advanced
|
|
207
|
+
# logs filter](https://cloud.google.com/logging/docs/view/advanced_filters).
|
|
208
|
+
#
|
|
209
|
+
# ```ruby
|
|
210
|
+
# require "gcloud"
|
|
211
|
+
#
|
|
212
|
+
# gcloud = Gcloud.new
|
|
213
|
+
# logging = gcloud.logging
|
|
214
|
+
# metric = logging.create_metric "errors", "severity>=ERROR"
|
|
215
|
+
# ```
|
|
216
|
+
#
|
|
217
|
+
# ### Listing metrics
|
|
218
|
+
#
|
|
219
|
+
# You can also list the metrics belonging to your project with
|
|
220
|
+
# {Gcloud::Logging::Project#metrics}.
|
|
221
|
+
#
|
|
222
|
+
# ```ruby
|
|
223
|
+
# require "gcloud"
|
|
224
|
+
#
|
|
225
|
+
# gcloud = Gcloud.new
|
|
226
|
+
# logging = gcloud.logging
|
|
227
|
+
# metrics = logging.metrics
|
|
228
|
+
# metrics.each do |m|
|
|
229
|
+
# puts "#{m.name}: #{m.filter}"
|
|
230
|
+
# end
|
|
231
|
+
# ```
|
|
232
|
+
#
|
|
233
|
+
# ## Writing log entries
|
|
234
|
+
#
|
|
235
|
+
# An {Gcloud::Logging::Entry} is composed of metadata and a payload. The
|
|
236
|
+
# payload is traditionally a message string, but in Cloud Logging it can
|
|
237
|
+
# also be a JSON or protocol buffer object. A single log can have entries with
|
|
238
|
+
# different payload types. In addition to the payload, your argument(s) to
|
|
239
|
+
# {Gcloud::Logging::Project#write_entries} must also contain a log name and a
|
|
240
|
+
# resource.
|
|
241
|
+
#
|
|
242
|
+
# ```ruby
|
|
243
|
+
# require "gcloud"
|
|
244
|
+
#
|
|
245
|
+
# gcloud = Gcloud.new
|
|
246
|
+
# logging = gcloud.logging
|
|
247
|
+
#
|
|
248
|
+
# entry = logging.entry
|
|
249
|
+
# entry.payload = "Job started."
|
|
250
|
+
# entry.log_name = "my_app_log"
|
|
251
|
+
# entry.resource.type = "gae_app"
|
|
252
|
+
# entry.resource.labels[:module_id] = "1"
|
|
253
|
+
# entry.resource.labels[:version_id] = "20150925t173233"
|
|
254
|
+
#
|
|
255
|
+
# logging.write_entries entry
|
|
256
|
+
# ```
|
|
257
|
+
#
|
|
258
|
+
# If you write a collection of log entries, you can provide the log name,
|
|
259
|
+
# resource, and/or labels hash to be used for all of the entries, and omit
|
|
260
|
+
# these values from the individual entries.
|
|
261
|
+
#
|
|
262
|
+
# ```ruby
|
|
263
|
+
# require "gcloud"
|
|
264
|
+
#
|
|
265
|
+
# gcloud = Gcloud.new
|
|
266
|
+
# logging = gcloud.logging
|
|
267
|
+
#
|
|
268
|
+
# entry1 = logging.entry
|
|
269
|
+
# entry1.payload = "Job started."
|
|
270
|
+
# entry2 = logging.entry
|
|
271
|
+
# entry2.payload = "Job completed."
|
|
272
|
+
# labels = { job_size: "large", job_code: "red" }
|
|
273
|
+
#
|
|
274
|
+
# resource = logging.resource "gae_app",
|
|
275
|
+
# "module_id" => "1",
|
|
276
|
+
# "version_id" => "20150925t173233"
|
|
277
|
+
#
|
|
278
|
+
# logging.write_entries [entry1, entry2],
|
|
279
|
+
# log_name: "my_app_log",
|
|
280
|
+
# resource: resource,
|
|
281
|
+
# labels: labels
|
|
282
|
+
# ```
|
|
283
|
+
#
|
|
284
|
+
# ### Creating a Ruby Logger implementation
|
|
285
|
+
#
|
|
286
|
+
# If your environment requires a logger instance that is API-compatible with
|
|
287
|
+
# Ruby's standard library
|
|
288
|
+
# [Logger](http://ruby-doc.org/stdlib/libdoc/logger/rdoc), you can use
|
|
289
|
+
# {Gcloud::Logging::Project#logger} to create one.
|
|
290
|
+
#
|
|
291
|
+
# ```ruby
|
|
292
|
+
# require "gcloud"
|
|
293
|
+
#
|
|
294
|
+
# gcloud = Gcloud.new
|
|
295
|
+
# logging = gcloud.logging
|
|
296
|
+
#
|
|
297
|
+
# resource = logging.resource "gae_app",
|
|
298
|
+
# module_id: "1",
|
|
299
|
+
# version_id: "20150925t173233"
|
|
300
|
+
#
|
|
301
|
+
# logger = logging.logger "my_app_log", resource, env: :production
|
|
302
|
+
# logger.info "Job started."
|
|
303
|
+
# ```
|
|
304
|
+
#
|
|
305
|
+
#
|
|
306
|
+
module Logging
|
|
307
|
+
end
|
|
308
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright 2016 Google Inc. All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
require "gcloud/credentials"
|
|
17
|
+
|
|
18
|
+
module Gcloud
|
|
19
|
+
module Logging
|
|
20
|
+
##
|
|
21
|
+
# @private Represents the OAuth 2.0 signing logic for Logging.
|
|
22
|
+
class Credentials < Gcloud::Credentials
|
|
23
|
+
SCOPE = ["https://www.googleapis.com/auth/logging.admin"]
|
|
24
|
+
PATH_ENV_VARS = %w(LOGGING_KEYFILE GCLOUD_KEYFILE GOOGLE_CLOUD_KEYFILE)
|
|
25
|
+
JSON_ENV_VARS = %w(LOGGING_KEYFILE_JSON GCLOUD_KEYFILE_JSON
|
|
26
|
+
GOOGLE_CLOUD_KEYFILE_JSON)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# Copyright 2016 Google Inc. All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
require "gcloud/logging/resource"
|
|
17
|
+
require "gcloud/logging/entry/http_request"
|
|
18
|
+
require "gcloud/logging/entry/operation"
|
|
19
|
+
require "gcloud/logging/entry/list"
|
|
20
|
+
require "gcloud/grpc_utils"
|
|
21
|
+
|
|
22
|
+
module Gcloud
|
|
23
|
+
module Logging
|
|
24
|
+
##
|
|
25
|
+
# # Entry
|
|
26
|
+
#
|
|
27
|
+
# An individual entry in a log.
|
|
28
|
+
#
|
|
29
|
+
# Each log entry is composed of metadata and a payload. The metadata
|
|
30
|
+
# includes standard information used by Cloud Logging, such as when the
|
|
31
|
+
# entry was created and where it came from. The payload is the event record.
|
|
32
|
+
# Traditionally this is a message string, but in Cloud Logging it can also
|
|
33
|
+
# be a JSON or protocol buffer object. A single log can have entries with
|
|
34
|
+
# different payload types.
|
|
35
|
+
#
|
|
36
|
+
# A log is a named collection of entries. Logs can be produced by Google
|
|
37
|
+
# Cloud Platform services, by third-party services, or by your applications.
|
|
38
|
+
# For example, the log `compute.googleapis.com/activity_log` is produced by
|
|
39
|
+
# Google Compute Engine. Logs are simply referenced by name in Gcloud. There
|
|
40
|
+
# is no `Log` type in Gcloud or `Log` resource in the Cloud Logging API.
|
|
41
|
+
#
|
|
42
|
+
# @see https://cloud.google.com/logging/docs/view/logs_index List of Log
|
|
43
|
+
# Types
|
|
44
|
+
#
|
|
45
|
+
# @example
|
|
46
|
+
# require "gcloud"
|
|
47
|
+
#
|
|
48
|
+
# gcloud = Gcloud.new
|
|
49
|
+
# logging = gcloud.logging
|
|
50
|
+
#
|
|
51
|
+
# entry = logging.entry
|
|
52
|
+
# entry.payload = "Job started."
|
|
53
|
+
# entry.log_name = "my_app_log"
|
|
54
|
+
# entry.resource.type = "gae_app"
|
|
55
|
+
# entry.resource.labels[:module_id] = "1"
|
|
56
|
+
# entry.resource.labels[:version_id] = "20150925t173233"
|
|
57
|
+
#
|
|
58
|
+
# logging.write_entries entry
|
|
59
|
+
#
|
|
60
|
+
class Entry
|
|
61
|
+
##
|
|
62
|
+
# Create a new Entry instance. The {#resource} attribute is
|
|
63
|
+
# pre-populated with a new {Gcloud::Logging::Resource} instance. See also
|
|
64
|
+
# {Gcloud::Logging::Project#entry}.
|
|
65
|
+
def initialize
|
|
66
|
+
@labels = {}
|
|
67
|
+
@resource = Resource.new
|
|
68
|
+
@http_request = HttpRequest.new
|
|
69
|
+
@operation = Operation.new
|
|
70
|
+
@severity = :DEFAULT
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
##
|
|
74
|
+
# The resource name of the log to which this log entry belongs. The format
|
|
75
|
+
# of the name is `projects/<project-id>/logs/<log-id>`. e.g.
|
|
76
|
+
# `projects/my-projectid/logs/my_app_log` and
|
|
77
|
+
# `projects/1234567890/logs/library.googleapis.com%2Fbook_log`
|
|
78
|
+
#
|
|
79
|
+
# The log ID part of resource name must be less than 512 characters long
|
|
80
|
+
# and can only include the following characters: upper and lower case
|
|
81
|
+
# alphanumeric characters: `[A-Za-z0-9]`; and punctuation characters:
|
|
82
|
+
# forward-slash (`/`), underscore (`_`), hyphen (`-`), and period (`.`).
|
|
83
|
+
# Forward-slash (`/`) characters in the log ID must be URL-encoded.
|
|
84
|
+
attr_accessor :log_name
|
|
85
|
+
|
|
86
|
+
##
|
|
87
|
+
# The monitored resource associated with this log entry. Example: a log
|
|
88
|
+
# entry that reports a database error would be associated with the
|
|
89
|
+
# monitored resource designating the particular database that reported the
|
|
90
|
+
# error.
|
|
91
|
+
# @return [Gcloud::Logging::Resource]
|
|
92
|
+
attr_reader :resource
|
|
93
|
+
|
|
94
|
+
##
|
|
95
|
+
# The time the event described by the log entry occurred. If omitted,
|
|
96
|
+
# Cloud Logging will use the time the log entry is written.
|
|
97
|
+
attr_accessor :timestamp
|
|
98
|
+
|
|
99
|
+
##
|
|
100
|
+
# The severity level of the log entry. The default value is `DEFAULT`.
|
|
101
|
+
attr_accessor :severity
|
|
102
|
+
|
|
103
|
+
##
|
|
104
|
+
# Returns `true` if the severity level is `DEFAULT`.
|
|
105
|
+
def default?
|
|
106
|
+
severity == :DEFAULT
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
##
|
|
110
|
+
# Returns `true` if the severity level is `DEBUG`.
|
|
111
|
+
def debug?
|
|
112
|
+
severity == :DEBUG
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
##
|
|
116
|
+
# Returns `true` if the severity level is `INFO`.
|
|
117
|
+
def info?
|
|
118
|
+
severity == :INFO
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
##
|
|
122
|
+
# Returns `true` if the severity level is `NOTICE`.
|
|
123
|
+
def notice?
|
|
124
|
+
severity == :NOTICE
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
##
|
|
128
|
+
# Returns `true` if the severity level is `WARNING`.
|
|
129
|
+
def warning?
|
|
130
|
+
severity == :WARNING
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
##
|
|
134
|
+
# Returns `true` if the severity level is `ERROR`.
|
|
135
|
+
def error?
|
|
136
|
+
severity == :ERROR
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
##
|
|
140
|
+
# Returns `true` if the severity level is `CRITICAL`.
|
|
141
|
+
def critical?
|
|
142
|
+
severity == :CRITICAL
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
##
|
|
146
|
+
# Returns `true` if the severity level is `ALERT`.
|
|
147
|
+
def alert?
|
|
148
|
+
severity == :ALERT
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
##
|
|
152
|
+
# Returns `true` if the severity level is `EMERGENCY`.
|
|
153
|
+
def emergency?
|
|
154
|
+
severity == :EMERGENCY
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
##
|
|
158
|
+
# A unique ID for the log entry. If you provide this field, the logging
|
|
159
|
+
# service considers other log entries in the same log with the same ID as
|
|
160
|
+
# duplicates which can be removed. If omitted, Cloud Logging will generate
|
|
161
|
+
# a unique ID for this log entry.
|
|
162
|
+
attr_accessor :insert_id
|
|
163
|
+
|
|
164
|
+
##
|
|
165
|
+
# A set of user-defined data that provides additional information about
|
|
166
|
+
# the log entry.
|
|
167
|
+
# @return [Hash]
|
|
168
|
+
attr_accessor :labels
|
|
169
|
+
|
|
170
|
+
##
|
|
171
|
+
# The log entry payload, represented as either a string, a hash (JSON), or
|
|
172
|
+
# a hash (protocol buffer).
|
|
173
|
+
# @return [String, Hash]
|
|
174
|
+
attr_accessor :payload
|
|
175
|
+
|
|
176
|
+
##
|
|
177
|
+
# Information about the HTTP request associated with this log entry, if
|
|
178
|
+
# applicable.
|
|
179
|
+
# @return [Gcloud::Logging::Entry::HttpRequest]
|
|
180
|
+
attr_reader :http_request
|
|
181
|
+
|
|
182
|
+
##
|
|
183
|
+
# Information about an operation associated with the log entry, if
|
|
184
|
+
# applicable.
|
|
185
|
+
# @return [Gcloud::Logging::Entry::Operation]
|
|
186
|
+
attr_reader :operation
|
|
187
|
+
|
|
188
|
+
##
|
|
189
|
+
# @private Determines if the Entry has any data.
|
|
190
|
+
def empty?
|
|
191
|
+
log_name.nil? &&
|
|
192
|
+
timestamp.nil? &&
|
|
193
|
+
insert_id.nil? &&
|
|
194
|
+
(labels.nil? || labels.empty?) &&
|
|
195
|
+
payload.nil? &&
|
|
196
|
+
resource.empty? &&
|
|
197
|
+
http_request.empty? &&
|
|
198
|
+
operation.empty?
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
##
|
|
202
|
+
# @private Exports the Entry to a Google::Logging::V2::LogEntry object.
|
|
203
|
+
def to_grpc
|
|
204
|
+
grpc = Google::Logging::V2::LogEntry.new(
|
|
205
|
+
log_name: log_name.to_s,
|
|
206
|
+
timestamp: timestamp_grpc,
|
|
207
|
+
# TODO: verify severity is the correct type?
|
|
208
|
+
severity: severity,
|
|
209
|
+
insert_id: insert_id.to_s,
|
|
210
|
+
labels: labels_grpc,
|
|
211
|
+
resource: resource.to_grpc,
|
|
212
|
+
http_request: http_request.to_grpc,
|
|
213
|
+
operation: operation.to_grpc
|
|
214
|
+
)
|
|
215
|
+
# Add payload
|
|
216
|
+
append_payload grpc
|
|
217
|
+
grpc
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
##
|
|
221
|
+
# @private New Entry from a Google::Logging::V2::LogEntry object.
|
|
222
|
+
def self.from_grpc grpc
|
|
223
|
+
return new if grpc.nil?
|
|
224
|
+
new.tap do |e|
|
|
225
|
+
e.log_name = grpc.log_name
|
|
226
|
+
e.timestamp = extract_timestamp(grpc)
|
|
227
|
+
e.severity = grpc.severity
|
|
228
|
+
e.insert_id = grpc.insert_id
|
|
229
|
+
e.labels = map_to_hash(grpc.labels)
|
|
230
|
+
e.payload = extract_payload(grpc)
|
|
231
|
+
e.instance_eval do
|
|
232
|
+
@resource = Resource.from_grpc grpc.resource
|
|
233
|
+
@http_request = HttpRequest.from_grpc grpc.http_request
|
|
234
|
+
@operation = Operation.from_grpc grpc.operation
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
##
|
|
240
|
+
# @private Convert a Google::Protobuf::Map to a Hash
|
|
241
|
+
def self.map_to_hash map
|
|
242
|
+
if map.respond_to? :to_h
|
|
243
|
+
map.to_h
|
|
244
|
+
else
|
|
245
|
+
# Enumerable doesn't have to_h on ruby 2.0...
|
|
246
|
+
Hash[map.to_a]
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
##
|
|
251
|
+
# @private Formats the timestamp as a Google::Protobuf::Timestamp object.
|
|
252
|
+
def timestamp_grpc
|
|
253
|
+
return nil if timestamp.nil?
|
|
254
|
+
# TODO: ArgumentError if timestamp is not a Time object?
|
|
255
|
+
Google::Protobuf::Timestamp.new(
|
|
256
|
+
seconds: timestamp.to_i,
|
|
257
|
+
nanos: timestamp.nsec
|
|
258
|
+
)
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
##
|
|
262
|
+
# @private Formats the labels so they can be saved to a
|
|
263
|
+
# Google::Logging::V2::LogEntry object.
|
|
264
|
+
def labels_grpc
|
|
265
|
+
# Coerce symbols to strings
|
|
266
|
+
Hash[labels.map do |k, v|
|
|
267
|
+
v = String(v) if v.is_a? Symbol
|
|
268
|
+
[String(k), v]
|
|
269
|
+
end]
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
##
|
|
273
|
+
# @private Adds the payload data to a Google::Logging::V2::LogEntry
|
|
274
|
+
# object.
|
|
275
|
+
def append_payload grpc
|
|
276
|
+
grpc.proto_payload = nil
|
|
277
|
+
grpc.json_payload = nil
|
|
278
|
+
grpc.text_payload = nil
|
|
279
|
+
|
|
280
|
+
if payload.is_a? Google::Protobuf::Any
|
|
281
|
+
grpc.proto_payload = payload
|
|
282
|
+
elsif payload.respond_to? :to_hash
|
|
283
|
+
grpc.json_payload = GRPCUtils.hash_to_struct payload.to_hash
|
|
284
|
+
else
|
|
285
|
+
grpc.text_payload = payload.to_s
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
##
|
|
290
|
+
# @private Extract payload data from Google API Client object.
|
|
291
|
+
def self.extract_payload grpc
|
|
292
|
+
grpc.proto_payload || grpc.json_payload || grpc.text_payload
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
##
|
|
296
|
+
# @private Get a Time object from a Google::Protobuf::Timestamp object.
|
|
297
|
+
def self.extract_timestamp grpc
|
|
298
|
+
return nil if grpc.timestamp.nil?
|
|
299
|
+
Time.at grpc.timestamp.seconds, grpc.timestamp.nanos/1000.0
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
end
|