OLD | NEW |
| (Empty) |
1 # Copyright 2011 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 from gslib.command import Command | |
16 from gslib.command import COMMAND_NAME | |
17 from gslib.command import COMMAND_NAME_ALIASES | |
18 from gslib.command import CONFIG_REQUIRED | |
19 from gslib.command import FILE_URIS_OK | |
20 from gslib.command import MAX_ARGS | |
21 from gslib.command import MIN_ARGS | |
22 from gslib.command import PROVIDER_URIS_OK | |
23 from gslib.command import SUPPORTED_SUB_ARGS | |
24 from gslib.command import URIS_START_ARG | |
25 from gslib.exception import CommandException | |
26 from gslib.help_provider import HELP_NAME | |
27 from gslib.help_provider import HELP_NAME_ALIASES | |
28 from gslib.help_provider import HELP_ONE_LINE_SUMMARY | |
29 from gslib.help_provider import HELP_TEXT | |
30 from gslib.help_provider import HelpType | |
31 from gslib.help_provider import HELP_TYPE | |
32 from gslib.util import NO_MAX | |
33 | |
34 _detailed_help_text = (""" | |
35 <B>SYNOPSIS</B> | |
36 gsutil enablelogging -b logging_bucket [-o log_object_prefix] uri... | |
37 | |
38 | |
39 <B>DESCRIPTION</B> | |
40 Google Cloud Storage offers access logs and storage data in the form of | |
41 CSV files that you can download and view. Access logs provide information | |
42 for all of the requests made on a specified bucket in the last 24 hours, | |
43 while the storage logs provide information about the storage consumption of | |
44 that bucket for the last 24 hour period. The logs and storage data files | |
45 are automatically created as new objects in a bucket that you specify, in | |
46 24 hour intervals. | |
47 | |
48 The gsutil enablelogging command will enable access logging of the | |
49 buckets named by the specified uris, outputting log files in the specified | |
50 logging_bucket. logging_bucket must already exist, and all URIs must name | |
51 buckets (e.g., gs://bucket). For example, the command: | |
52 | |
53 gsutil enablelogging -b gs://my_logging_bucket -o AccessLog \\ | |
54 gs://my_bucket1 gs://my_bucket2 | |
55 | |
56 will cause all read and write activity to objects in gs://mybucket1 and | |
57 gs://mybucket2 to be logged to objects prefixed with the name "AccessLog", | |
58 with those log objects written to the bucket gs://my_logging_bucket. | |
59 | |
60 Note that log data may contain sensitive information, so you should make | |
61 sure to set an appropriate default bucket ACL to protect that data. (See | |
62 "gsutil help setdefacl".) | |
63 | |
64 You can check logging status using the gsutil getlogging command. For log | |
65 format details see "gsutil help getlogging". | |
66 | |
67 | |
68 <B>OPTIONS</B> | |
69 -b bucket Specifies the log bucket. | |
70 | |
71 -o prefix Specifies the prefix for log object names. Default value | |
72 is the bucket name. | |
73 """) | |
74 | |
75 | |
76 class EnableLoggingCommand(Command): | |
77 """Implementation of gsutil enablelogging command.""" | |
78 | |
79 # Command specification (processed by parent class). | |
80 command_spec = { | |
81 # Name of command. | |
82 COMMAND_NAME : 'enablelogging', | |
83 # List of command name aliases. | |
84 COMMAND_NAME_ALIASES : [], | |
85 # Min number of args required by this command. | |
86 MIN_ARGS : 1, | |
87 # Max number of args required by this command, or NO_MAX. | |
88 MAX_ARGS : NO_MAX, | |
89 # Getopt-style string specifying acceptable sub args. | |
90 SUPPORTED_SUB_ARGS : 'b:o:', | |
91 # True if file URIs acceptable for this command. | |
92 FILE_URIS_OK : False, | |
93 # True if provider-only URIs acceptable for this command. | |
94 PROVIDER_URIS_OK : False, | |
95 # Index in args of first URI arg. | |
96 URIS_START_ARG : 0, | |
97 # True if must configure gsutil before running command. | |
98 CONFIG_REQUIRED : True, | |
99 } | |
100 help_spec = { | |
101 # Name of command or auxiliary help info for which this help applies. | |
102 HELP_NAME : 'enablelogging', | |
103 # List of help name aliases. | |
104 HELP_NAME_ALIASES : ['logging', 'logs', 'log'], | |
105 # Type of help: | |
106 HELP_TYPE : HelpType.COMMAND_HELP, | |
107 # One line summary of this help. | |
108 HELP_ONE_LINE_SUMMARY : 'Enable logging on buckets', | |
109 # The full help text. | |
110 HELP_TEXT : _detailed_help_text, | |
111 } | |
112 | |
113 # Command entry point. | |
114 def RunCommand(self): | |
115 # Disallow multi-provider enablelogging calls, because the schemas | |
116 # differ. | |
117 storage_uri = self.UrisAreForSingleProvider(self.args) | |
118 if not storage_uri: | |
119 raise CommandException('enablelogging command spanning providers not ' | |
120 'allowed.') | |
121 target_bucket_uri = None | |
122 target_prefix = None | |
123 for opt, opt_arg in self.sub_opts: | |
124 if opt == '-b': | |
125 target_bucket_uri = self.suri_builder.StorageUri(opt_arg) | |
126 if opt == '-o': | |
127 target_prefix = opt_arg | |
128 | |
129 if not target_bucket_uri: | |
130 raise CommandException('enablelogging requires \'-b <log_bucket>\' ' | |
131 'option') | |
132 if not target_bucket_uri.names_bucket(): | |
133 raise CommandException('-b option must specify a bucket uri') | |
134 | |
135 did_some_work = False | |
136 for uri_str in self.args: | |
137 for uri in self.WildcardIterator(uri_str).IterUris(): | |
138 if uri.names_object(): | |
139 raise CommandException('enablelogging cannot be applied to objects') | |
140 did_some_work = True | |
141 print 'Enabling logging on %s...' % uri | |
142 self.proj_id_handler.FillInProjectHeaderIfNeeded( | |
143 'enablelogging', storage_uri, self.headers) | |
144 uri.enable_logging(target_bucket_uri.bucket_name, target_prefix, False, | |
145 self.headers) | |
146 if not did_some_work: | |
147 raise CommandException('No URIs matched') | |
148 | |
149 return 0 | |
OLD | NEW |