aliyun-log-python-sdk 0.9.33__tar.gz → 0.9.35__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aliyun_log_python_sdk-0.9.33/aliyun_log_python_sdk.egg-info → aliyun_log_python_sdk-0.9.35}/PKG-INFO +10 -2
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/__init__.py +2 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/__init__.py +1 -1
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/consumer_client.py +2 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/fetched_log_group.py +6 -5
- aliyun_log_python_sdk-0.9.35/aliyun/log/consumer/preprocessor.py +6 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/shard_worker.py +20 -13
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/tasks.py +42 -18
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_kv.py +6 -4
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logclient.py +127 -0
- aliyun_log_python_sdk-0.9.35/aliyun/log/logtail_pipeline_config_detail.py +135 -0
- aliyun_log_python_sdk-0.9.35/aliyun/log/logtail_pipeline_config_response.py +161 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/pulllog_response.py +27 -10
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/version.py +1 -1
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35/aliyun_log_python_sdk.egg-info}/PKG-INFO +10 -2
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun_log_python_sdk.egg-info/SOURCES.txt +4 -0
- aliyun_log_python_sdk-0.9.35/tests/test_logtail_pipeline_config.py +389 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/LICENSE +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/README.md +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/__init__.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/_proto_py2/__init__.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/_proto_py2/log_logs_pb2.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/_proto_py2/log_logs_raw_pb2.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/acl_config.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/acl_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/async_sql_pb2.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/async_sql_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/auth.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/common_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/compress.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/checkpoint_tracker.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/config.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/exceptions.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/heart_beat.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/worker.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer_group_request.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer_group_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/credentials.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/cursor_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/cursor_time_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/delete_async_sql_request.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/deletelogsrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/deletelogssresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/__init__.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/doc_logitem_converter.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/index_logstore_mappings.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/mapping_index_converter.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_log.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_manager.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_task.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/util.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_config_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/__init__.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/config_parser.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/etl_util.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/exceptions.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/restrict_config_parser.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/runner.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/settings.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/__init__.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_base.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_csv.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_json.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_lookup.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_mv.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_regex.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/trans_set_field.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/__init__.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/condition_list.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/condition_transform.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/condition_util.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/transform_base.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/transform_list.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/transform_meta.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/export_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ext/__init__.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ext/jupyter_magic.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ext/syslogclient.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/external_store_config.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/external_store_config_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/get_async_sql_request.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getcontextlogsresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getdeletelogsstatusrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getdeletelogsstatusresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/gethistogramsrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/gethistogramsresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getlogsrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getlogsresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/histogram.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/index_config.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/index_config_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ingestion_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/job.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listdeletelogsstasksrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listdeletelogsstasksresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listlogstoresrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listlogstoresresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listtopicsrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listtopicsresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/log_logs_pb2.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/log_logs_raw_pb2.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logclient_core.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logclient_operator.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logexception.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logger_hanlder.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logitem.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logstore_config_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logtail_config_detail.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logtail_config_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/machine_group_detail.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/machinegroup_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/metering_mode_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/odps_sink.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/oss_sink.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/pluralize.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/project_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/proto.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/putlogsrequest.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/putlogsresponse.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/queriedlog.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/rebuild_index_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/resource_params.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/resource_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/scheduled_sql.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/scheduled_sql_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/shard_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/shipper_config.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/shipper_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/sink.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/sql_instance_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/store_view.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/store_view_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/submit_async_sql_request.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/substore_config_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/tag_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/topostore_params.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/topostore_response.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/util.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun_log_python_sdk.egg-info/dependency_links.txt +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun_log_python_sdk.egg-info/requires.txt +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun_log_python_sdk.egg-info/top_level.txt +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/setup.cfg +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/setup.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/tests/test_alert.py +0 -0
- {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/tests/test_util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: aliyun-log-python-sdk
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.35
|
|
4
4
|
Summary: Aliyun log service Python client SDK
|
|
5
5
|
Home-page: https://github.com/aliyun/aliyun-log-python-sdk
|
|
6
6
|
Author: Aliyun
|
|
@@ -29,6 +29,14 @@ Requires-Dist: pytest; extra == "test"
|
|
|
29
29
|
Requires-Dist: lz4; extra == "test"
|
|
30
30
|
Requires-Dist: virtualenv; extra == "test"
|
|
31
31
|
Requires-Dist: zstandard; extra == "test"
|
|
32
|
+
Dynamic: author
|
|
33
|
+
Dynamic: classifier
|
|
34
|
+
Dynamic: description
|
|
35
|
+
Dynamic: home-page
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
Dynamic: provides-extra
|
|
38
|
+
Dynamic: requires-dist
|
|
39
|
+
Dynamic: summary
|
|
32
40
|
|
|
33
41
|
|
|
34
42
|
Python SDK for Alicloud Log Service
|
|
@@ -7,6 +7,8 @@ from .index_config import IndexConfig, IndexKeyConfig, IndexLineConfig
|
|
|
7
7
|
from .listtopicsrequest import ListTopicsRequest
|
|
8
8
|
from .listlogstoresrequest import ListLogstoresRequest
|
|
9
9
|
from .logtail_config_detail import *
|
|
10
|
+
from .logtail_pipeline_config_detail import *
|
|
11
|
+
from .logtail_pipeline_config_response import *
|
|
10
12
|
from .machine_group_detail import MachineGroupDetail
|
|
11
13
|
from .putlogsrequest import PutLogsRequest
|
|
12
14
|
from .shipper_config import ShipperTask, OssShipperConfig, OdpsShipperConfig
|
{aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/consumer_client.py
RENAMED
|
@@ -7,6 +7,7 @@ from .exceptions import ClientWorkerException
|
|
|
7
7
|
from ..logexception import LogException
|
|
8
8
|
from ..version import USER_AGENT
|
|
9
9
|
from ..auth import *
|
|
10
|
+
from ..pulllog_response import PullLogResponse
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
class ConsumerClientLoggerAdapter(logging.LoggerAdapter):
|
|
@@ -180,4 +181,5 @@ class ConsumerClient(object):
|
|
|
180
181
|
return self.mclient.get_end_cursor(self.mproject, self.mlogstore, shard_id).get_cursor()
|
|
181
182
|
|
|
182
183
|
def pull_logs(self, shard_id, cursor, end_cursor=None, count=1000, query=None, processor=None):
|
|
184
|
+
# type: (int, str, str, int, str, object) -> PullLogResponse
|
|
183
185
|
return self.mclient.pull_logs(self.mproject, self.mlogstore, shard_id, cursor, count, compress=True, end_cursor=end_cursor, query=query, accept_compress_type=self.accept_compress_type, processor=processor)
|
|
@@ -3,18 +3,19 @@
|
|
|
3
3
|
|
|
4
4
|
class FetchedLogGroup(object):
|
|
5
5
|
|
|
6
|
-
def __init__(self, shard_id,
|
|
6
|
+
def __init__(self, shard_id, data, end_cursor, log_group_count):
|
|
7
7
|
self._shard_id = shard_id
|
|
8
|
-
self.
|
|
8
|
+
self._data = data
|
|
9
9
|
self._end_cursor = end_cursor
|
|
10
|
+
self._log_group_count = log_group_count
|
|
10
11
|
|
|
11
12
|
@property
|
|
12
13
|
def shard_id(self):
|
|
13
14
|
return self._shard_id
|
|
14
15
|
|
|
15
16
|
@property
|
|
16
|
-
def
|
|
17
|
-
return self.
|
|
17
|
+
def data(self):
|
|
18
|
+
return self._data
|
|
18
19
|
|
|
19
20
|
@property
|
|
20
21
|
def end_cursor(self):
|
|
@@ -22,4 +23,4 @@ class FetchedLogGroup(object):
|
|
|
22
23
|
|
|
23
24
|
@property
|
|
24
25
|
def log_group_size(self):
|
|
25
|
-
return
|
|
26
|
+
return self._log_group_count
|
{aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/shard_worker.py
RENAMED
|
@@ -66,6 +66,7 @@ class ShardConsumerWorker(object):
|
|
|
66
66
|
self.save_last_checkpoint = False
|
|
67
67
|
self.query = query
|
|
68
68
|
self.consume_processor = consume_processor
|
|
69
|
+
self.preprocessor = self.processor._preprocessor
|
|
69
70
|
self.logger = ShardConsumerWorkerLoggerAdapter(
|
|
70
71
|
logging.getLogger(__name__), {"shard_consumer_worker": self})
|
|
71
72
|
|
|
@@ -98,10 +99,13 @@ class ShardConsumerWorker(object):
|
|
|
98
99
|
|
|
99
100
|
self.last_success_fetch_time = time.time()
|
|
100
101
|
|
|
101
|
-
self.last_fetch_log_group = FetchedLogGroup(self.shard_id,
|
|
102
|
-
task_result.
|
|
102
|
+
self.last_fetch_log_group = FetchedLogGroup(self.shard_id,
|
|
103
|
+
task_result.get_data(),
|
|
104
|
+
task_result.get_cursor(),
|
|
105
|
+
task_result.get_log_group_count())
|
|
106
|
+
|
|
103
107
|
self.next_fetch_cursor = task_result.get_cursor()
|
|
104
|
-
self.last_fetch_count =
|
|
108
|
+
self.last_fetch_count = task_result.get_log_group_count()
|
|
105
109
|
self.last_fetch_size = task_result.get_raw_size()
|
|
106
110
|
self.rawLogGroupCountBeforeQuery = task_result.get_raw_log_group_count_before_query()
|
|
107
111
|
self.rawSizeBeforeQuery = task_result.get_raw_size_before_query()
|
|
@@ -114,7 +118,6 @@ class ShardConsumerWorker(object):
|
|
|
114
118
|
self.checkpoint_tracker.flush_check_point()
|
|
115
119
|
self.save_last_checkpoint = True
|
|
116
120
|
|
|
117
|
-
|
|
118
121
|
self._sample_log_error(task_result)
|
|
119
122
|
|
|
120
123
|
# no task or task is done, create new task
|
|
@@ -136,12 +139,17 @@ class ShardConsumerWorker(object):
|
|
|
136
139
|
is_generate_fetch_task = (time.time() - self.last_fetch_time) > 0.05
|
|
137
140
|
if is_generate_fetch_task:
|
|
138
141
|
self.last_fetch_time = time.time()
|
|
139
|
-
self.fetch_data_future =
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
self.fetch_data_future = self.executor.submit(
|
|
143
|
+
consumer_fetch_task,
|
|
144
|
+
self.log_client,
|
|
145
|
+
self.preprocessor,
|
|
146
|
+
self.shard_id,
|
|
147
|
+
self.next_fetch_cursor,
|
|
148
|
+
max_fetch_log_group_size=self.max_fetch_log_group_size,
|
|
149
|
+
end_cursor=self.fetch_end_cursor,
|
|
150
|
+
query=self.query,
|
|
151
|
+
consume_processor=self.consume_processor,
|
|
152
|
+
)
|
|
145
153
|
else:
|
|
146
154
|
self.fetch_data_future = None
|
|
147
155
|
else:
|
|
@@ -213,13 +221,12 @@ class ShardConsumerWorker(object):
|
|
|
213
221
|
self.checkpoint_tracker.set_cursor(self.last_fetch_log_group.end_cursor)
|
|
214
222
|
self.current_task_exist = True
|
|
215
223
|
|
|
216
|
-
|
|
217
|
-
last_fetch_log_group = copy.deepcopy(self.last_fetch_log_group)
|
|
224
|
+
log_group = self.last_fetch_log_group
|
|
218
225
|
self.last_fetch_log_group = None
|
|
219
226
|
|
|
220
227
|
if self.last_fetch_count > 0:
|
|
221
228
|
self.task_future = self.executor.submit(consumer_process_task, self.processor,
|
|
222
|
-
|
|
229
|
+
log_group.data,
|
|
223
230
|
self.checkpoint_tracker)
|
|
224
231
|
|
|
225
232
|
elif self.consumer_status == ConsumerStatus.SHUTTING_DOWN:
|
|
@@ -5,6 +5,9 @@ import logging
|
|
|
5
5
|
|
|
6
6
|
from .config import CursorPosition
|
|
7
7
|
from ..logexception import LogException
|
|
8
|
+
from ..pulllog_response import PullLogResponse
|
|
9
|
+
from .consumer_client import ConsumerClient
|
|
10
|
+
from .preprocessor import to_log_group_list_pb, to_flattern_json_list
|
|
8
11
|
import time
|
|
9
12
|
import six
|
|
10
13
|
import sys
|
|
@@ -17,6 +20,7 @@ class ConsumerProcessorBase(object):
|
|
|
17
20
|
self.shard_id = -1
|
|
18
21
|
self.last_check_time = 0
|
|
19
22
|
self.checkpoint_timeout = 3
|
|
23
|
+
self._preprocessor = to_log_group_list_pb
|
|
20
24
|
|
|
21
25
|
def save_checkpoint(self, tracker, force=False):
|
|
22
26
|
current_time = time.time()
|
|
@@ -53,6 +57,20 @@ class ConsumerProcessorBase(object):
|
|
|
53
57
|
self.save_checkpoint(check_point_tracker, force=True)
|
|
54
58
|
|
|
55
59
|
|
|
60
|
+
class ConsumerJsonProcessorBase(ConsumerProcessorBase):
|
|
61
|
+
|
|
62
|
+
def __init__(self):
|
|
63
|
+
super(ConsumerJsonProcessorBase, self).__init__()
|
|
64
|
+
self._preprocessor = to_flattern_json_list
|
|
65
|
+
|
|
66
|
+
@abc.abstractmethod
|
|
67
|
+
def process(self, flattern_json_list, check_point_tracker):
|
|
68
|
+
"""
|
|
69
|
+
@flattern_json_list a list of dict, each dict is a log, eg: [{"__time__": 1761721979, "key1": "value1", "hello": "world", "__tag__:tagkey1": "tagvalue1" }]
|
|
70
|
+
"""
|
|
71
|
+
raise NotImplementedError("not create method process")
|
|
72
|
+
|
|
73
|
+
|
|
56
74
|
class ConsumerProcessorAdaptor(ConsumerProcessorBase):
|
|
57
75
|
def __init__(self, func):
|
|
58
76
|
super(ConsumerProcessorAdaptor, self).__init__()
|
|
@@ -112,28 +130,32 @@ class InitTaskResult(TaskResult):
|
|
|
112
130
|
|
|
113
131
|
|
|
114
132
|
class FetchTaskResult(TaskResult):
|
|
115
|
-
def __init__(self,
|
|
133
|
+
def __init__(self, data, log_group_count, cursor, raw_size , raw_size_before_query, raw_log_group_count_before_query):
|
|
116
134
|
super(FetchTaskResult, self).__init__(None)
|
|
117
|
-
self.
|
|
118
|
-
self.
|
|
119
|
-
self.
|
|
120
|
-
self.
|
|
121
|
-
self.
|
|
135
|
+
self._data = data
|
|
136
|
+
self._log_group_count = log_group_count
|
|
137
|
+
self._cursor = cursor
|
|
138
|
+
self._raw_size = raw_size
|
|
139
|
+
self._raw_size_before_query = raw_size_before_query
|
|
140
|
+
self._raw_log_group_count_before_query = raw_log_group_count_before_query
|
|
122
141
|
|
|
123
|
-
def
|
|
124
|
-
return self.
|
|
142
|
+
def get_data(self):
|
|
143
|
+
return self._data
|
|
125
144
|
|
|
126
145
|
def get_cursor(self):
|
|
127
|
-
return self.
|
|
146
|
+
return self._cursor
|
|
147
|
+
|
|
148
|
+
def get_log_group_count(self):
|
|
149
|
+
return self._log_group_count
|
|
128
150
|
|
|
129
151
|
def get_raw_size(self):
|
|
130
|
-
return self.
|
|
152
|
+
return self._raw_size
|
|
131
153
|
|
|
132
154
|
def get_raw_size_before_query(self):
|
|
133
|
-
return self.
|
|
155
|
+
return self._raw_size_before_query
|
|
134
156
|
|
|
135
157
|
def get_raw_log_group_count_before_query(self):
|
|
136
|
-
return self.
|
|
158
|
+
return self._raw_log_group_count_before_query
|
|
137
159
|
|
|
138
160
|
|
|
139
161
|
def consumer_process_task(processor, log_groups, check_point_tracker):
|
|
@@ -186,16 +208,18 @@ def consumer_initialize_task(processor, consumer_client, shard_id, cursor_positi
|
|
|
186
208
|
except Exception as e:
|
|
187
209
|
return TaskResult(e)
|
|
188
210
|
|
|
189
|
-
|
|
190
|
-
|
|
211
|
+
def consumer_fetch_task(loghub_client_adapter, preprocessor, shard_id, cursor, max_fetch_log_group_size=1000, end_cursor=None, query=None, consume_processor=None):
|
|
212
|
+
# type: (ConsumerClient, object, int, str, int, str, str, str) -> FetchTaskResult
|
|
191
213
|
exception = None
|
|
192
214
|
|
|
193
215
|
for retry_times in range(3):
|
|
194
216
|
try:
|
|
217
|
+
# type: PullLogResponse
|
|
195
218
|
response = loghub_client_adapter.pull_logs(shard_id, cursor, count=max_fetch_log_group_size, end_cursor=end_cursor, query=query, processor=consume_processor)
|
|
196
|
-
|
|
219
|
+
data = preprocessor(response)
|
|
197
220
|
next_cursor = response.get_next_cursor()
|
|
198
221
|
raw_size = response.get_raw_size()
|
|
222
|
+
log_group_count = response.get_loggroup_count()
|
|
199
223
|
raw_size_before_query = 0
|
|
200
224
|
raw_log_group_count_before_query = 0
|
|
201
225
|
if query or consume_processor:
|
|
@@ -203,11 +227,11 @@ def consumer_fetch_task(loghub_client_adapter, shard_id, cursor, max_fetch_log_g
|
|
|
203
227
|
raw_log_group_count_before_query = max(response.get_raw_log_group_count_before_query(), 0)
|
|
204
228
|
logger.debug("shard id = %s cursor = %s next cursor = %s size: %s",
|
|
205
229
|
shard_id, cursor, next_cursor,
|
|
206
|
-
|
|
230
|
+
log_group_count)
|
|
207
231
|
if not next_cursor:
|
|
208
|
-
return FetchTaskResult(
|
|
232
|
+
return FetchTaskResult(data, log_group_count, cursor, raw_size, raw_size_before_query, raw_log_group_count_before_query)
|
|
209
233
|
else:
|
|
210
|
-
return FetchTaskResult(
|
|
234
|
+
return FetchTaskResult(data, log_group_count, next_cursor, raw_size, raw_size_before_query, raw_log_group_count_before_query)
|
|
211
235
|
except LogException as e:
|
|
212
236
|
exception = e
|
|
213
237
|
if exception.get_resp_status() == 403:
|
|
@@ -32,12 +32,14 @@ class kv_transformer(trans_comp_check_mdoe_base):
|
|
|
32
32
|
@staticmethod
|
|
33
33
|
@cached
|
|
34
34
|
def _get_kv_ptn(sep, quote, escape):
|
|
35
|
-
|
|
35
|
+
# Use Unicode characters directly to avoid escape sequence warnings
|
|
36
|
+
# \u4e00-\u9fa5 = Chinese characters, \u0800-\u4e00 = other Unicode range
|
|
37
|
+
p1 = r'(?!{0})([' + '\u4e00-\u9fa5\u0800-\u4e00' + r'\w\.\-]+)\s*{0}\s*([' + '\u4e00-\u9fa5\u0800-\u4e00' + r'\w\.\-]+)'
|
|
36
38
|
if not escape:
|
|
37
|
-
p2 =
|
|
39
|
+
p2 = r'(?!{0})([' + '\u4e00-\u9fa5\u0800-\u4e00' + r'\w\.\-]+)\s*{0}\s*{1}\s*([^{1}]*?)\s*{1}'
|
|
38
40
|
else:
|
|
39
|
-
p2 =
|
|
40
|
-
ps =
|
|
41
|
+
p2 = r'(?!{0})([' + '\u4e00-\u9fa5\u0800-\u4e00' + r'\w\.\-]+)\s*{0}\s*{1}\s*((?:[^{1}]|\\{1})*?[^\\]){1}'
|
|
42
|
+
ps = '|'.join([p1, p2]).format(sep, quote)
|
|
41
43
|
|
|
42
44
|
logger.info(u"trans_comp_kv: get ptn: {0}".format(ps))
|
|
43
45
|
return re.compile(ps)
|
|
@@ -41,6 +41,7 @@ from .logexception import LogException
|
|
|
41
41
|
from .logstore_config_response import *
|
|
42
42
|
from .substore_config_response import *
|
|
43
43
|
from .logtail_config_response import *
|
|
44
|
+
from .logtail_pipeline_config_response import *
|
|
44
45
|
from .machinegroup_response import *
|
|
45
46
|
from .rebuild_index_response import *
|
|
46
47
|
from .project_response import *
|
|
@@ -2328,6 +2329,132 @@ class LogClient(object):
|
|
|
2328
2329
|
(resp, header) = self._send("GET", project_name, None, resource, params, headers)
|
|
2329
2330
|
return ListLogtailConfigResponse(resp, header)
|
|
2330
2331
|
|
|
2332
|
+
def create_logtail_pipeline_config(self, project_name, config_detail):
|
|
2333
|
+
""" create logtail pipeline config in a project
|
|
2334
|
+
Unsuccessful operation will cause an LogException.
|
|
2335
|
+
|
|
2336
|
+
:type project_name: string
|
|
2337
|
+
:param project_name: the Project name
|
|
2338
|
+
|
|
2339
|
+
:type config_detail: LogtailPipelineConfigDetail
|
|
2340
|
+
:param config_detail: the logtail pipeline config detail
|
|
2341
|
+
|
|
2342
|
+
:return: CreateLogtailPipelineConfigResponse
|
|
2343
|
+
|
|
2344
|
+
:raise: LogException
|
|
2345
|
+
"""
|
|
2346
|
+
headers = {}
|
|
2347
|
+
params = {}
|
|
2348
|
+
resource = "/pipelineconfigs"
|
|
2349
|
+
headers['Content-Type'] = 'application/json'
|
|
2350
|
+
body = six.b(json.dumps(config_detail.to_json()))
|
|
2351
|
+
headers['x-log-bodyrawsize'] = str(len(body))
|
|
2352
|
+
(resp, headers) = self._send("POST", project_name, body, resource, params, headers)
|
|
2353
|
+
return CreateLogtailPipelineConfigResponse(headers, resp)
|
|
2354
|
+
|
|
2355
|
+
def update_logtail_pipeline_config(self, project_name, config_detail):
|
|
2356
|
+
""" update logtail pipeline config in a project
|
|
2357
|
+
Unsuccessful operation will cause an LogException.
|
|
2358
|
+
|
|
2359
|
+
:type project_name: string
|
|
2360
|
+
:param project_name: the Project name
|
|
2361
|
+
|
|
2362
|
+
:type config_detail: LogtailPipelineConfigDetail
|
|
2363
|
+
:param config_detail: the logtail pipeline config detail
|
|
2364
|
+
|
|
2365
|
+
:return: UpdateLogtailPipelineConfigResponse
|
|
2366
|
+
|
|
2367
|
+
:raise: LogException
|
|
2368
|
+
"""
|
|
2369
|
+
headers = {}
|
|
2370
|
+
params = {}
|
|
2371
|
+
resource = "/pipelineconfigs/" + config_detail.config_name
|
|
2372
|
+
headers['Content-Type'] = 'application/json'
|
|
2373
|
+
body = six.b(json.dumps(config_detail.to_json()))
|
|
2374
|
+
headers['x-log-bodyrawsize'] = str(len(body))
|
|
2375
|
+
(resp, headers) = self._send("PUT", project_name, body, resource, params, headers)
|
|
2376
|
+
return UpdateLogtailPipelineConfigResponse(headers, resp)
|
|
2377
|
+
|
|
2378
|
+
def delete_logtail_pipeline_config(self, project_name, config_name):
|
|
2379
|
+
""" delete logtail pipeline config in a project
|
|
2380
|
+
Unsuccessful operation will cause an LogException.
|
|
2381
|
+
|
|
2382
|
+
:type project_name: string
|
|
2383
|
+
:param project_name: the Project name
|
|
2384
|
+
|
|
2385
|
+
:type config_name: string
|
|
2386
|
+
:param config_name: the logtail pipeline config name
|
|
2387
|
+
|
|
2388
|
+
:return: DeleteLogtailPipelineConfigResponse
|
|
2389
|
+
|
|
2390
|
+
:raise: LogException
|
|
2391
|
+
"""
|
|
2392
|
+
headers = {}
|
|
2393
|
+
params = {}
|
|
2394
|
+
resource = "/pipelineconfigs/" + config_name
|
|
2395
|
+
(resp, headers) = self._send("DELETE", project_name, None, resource, params, headers)
|
|
2396
|
+
return DeleteLogtailPipelineConfigResponse(headers, resp)
|
|
2397
|
+
|
|
2398
|
+
def get_logtail_pipeline_config(self, project_name, config_name):
|
|
2399
|
+
""" get logtail pipeline config in a project
|
|
2400
|
+
Unsuccessful operation will cause an LogException.
|
|
2401
|
+
|
|
2402
|
+
:type project_name: string
|
|
2403
|
+
:param project_name: the Project name
|
|
2404
|
+
|
|
2405
|
+
:type config_name: string
|
|
2406
|
+
:param config_name: the logtail pipeline config name
|
|
2407
|
+
|
|
2408
|
+
:return: GetLogtailPipelineConfigResponse
|
|
2409
|
+
|
|
2410
|
+
:raise: LogException
|
|
2411
|
+
"""
|
|
2412
|
+
headers = {}
|
|
2413
|
+
params = {}
|
|
2414
|
+
resource = "/pipelineconfigs/" + config_name
|
|
2415
|
+
(resp, headers) = self._send("GET", project_name, None, resource, params, headers)
|
|
2416
|
+
return GetLogtailPipelineConfigResponse(resp, headers)
|
|
2417
|
+
|
|
2418
|
+
def list_logtail_pipeline_config(self, project_name, config_name=None, logstore_name=None, offset=0, size=100):
|
|
2419
|
+
""" list logtail pipeline config names in a project
|
|
2420
|
+
Unsuccessful operation will cause an LogException.
|
|
2421
|
+
|
|
2422
|
+
:type project_name: string
|
|
2423
|
+
:param project_name: the Project name
|
|
2424
|
+
|
|
2425
|
+
:type config_name: string
|
|
2426
|
+
:param config_name: config name to filter
|
|
2427
|
+
|
|
2428
|
+
:type logstore_name: string
|
|
2429
|
+
:param logstore_name: logstore name to filter
|
|
2430
|
+
|
|
2431
|
+
:type offset: int
|
|
2432
|
+
:param offset: the offset of all config names
|
|
2433
|
+
|
|
2434
|
+
:type size: int
|
|
2435
|
+
:param size: the max return names count, -1 means all
|
|
2436
|
+
|
|
2437
|
+
:return: ListLogtailPipelineConfigResponse
|
|
2438
|
+
|
|
2439
|
+
:raise: LogException
|
|
2440
|
+
"""
|
|
2441
|
+
# need to use extended method to get more
|
|
2442
|
+
if int(size) == -1 or int(size) > MAX_LIST_PAGING_SIZE:
|
|
2443
|
+
return list_more(self.list_logtail_pipeline_config, int(offset), int(size), MAX_LIST_PAGING_SIZE,
|
|
2444
|
+
project_name, config_name, logstore_name)
|
|
2445
|
+
|
|
2446
|
+
headers = {}
|
|
2447
|
+
params = {}
|
|
2448
|
+
resource = "/pipelineconfigs"
|
|
2449
|
+
params['offset'] = str(offset)
|
|
2450
|
+
params['size'] = str(size)
|
|
2451
|
+
if config_name:
|
|
2452
|
+
params['configName'] = config_name
|
|
2453
|
+
if logstore_name:
|
|
2454
|
+
params['logstoreName'] = logstore_name
|
|
2455
|
+
(resp, header) = self._send("GET", project_name, None, resource, params, headers)
|
|
2456
|
+
return ListLogtailPipelineConfigResponse(resp, header)
|
|
2457
|
+
|
|
2331
2458
|
def create_machine_group(self, project_name, group_detail):
|
|
2332
2459
|
""" create machine group in a project
|
|
2333
2460
|
Unsuccessful operation will cause an LogException.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
# Copyright (C) Alibaba Cloud Computing
|
|
5
|
+
# All rights reserved.
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
Logtail Pipeline Config Detail Classes
|
|
9
|
+
|
|
10
|
+
This module provides classes for managing Logtail pipeline configurations.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import print_function
|
|
14
|
+
import json
|
|
15
|
+
|
|
16
|
+
__all__ = ['LogtailPipelineConfigDetail']
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class LogtailPipelineConfigDetail(object):
|
|
20
|
+
"""Logtail Pipeline Config Detail
|
|
21
|
+
|
|
22
|
+
:type config_name: string
|
|
23
|
+
:param config_name: config name, can only contain lowercase letters, numbers, - and _,
|
|
24
|
+
must start and end with lowercase letter or number, length between 2-128 characters
|
|
25
|
+
|
|
26
|
+
:type log_sample: string
|
|
27
|
+
:param log_sample: log sample, supports multiple log entries
|
|
28
|
+
|
|
29
|
+
:type global_config: dict
|
|
30
|
+
:param global_config: global configuration
|
|
31
|
+
|
|
32
|
+
:type inputs: list
|
|
33
|
+
:param inputs: input plugin list, currently only allows 1 input plugin
|
|
34
|
+
|
|
35
|
+
:type processors: list
|
|
36
|
+
:param processors: processor plugin list
|
|
37
|
+
|
|
38
|
+
:type aggregators: list
|
|
39
|
+
:param aggregators: aggregator plugin list, maximum 1 aggregator plugin allowed
|
|
40
|
+
|
|
41
|
+
:type flushers: list
|
|
42
|
+
:param flushers: flusher plugin list, currently only allows 1 flusher_sls plugin
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(self, config_name, inputs, flushers, log_sample=None,
|
|
46
|
+
global_config=None, processors=None, aggregators=None):
|
|
47
|
+
"""Initialize a Logtail Pipeline Config Detail
|
|
48
|
+
|
|
49
|
+
:type config_name: string
|
|
50
|
+
:param config_name: config name
|
|
51
|
+
|
|
52
|
+
:type inputs: list
|
|
53
|
+
:param inputs: input plugin list
|
|
54
|
+
|
|
55
|
+
:type flushers: list
|
|
56
|
+
:param flushers: flusher plugin list
|
|
57
|
+
|
|
58
|
+
:type log_sample: string
|
|
59
|
+
:param log_sample: log sample (optional)
|
|
60
|
+
|
|
61
|
+
:type global_config: dict
|
|
62
|
+
:param global_config: global configuration (optional)
|
|
63
|
+
|
|
64
|
+
:type processors: list
|
|
65
|
+
:param processors: processor plugin list (optional)
|
|
66
|
+
|
|
67
|
+
:type aggregators: list
|
|
68
|
+
:param aggregators: aggregator plugin list (optional)
|
|
69
|
+
"""
|
|
70
|
+
self.config_name = config_name
|
|
71
|
+
self.log_sample = log_sample
|
|
72
|
+
self.global_config = global_config if global_config is not None else {}
|
|
73
|
+
self.inputs = inputs if inputs is not None else []
|
|
74
|
+
self.processors = processors if processors is not None else []
|
|
75
|
+
self.aggregators = aggregators if aggregators is not None else []
|
|
76
|
+
self.flushers = flushers if flushers is not None else []
|
|
77
|
+
|
|
78
|
+
def to_json(self):
|
|
79
|
+
"""Convert to JSON object
|
|
80
|
+
|
|
81
|
+
:return: dict object ready for JSON serialization
|
|
82
|
+
"""
|
|
83
|
+
json_value = {
|
|
84
|
+
"configName": self.config_name
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Add optional fields
|
|
88
|
+
if self.log_sample:
|
|
89
|
+
json_value["logSample"] = self.log_sample
|
|
90
|
+
|
|
91
|
+
if self.global_config:
|
|
92
|
+
json_value["global"] = self.global_config
|
|
93
|
+
|
|
94
|
+
# Required fields
|
|
95
|
+
json_value["inputs"] = self.inputs
|
|
96
|
+
json_value["flushers"] = self.flushers
|
|
97
|
+
|
|
98
|
+
# Optional fields
|
|
99
|
+
if self.processors:
|
|
100
|
+
json_value["processors"] = self.processors
|
|
101
|
+
|
|
102
|
+
if self.aggregators:
|
|
103
|
+
json_value["aggregators"] = self.aggregators
|
|
104
|
+
|
|
105
|
+
return json_value
|
|
106
|
+
|
|
107
|
+
@staticmethod
|
|
108
|
+
def from_json(json_value):
|
|
109
|
+
"""Create LogtailPipelineConfigDetail from JSON object
|
|
110
|
+
|
|
111
|
+
:type json_value: dict
|
|
112
|
+
:param json_value: JSON object
|
|
113
|
+
|
|
114
|
+
:return: LogtailPipelineConfigDetail object
|
|
115
|
+
"""
|
|
116
|
+
config_name = json_value.get("configName", "")
|
|
117
|
+
log_sample = json_value.get("logSample", None)
|
|
118
|
+
global_config = json_value.get("global", None)
|
|
119
|
+
inputs = json_value.get("inputs", [])
|
|
120
|
+
processors = json_value.get("processors", None)
|
|
121
|
+
aggregators = json_value.get("aggregators", None)
|
|
122
|
+
flushers = json_value.get("flushers", [])
|
|
123
|
+
|
|
124
|
+
return LogtailPipelineConfigDetail(
|
|
125
|
+
config_name=config_name,
|
|
126
|
+
inputs=inputs,
|
|
127
|
+
flushers=flushers,
|
|
128
|
+
log_sample=log_sample,
|
|
129
|
+
global_config=global_config,
|
|
130
|
+
processors=processors,
|
|
131
|
+
aggregators=aggregators
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|