in aliyun/log/logclient.py [0:0]
def put_logs(self, request):
""" Put logs to log service. up to 512000 logs up to 10MB size
Unsuccessful operation will cause an LogException.
:type request: PutLogsRequest
:param request: the PutLogs request parameters class
:return: PutLogsResponse
:raise: LogException
"""
if len(request.get_log_items()) > 512000:
raise LogException('InvalidLogSize',
"logItems' length exceeds maximum limitation: 512000 lines. now: {0}".format(
len(request.get_log_items())))
logGroup = LogGroup()
logGroup.Topic = request.get_topic()
if request.get_source():
logGroup.Source = request.get_source()
else:
if self._source == '127.0.0.1':
self._source = Util.get_host_ip(request.get_project() + '.' + self._logHost)
logGroup.Source = self._source
for logItem in request.get_log_items():
log = logGroup.Logs.add()
log.Time = logItem.get_time()
log.Time_ns = logItem.get_time_nano_part()
contents = logItem.get_contents()
for key, value in contents:
content = log.Contents.add()
content.Key = self._get_unicode(key)
content.Value = self._get_binary(value)
if request.get_log_tags() is not None:
tags = request.get_log_tags()
for key, value in tags:
pb_tag = logGroup.LogTags.add()
pb_tag.Key = key
pb_tag.Value = value
body = logGroup.SerializeToString()
if len(body) > 10 * 1024 * 1024: # 10 MB
raise LogException('InvalidLogSize',
"logItems' size exceeds maximum limitation: 10 MB. now: {0} MB.".format(
len(body) / 1024.0 / 1024))
headers = {'x-log-bodyrawsize': str(len(body)), 'Content-Type': 'application/x-protobuf'}
need_compress = request.get_compress() is None or request.get_compress()
if need_compress:
compress_type = CompressType.default_compress_type()
headers['x-log-compresstype'] = str(compress_type)
body = Compressor.compress(body, compress_type)
params = {}
logstore = request.get_logstore()
project = request.get_project()
if request.get_hash_key() is not None:
resource = '/logstores/' + logstore + "/shards/route"
params["key"] = request.get_hash_key()
else:
resource = '/logstores/' + logstore + "/shards/lb"
(resp, header) = self._send('POST', project, body, resource, params, headers)
return PutLogsResponse(header, resp)