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.
Files changed (148) hide show
  1. {aliyun_log_python_sdk-0.9.33/aliyun_log_python_sdk.egg-info → aliyun_log_python_sdk-0.9.35}/PKG-INFO +10 -2
  2. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/__init__.py +2 -0
  3. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/__init__.py +1 -1
  4. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/consumer_client.py +2 -0
  5. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/fetched_log_group.py +6 -5
  6. aliyun_log_python_sdk-0.9.35/aliyun/log/consumer/preprocessor.py +6 -0
  7. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/shard_worker.py +20 -13
  8. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/tasks.py +42 -18
  9. {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
  10. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logclient.py +127 -0
  11. aliyun_log_python_sdk-0.9.35/aliyun/log/logtail_pipeline_config_detail.py +135 -0
  12. aliyun_log_python_sdk-0.9.35/aliyun/log/logtail_pipeline_config_response.py +161 -0
  13. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/pulllog_response.py +27 -10
  14. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/version.py +1 -1
  15. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35/aliyun_log_python_sdk.egg-info}/PKG-INFO +10 -2
  16. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun_log_python_sdk.egg-info/SOURCES.txt +4 -0
  17. aliyun_log_python_sdk-0.9.35/tests/test_logtail_pipeline_config.py +389 -0
  18. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/LICENSE +0 -0
  19. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/README.md +0 -0
  20. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/__init__.py +0 -0
  21. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/_proto_py2/__init__.py +0 -0
  22. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/_proto_py2/log_logs_pb2.py +0 -0
  23. {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
  24. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/acl_config.py +0 -0
  25. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/acl_response.py +0 -0
  26. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/async_sql_pb2.py +0 -0
  27. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/async_sql_response.py +0 -0
  28. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/auth.py +0 -0
  29. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/common_response.py +0 -0
  30. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/compress.py +0 -0
  31. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/checkpoint_tracker.py +0 -0
  32. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/config.py +0 -0
  33. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/exceptions.py +0 -0
  34. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/heart_beat.py +0 -0
  35. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer/worker.py +0 -0
  36. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer_group_request.py +0 -0
  37. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/consumer_group_response.py +0 -0
  38. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/credentials.py +0 -0
  39. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/cursor_response.py +0 -0
  40. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/cursor_time_response.py +0 -0
  41. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/delete_async_sql_request.py +0 -0
  42. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/deletelogsrequest.py +0 -0
  43. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/deletelogssresponse.py +0 -0
  44. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/__init__.py +0 -0
  45. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/doc_logitem_converter.py +0 -0
  46. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/index_logstore_mappings.py +0 -0
  47. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/mapping_index_converter.py +0 -0
  48. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_log.py +0 -0
  49. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_manager.py +0 -0
  50. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_response.py +0 -0
  51. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/migration_task.py +0 -0
  52. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/es_migration/util.py +0 -0
  53. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_config_response.py +0 -0
  54. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/__init__.py +0 -0
  55. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/config_parser.py +0 -0
  56. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/etl_util.py +0 -0
  57. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/exceptions.py +0 -0
  58. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/restrict_config_parser.py +0 -0
  59. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/runner.py +0 -0
  60. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/settings.py +0 -0
  61. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/trans_comp/__init__.py +0 -0
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/__init__.py +0 -0
  70. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/condition_list.py +0 -0
  71. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/condition_transform.py +0 -0
  72. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/condition_util.py +0 -0
  73. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/transform_base.py +0 -0
  74. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/transform_list.py +0 -0
  75. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/etl_core/transform/transform_meta.py +0 -0
  76. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/export_response.py +0 -0
  77. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ext/__init__.py +0 -0
  78. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ext/jupyter_magic.py +0 -0
  79. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ext/syslogclient.py +0 -0
  80. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/external_store_config.py +0 -0
  81. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/external_store_config_response.py +0 -0
  82. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/get_async_sql_request.py +0 -0
  83. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getcontextlogsresponse.py +0 -0
  84. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getdeletelogsstatusrequest.py +0 -0
  85. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getdeletelogsstatusresponse.py +0 -0
  86. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/gethistogramsrequest.py +0 -0
  87. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/gethistogramsresponse.py +0 -0
  88. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getlogsrequest.py +0 -0
  89. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/getlogsresponse.py +0 -0
  90. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/histogram.py +0 -0
  91. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/index_config.py +0 -0
  92. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/index_config_response.py +0 -0
  93. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/ingestion_response.py +0 -0
  94. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/job.py +0 -0
  95. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listdeletelogsstasksrequest.py +0 -0
  96. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listdeletelogsstasksresponse.py +0 -0
  97. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listlogstoresrequest.py +0 -0
  98. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listlogstoresresponse.py +0 -0
  99. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listtopicsrequest.py +0 -0
  100. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/listtopicsresponse.py +0 -0
  101. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/log_logs_pb2.py +0 -0
  102. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/log_logs_raw_pb2.py +0 -0
  103. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logclient_core.py +0 -0
  104. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logclient_operator.py +0 -0
  105. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logexception.py +0 -0
  106. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logger_hanlder.py +0 -0
  107. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logitem.py +0 -0
  108. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logrequest.py +0 -0
  109. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logresponse.py +0 -0
  110. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logstore_config_response.py +0 -0
  111. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logtail_config_detail.py +0 -0
  112. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/logtail_config_response.py +0 -0
  113. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/machine_group_detail.py +0 -0
  114. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/machinegroup_response.py +0 -0
  115. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/metering_mode_response.py +0 -0
  116. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/odps_sink.py +0 -0
  117. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/oss_sink.py +0 -0
  118. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/pluralize.py +0 -0
  119. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/project_response.py +0 -0
  120. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/proto.py +0 -0
  121. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/putlogsrequest.py +0 -0
  122. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/putlogsresponse.py +0 -0
  123. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/queriedlog.py +0 -0
  124. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/rebuild_index_response.py +0 -0
  125. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/resource_params.py +0 -0
  126. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/resource_response.py +0 -0
  127. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/scheduled_sql.py +0 -0
  128. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/scheduled_sql_response.py +0 -0
  129. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/shard_response.py +0 -0
  130. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/shipper_config.py +0 -0
  131. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/shipper_response.py +0 -0
  132. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/sink.py +0 -0
  133. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/sql_instance_response.py +0 -0
  134. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/store_view.py +0 -0
  135. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/store_view_response.py +0 -0
  136. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/submit_async_sql_request.py +0 -0
  137. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/substore_config_response.py +0 -0
  138. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/tag_response.py +0 -0
  139. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/topostore_params.py +0 -0
  140. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/topostore_response.py +0 -0
  141. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun/log/util.py +0 -0
  142. {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
  143. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/aliyun_log_python_sdk.egg-info/requires.txt +0 -0
  144. {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
  145. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/setup.cfg +0 -0
  146. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/setup.py +0 -0
  147. {aliyun_log_python_sdk-0.9.33 → aliyun_log_python_sdk-0.9.35}/tests/test_alert.py +0 -0
  148. {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
1
+ Metadata-Version: 2.4
2
2
  Name: aliyun-log-python-sdk
3
- Version: 0.9.33
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
@@ -1,4 +1,4 @@
1
1
 
2
- from .tasks import ConsumerProcessorBase, ConsumerProcessorAdaptor
2
+ from .tasks import ConsumerProcessorBase, ConsumerProcessorAdaptor, ConsumerJsonProcessorBase
3
3
  from .config import LogHubConfig, CursorPosition
4
4
  from .worker import ConsumerWorker
@@ -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, log_group_list, end_cursor):
6
+ def __init__(self, shard_id, data, end_cursor, log_group_count):
7
7
  self._shard_id = shard_id
8
- self._fetched_log_group_list = log_group_list
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 fetched_log_group_list(self):
17
- return self._fetched_log_group_list
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 len(self._fetched_log_group_list.LogGroups)
26
+ return self._log_group_count
@@ -0,0 +1,6 @@
1
+ def to_log_group_list_pb(pull_log_response):
2
+ return pull_log_response.get_loggroup_list()
3
+
4
+
5
+ def to_flattern_json_list(pull_log_response):
6
+ return pull_log_response.get_flatten_logs_json()
@@ -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, task_result.get_fetched_log_group_list(),
102
- task_result.get_cursor())
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 = self.last_fetch_log_group.log_group_size
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
- self.executor.submit(consumer_fetch_task,
141
- self.log_client, self.shard_id, self.next_fetch_cursor,
142
- max_fetch_log_group_size=self.max_fetch_log_group_size,
143
- end_cursor=self.fetch_end_cursor, query=self.query,
144
- consume_processor=self.consume_processor)
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
- # must deep copy cause some revision will happen
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
- last_fetch_log_group.fetched_log_group_list,
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, fetched_log_group_list, cursor, raw_size , raw_size_before_query, raw_log_group_count_before_query):
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.fetched_log_group_list = fetched_log_group_list
118
- self.cursor = cursor
119
- self.raw_size = raw_size
120
- self.raw_size_before_query = raw_size_before_query
121
- self.raw_log_group_count_before_query = raw_log_group_count_before_query
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 get_fetched_log_group_list(self):
124
- return self.fetched_log_group_list
142
+ def get_data(self):
143
+ return self._data
125
144
 
126
145
  def get_cursor(self):
127
- return self.cursor
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.raw_size
152
+ return self._raw_size
131
153
 
132
154
  def get_raw_size_before_query(self):
133
- return self.raw_size_before_query
155
+ return self._raw_size_before_query
134
156
 
135
157
  def get_raw_log_group_count_before_query(self):
136
- return self.raw_log_group_count_before_query
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
- def consumer_fetch_task(loghub_client_adapter, shard_id, cursor, max_fetch_log_group_size=1000, end_cursor=None, query=None, consume_processor=None):
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
- fetch_log_group_list = response.get_loggroup_list()
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
- response.get_log_count())
230
+ log_group_count)
207
231
  if not next_cursor:
208
- return FetchTaskResult(fetch_log_group_list, cursor, raw_size, raw_size_before_query, raw_log_group_count_before_query)
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(fetch_log_group_list, next_cursor, raw_size, raw_size_before_query, raw_log_group_count_before_query)
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
- p1 = u'(?!{0})([\u4e00-\u9fa5\u0800-\u4e00\\w\\.\\-]+)\\s*{0}\\s*([\u4e00-\u9fa5\u0800-\u4e00\\w\\.\\-]+)'
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 = u'(?!{0})([\u4e00-\u9fa5\u0800-\u4e00\\w\\.\\-]+)\\s*{0}\\s*{1}\s*([^{1}]*?)\s*{1}'
39
+ p2 = r'(?!{0})([' + '\u4e00-\u9fa5\u0800-\u4e00' + r'\w\.\-]+)\s*{0}\s*{1}\s*([^{1}]*?)\s*{1}'
38
40
  else:
39
- p2 = u'(?!{0})([\u4e00-\u9fa5\u0800-\u4e00\\w\\.\\-]+)\\s*{0}\\s*{1}\s*((?:[^{1}]|\\\\{1})*?[^\\\\]){1}'
40
- ps = u'|'.join([p1, p2]).format(sep, quote)
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
+