forked from GoogleCloudPlatform/python-docs-samples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexport_logs_api.py
More file actions
135 lines (106 loc) · 3.98 KB
/
export_logs_api.py
File metadata and controls
135 lines (106 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env python
# Copyright 2016 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import argparse
from gcloud import logging
from oauth2client.client import GoogleCredentials
FILTER = 'logName="projects/{}/logs/syslog" AND severity>=ERROR'
DESTINATION = 'storage.googleapis.com/{}'
def create_sink_if_not_exists(client, args):
# [START create]
sink = client.sink(
args.sink_name,
FILTER.format(args.project_id),
DESTINATION.format(args.destination_bucket))
if not sink.exists():
sink.create()
print('Created sink {}'.format(sink.name))
# [END create]
return sink
def list_sinks(client, args):
print('Listing sinks available')
# [START list]
sinks = []
token = None
while True:
new_sinks, token = client.list_sinks(page_token=token)
sinks += new_sinks
if token is None:
break
for sink in sinks:
print('{}: {}'.format(sink.name, sink.destination))
# [END list]
return sinks
def update_sink(client, args):
"""Changes the filter of a sink.
The filter is used to determine which log statements match this sink and
will be exported to the destination.
"""
# Removes the robot in textPayload part of filter
# [START update]
sink = client.sink(
args.sink_name,
FILTER.format(args.project_id),
DESTINATION.format(args.destination_bucket))
sink.filter = ('logName="projects/{}/logs/syslog" '
'AND severity>= INFO'.format(sink.project))
print('Updated sink {}'.format(sink.name))
sink.update()
# [END update]
def delete_sink(client, args):
"""Deletes a sink"""
# [START delete]
sink = client.sink(
args.sink_name,
FILTER.format(args.project_id),
DESTINATION.format(args.destination_bucket))
sink.delete()
# [END delete]
print('Deleted sink {}'.format(sink.name))
def get_client(project_id):
"""Builds an http client authenticated with the service account
credentials."""
credentials = GoogleCredentials.get_application_default()
return logging.Client(project=project_id, credentials=credentials)
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
'--project_id', help='Project ID you want to access.', required=True,)
parser.add_argument(
'--sink_name', help='Output bucket to direct sink to',
default="mysink")
subparsers = parser.add_subparsers()
create_parser = subparsers.add_parser('create_sink')
create_parser.set_defaults(func=create_sink_if_not_exists)
create_parser.add_argument(
'--destination_bucket', help='Output bucket to direct sink to',
required=True)
list_parser = subparsers.add_parser('list_sinks')
list_parser.set_defaults(func=list_sinks)
update_parser = subparsers.add_parser('update_sink')
update_parser.set_defaults(func=update_sink)
update_parser.add_argument(
'--destination_bucket', help='Output bucket to direct sink to',
required=True)
delete_parser = subparsers.add_parser('delete_sink')
delete_parser.add_argument(
'--destination_bucket', help='Output bucket to direct sink to',
required=True)
delete_parser.set_defaults(func=delete_sink)
args = parser.parse_args()
client = get_client(args.project_id)
args.func(client, args)