1 // Copyright 2018 Google LLC
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 #ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_INTERNAL_LOGGING_CLIENT_H
16 #define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_INTERNAL_LOGGING_CLIENT_H
17 
18 #include "google/cloud/storage/internal/raw_client.h"
19 #include "google/cloud/storage/version.h"
20 
21 namespace google {
22 namespace cloud {
23 namespace storage {
24 inline namespace STORAGE_CLIENT_NS {
25 namespace internal {
26 /**
27  * A decorator for `RawClient` that logs each operation.
28  */
29 class LoggingClient : public RawClient {
30  public:
31   explicit LoggingClient(std::shared_ptr<RawClient> client);
32   ~LoggingClient() override = default;
33 
34   ClientOptions const& client_options() const override;
35 
36   StatusOr<ListBucketsResponse> ListBuckets(
37       ListBucketsRequest const& request) override;
38   StatusOr<BucketMetadata> CreateBucket(
39       CreateBucketRequest const& request) override;
40   StatusOr<BucketMetadata> GetBucketMetadata(
41       GetBucketMetadataRequest const& request) override;
42   StatusOr<EmptyResponse> DeleteBucket(DeleteBucketRequest const&) override;
43   StatusOr<BucketMetadata> UpdateBucket(
44       UpdateBucketRequest const& request) override;
45   StatusOr<BucketMetadata> PatchBucket(
46       PatchBucketRequest const& request) override;
47   StatusOr<IamPolicy> GetBucketIamPolicy(
48       GetBucketIamPolicyRequest const& request) override;
49   StatusOr<NativeIamPolicy> GetNativeBucketIamPolicy(
50       GetBucketIamPolicyRequest const& request) override;
51   StatusOr<IamPolicy> SetBucketIamPolicy(
52       SetBucketIamPolicyRequest const& request) override;
53   StatusOr<NativeIamPolicy> SetNativeBucketIamPolicy(
54       SetNativeBucketIamPolicyRequest const& request) override;
55   StatusOr<TestBucketIamPermissionsResponse> TestBucketIamPermissions(
56       TestBucketIamPermissionsRequest const& request) override;
57   StatusOr<BucketMetadata> LockBucketRetentionPolicy(
58       LockBucketRetentionPolicyRequest const& request) override;
59 
60   StatusOr<ObjectMetadata> InsertObjectMedia(
61       InsertObjectMediaRequest const& request) override;
62   StatusOr<ObjectMetadata> CopyObject(
63       CopyObjectRequest const& request) override;
64   StatusOr<ObjectMetadata> GetObjectMetadata(
65       GetObjectMetadataRequest const& request) override;
66   StatusOr<std::unique_ptr<ObjectReadSource>> ReadObject(
67       ReadObjectRangeRequest const&) override;
68   StatusOr<ListObjectsResponse> ListObjects(ListObjectsRequest const&) override;
69   StatusOr<EmptyResponse> DeleteObject(DeleteObjectRequest const&) override;
70   StatusOr<ObjectMetadata> UpdateObject(
71       UpdateObjectRequest const& request) override;
72   StatusOr<ObjectMetadata> PatchObject(
73       PatchObjectRequest const& request) override;
74   StatusOr<ObjectMetadata> ComposeObject(
75       ComposeObjectRequest const& request) override;
76   StatusOr<RewriteObjectResponse> RewriteObject(
77       RewriteObjectRequest const&) override;
78   StatusOr<std::unique_ptr<ResumableUploadSession>> CreateResumableSession(
79       ResumableUploadRequest const& request) override;
80   StatusOr<std::unique_ptr<ResumableUploadSession>> RestoreResumableSession(
81       std::string const& request) override;
82   StatusOr<EmptyResponse> DeleteResumableUpload(
83       DeleteResumableUploadRequest const& request) override;
84 
85   StatusOr<ListBucketAclResponse> ListBucketAcl(
86       ListBucketAclRequest const& request) override;
87   StatusOr<BucketAccessControl> CreateBucketAcl(
88       CreateBucketAclRequest const&) override;
89   StatusOr<EmptyResponse> DeleteBucketAcl(
90       DeleteBucketAclRequest const&) override;
91   StatusOr<BucketAccessControl> GetBucketAcl(
92       GetBucketAclRequest const&) override;
93   StatusOr<BucketAccessControl> UpdateBucketAcl(
94       UpdateBucketAclRequest const&) override;
95   StatusOr<BucketAccessControl> PatchBucketAcl(
96       PatchBucketAclRequest const&) override;
97 
98   StatusOr<ListObjectAclResponse> ListObjectAcl(
99       ListObjectAclRequest const& request) override;
100   StatusOr<ObjectAccessControl> CreateObjectAcl(
101       CreateObjectAclRequest const&) override;
102   StatusOr<EmptyResponse> DeleteObjectAcl(
103       DeleteObjectAclRequest const&) override;
104   StatusOr<ObjectAccessControl> GetObjectAcl(
105       GetObjectAclRequest const&) override;
106   StatusOr<ObjectAccessControl> UpdateObjectAcl(
107       UpdateObjectAclRequest const&) override;
108   StatusOr<ObjectAccessControl> PatchObjectAcl(
109       PatchObjectAclRequest const&) override;
110 
111   StatusOr<ListDefaultObjectAclResponse> ListDefaultObjectAcl(
112       ListDefaultObjectAclRequest const& request) override;
113   StatusOr<ObjectAccessControl> CreateDefaultObjectAcl(
114       CreateDefaultObjectAclRequest const&) override;
115   StatusOr<EmptyResponse> DeleteDefaultObjectAcl(
116       DeleteDefaultObjectAclRequest const&) override;
117   StatusOr<ObjectAccessControl> GetDefaultObjectAcl(
118       GetDefaultObjectAclRequest const&) override;
119   StatusOr<ObjectAccessControl> UpdateDefaultObjectAcl(
120       UpdateDefaultObjectAclRequest const&) override;
121   StatusOr<ObjectAccessControl> PatchDefaultObjectAcl(
122       PatchDefaultObjectAclRequest const&) override;
123 
124   StatusOr<ServiceAccount> GetServiceAccount(
125       GetProjectServiceAccountRequest const&) override;
126   StatusOr<ListHmacKeysResponse> ListHmacKeys(
127       ListHmacKeysRequest const&) override;
128   StatusOr<CreateHmacKeyResponse> CreateHmacKey(
129       CreateHmacKeyRequest const&) override;
130   StatusOr<EmptyResponse> DeleteHmacKey(DeleteHmacKeyRequest const&) override;
131   StatusOr<HmacKeyMetadata> GetHmacKey(GetHmacKeyRequest const&) override;
132   StatusOr<HmacKeyMetadata> UpdateHmacKey(UpdateHmacKeyRequest const&) override;
133   StatusOr<SignBlobResponse> SignBlob(SignBlobRequest const&) override;
134 
135   StatusOr<ListNotificationsResponse> ListNotifications(
136       ListNotificationsRequest const&) override;
137   StatusOr<NotificationMetadata> CreateNotification(
138       CreateNotificationRequest const&) override;
139   StatusOr<NotificationMetadata> GetNotification(
140       GetNotificationRequest const&) override;
141   StatusOr<EmptyResponse> DeleteNotification(
142       DeleteNotificationRequest const&) override;
143 
client()144   std::shared_ptr<RawClient> client() const { return client_; }
145 
146  private:
147   std::shared_ptr<RawClient> client_;
148 };
149 
150 }  // namespace internal
151 }  // namespace STORAGE_CLIENT_NS
152 }  // namespace storage
153 }  // namespace cloud
154 }  // namespace google
155 
156 #endif  // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_INTERNAL_LOGGING_CLIENT_H
157