|
1 | 1 | import logging |
2 | | -from cloudforet.monitoring.libs.google_connector import GoogleConnector |
| 2 | +from cloudforet.monitoring.libs.google_cloud_connector import GoogleCloudConnector |
3 | 3 |
|
4 | 4 | _LOGGER = logging.getLogger(__name__) |
5 | 5 |
|
6 | 6 |
|
7 | | -class CloudTrailConnector(GoogleConnector): |
| 7 | +class CloudLoggingConnector(GoogleCloudConnector): |
| 8 | + google_client_service = 'logging' |
| 9 | + version = 'v2' |
8 | 10 |
|
9 | 11 | def __init__(self, **kwargs): |
10 | 12 | super().__init__(**kwargs) |
| 13 | + |
| 14 | + def list_log_entries(self, params): |
| 15 | + print(params) |
| 16 | + query = params['query'] |
| 17 | + start = params['start'] |
| 18 | + end = params['end'] |
| 19 | + |
| 20 | + _query = { |
| 21 | + 'filter': self._generate_logging_filter(query, start, end), |
| 22 | + 'orderBy': 'timestamp desc' |
| 23 | + } |
| 24 | + print(_query) |
| 25 | + request = self.client.entries().list(**_query) |
| 26 | + |
| 27 | + logs = [] |
| 28 | + while request is not None: |
| 29 | + response = request.execute() |
| 30 | + logs = [log for log in response.get('entries', [])] |
| 31 | + request = self.client.entries().list_next(previous_request=request, previous_response=response) |
| 32 | + return logs |
| 33 | + |
| 34 | + @staticmethod |
| 35 | + def _generate_logging_filter(query, start, end): |
| 36 | + logging_filter = '' |
| 37 | + log_filters = query.get('filters', []) |
| 38 | + for log_filter in log_filters: |
| 39 | + _filter = [] |
| 40 | + resource_type = log_filter.get('resource_type') |
| 41 | + labels = log_filter.get('labels', {}) |
| 42 | + if resource_type: |
| 43 | + _filter.append(f'resource.type={resource_type}') |
| 44 | + if labels: |
| 45 | + for key, value in labels.items(): |
| 46 | + _filter.append(f'{key}={value}') |
| 47 | + if logging_filter: |
| 48 | + logging_filter += f' OR ({" AND ".join(_filter)})' |
| 49 | + else: |
| 50 | + logging_filter += f'({" AND ".join(_filter)})' |
| 51 | + |
| 52 | + if logging_filter: |
| 53 | + logging_filter += f' AND timestamp >= "{start}" AND timestamp <= "{end}"' |
| 54 | + else: |
| 55 | + logging_filter += f'timestamp >= "{start}" AND timestamp <= "{end}"' |
| 56 | + |
| 57 | + return logging_filter |
0 commit comments