cribl-control-plane 0.0.13__py3-none-any.whl

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.

Potentially problematic release.


This version of cribl-control-plane might be problematic. Click here for more details.

Files changed (197) hide show
  1. cribl_control_plane/__init__.py +17 -0
  2. cribl_control_plane/_hooks/__init__.py +5 -0
  3. cribl_control_plane/_hooks/clientcredentials.py +211 -0
  4. cribl_control_plane/_hooks/registration.py +13 -0
  5. cribl_control_plane/_hooks/sdkhooks.py +81 -0
  6. cribl_control_plane/_hooks/types.py +112 -0
  7. cribl_control_plane/_version.py +15 -0
  8. cribl_control_plane/auth_sdk.py +184 -0
  9. cribl_control_plane/basesdk.py +358 -0
  10. cribl_control_plane/errors/__init__.py +60 -0
  11. cribl_control_plane/errors/apierror.py +38 -0
  12. cribl_control_plane/errors/criblcontrolplaneerror.py +26 -0
  13. cribl_control_plane/errors/error.py +24 -0
  14. cribl_control_plane/errors/healthstatus_error.py +38 -0
  15. cribl_control_plane/errors/no_response_error.py +13 -0
  16. cribl_control_plane/errors/responsevalidationerror.py +25 -0
  17. cribl_control_plane/health.py +166 -0
  18. cribl_control_plane/httpclient.py +126 -0
  19. cribl_control_plane/models/__init__.py +7305 -0
  20. cribl_control_plane/models/addhectokenrequest.py +34 -0
  21. cribl_control_plane/models/authtoken.py +13 -0
  22. cribl_control_plane/models/createinputhectokenbyidop.py +45 -0
  23. cribl_control_plane/models/createinputop.py +24 -0
  24. cribl_control_plane/models/createoutputop.py +24 -0
  25. cribl_control_plane/models/createoutputtestbyidop.py +46 -0
  26. cribl_control_plane/models/criblevent.py +14 -0
  27. cribl_control_plane/models/deleteinputbyidop.py +37 -0
  28. cribl_control_plane/models/deleteoutputbyidop.py +37 -0
  29. cribl_control_plane/models/deleteoutputpqbyidop.py +36 -0
  30. cribl_control_plane/models/getinputbyidop.py +37 -0
  31. cribl_control_plane/models/getoutputbyidop.py +37 -0
  32. cribl_control_plane/models/getoutputpqbyidop.py +36 -0
  33. cribl_control_plane/models/getoutputsamplesbyidop.py +37 -0
  34. cribl_control_plane/models/healthstatus.py +36 -0
  35. cribl_control_plane/models/input.py +199 -0
  36. cribl_control_plane/models/inputappscope.py +448 -0
  37. cribl_control_plane/models/inputazureblob.py +308 -0
  38. cribl_control_plane/models/inputcollection.py +208 -0
  39. cribl_control_plane/models/inputconfluentcloud.py +585 -0
  40. cribl_control_plane/models/inputcribl.py +165 -0
  41. cribl_control_plane/models/inputcriblhttp.py +341 -0
  42. cribl_control_plane/models/inputcribllakehttp.py +342 -0
  43. cribl_control_plane/models/inputcriblmetrics.py +175 -0
  44. cribl_control_plane/models/inputcribltcp.py +299 -0
  45. cribl_control_plane/models/inputcrowdstrike.py +410 -0
  46. cribl_control_plane/models/inputdatadogagent.py +364 -0
  47. cribl_control_plane/models/inputdatagen.py +180 -0
  48. cribl_control_plane/models/inputedgeprometheus.py +551 -0
  49. cribl_control_plane/models/inputelastic.py +494 -0
  50. cribl_control_plane/models/inputeventhub.py +360 -0
  51. cribl_control_plane/models/inputexec.py +213 -0
  52. cribl_control_plane/models/inputfile.py +259 -0
  53. cribl_control_plane/models/inputfirehose.py +341 -0
  54. cribl_control_plane/models/inputgooglepubsub.py +247 -0
  55. cribl_control_plane/models/inputgrafana_union.py +1247 -0
  56. cribl_control_plane/models/inputhttp.py +403 -0
  57. cribl_control_plane/models/inputhttpraw.py +407 -0
  58. cribl_control_plane/models/inputjournalfiles.py +208 -0
  59. cribl_control_plane/models/inputkafka.py +581 -0
  60. cribl_control_plane/models/inputkinesis.py +363 -0
  61. cribl_control_plane/models/inputkubeevents.py +182 -0
  62. cribl_control_plane/models/inputkubelogs.py +256 -0
  63. cribl_control_plane/models/inputkubemetrics.py +233 -0
  64. cribl_control_plane/models/inputloki.py +468 -0
  65. cribl_control_plane/models/inputmetrics.py +290 -0
  66. cribl_control_plane/models/inputmodeldriventelemetry.py +274 -0
  67. cribl_control_plane/models/inputmsk.py +654 -0
  68. cribl_control_plane/models/inputnetflow.py +224 -0
  69. cribl_control_plane/models/inputoffice365mgmt.py +384 -0
  70. cribl_control_plane/models/inputoffice365msgtrace.py +449 -0
  71. cribl_control_plane/models/inputoffice365service.py +377 -0
  72. cribl_control_plane/models/inputopentelemetry.py +516 -0
  73. cribl_control_plane/models/inputprometheus.py +464 -0
  74. cribl_control_plane/models/inputprometheusrw.py +470 -0
  75. cribl_control_plane/models/inputrawudp.py +207 -0
  76. cribl_control_plane/models/inputs3.py +416 -0
  77. cribl_control_plane/models/inputs3inventory.py +440 -0
  78. cribl_control_plane/models/inputsecuritylake.py +425 -0
  79. cribl_control_plane/models/inputsnmp.py +274 -0
  80. cribl_control_plane/models/inputsplunk.py +387 -0
  81. cribl_control_plane/models/inputsplunkhec.py +478 -0
  82. cribl_control_plane/models/inputsplunksearch.py +537 -0
  83. cribl_control_plane/models/inputsqs.py +320 -0
  84. cribl_control_plane/models/inputsyslog_union.py +759 -0
  85. cribl_control_plane/models/inputsystemmetrics.py +533 -0
  86. cribl_control_plane/models/inputsystemstate.py +417 -0
  87. cribl_control_plane/models/inputtcp.py +359 -0
  88. cribl_control_plane/models/inputtcpjson.py +334 -0
  89. cribl_control_plane/models/inputwef.py +498 -0
  90. cribl_control_plane/models/inputwindowsmetrics.py +457 -0
  91. cribl_control_plane/models/inputwineventlogs.py +222 -0
  92. cribl_control_plane/models/inputwiz.py +334 -0
  93. cribl_control_plane/models/inputzscalerhec.py +439 -0
  94. cribl_control_plane/models/listinputop.py +24 -0
  95. cribl_control_plane/models/listoutputop.py +24 -0
  96. cribl_control_plane/models/logininfo.py +16 -0
  97. cribl_control_plane/models/output.py +229 -0
  98. cribl_control_plane/models/outputazureblob.py +471 -0
  99. cribl_control_plane/models/outputazuredataexplorer.py +660 -0
  100. cribl_control_plane/models/outputazureeventhub.py +321 -0
  101. cribl_control_plane/models/outputazurelogs.py +386 -0
  102. cribl_control_plane/models/outputclickhouse.py +650 -0
  103. cribl_control_plane/models/outputcloudwatch.py +273 -0
  104. cribl_control_plane/models/outputconfluentcloud.py +591 -0
  105. cribl_control_plane/models/outputcriblhttp.py +494 -0
  106. cribl_control_plane/models/outputcribllake.py +396 -0
  107. cribl_control_plane/models/outputcribltcp.py +387 -0
  108. cribl_control_plane/models/outputcrowdstrikenextgensiem.py +410 -0
  109. cribl_control_plane/models/outputdatadog.py +472 -0
  110. cribl_control_plane/models/outputdataset.py +437 -0
  111. cribl_control_plane/models/outputdefault.py +55 -0
  112. cribl_control_plane/models/outputdevnull.py +50 -0
  113. cribl_control_plane/models/outputdiskspool.py +89 -0
  114. cribl_control_plane/models/outputdls3.py +560 -0
  115. cribl_control_plane/models/outputdynatracehttp.py +454 -0
  116. cribl_control_plane/models/outputdynatraceotlp.py +486 -0
  117. cribl_control_plane/models/outputelastic.py +494 -0
  118. cribl_control_plane/models/outputelasticcloud.py +407 -0
  119. cribl_control_plane/models/outputexabeam.py +297 -0
  120. cribl_control_plane/models/outputfilesystem.py +357 -0
  121. cribl_control_plane/models/outputgooglechronicle.py +486 -0
  122. cribl_control_plane/models/outputgooglecloudlogging.py +557 -0
  123. cribl_control_plane/models/outputgooglecloudstorage.py +499 -0
  124. cribl_control_plane/models/outputgooglepubsub.py +274 -0
  125. cribl_control_plane/models/outputgrafanacloud_union.py +1024 -0
  126. cribl_control_plane/models/outputgraphite.py +225 -0
  127. cribl_control_plane/models/outputhoneycomb.py +369 -0
  128. cribl_control_plane/models/outputhumiohec.py +389 -0
  129. cribl_control_plane/models/outputinfluxdb.py +523 -0
  130. cribl_control_plane/models/outputkafka.py +581 -0
  131. cribl_control_plane/models/outputkinesis.py +312 -0
  132. cribl_control_plane/models/outputloki.py +425 -0
  133. cribl_control_plane/models/outputminio.py +512 -0
  134. cribl_control_plane/models/outputmsk.py +654 -0
  135. cribl_control_plane/models/outputnetflow.py +80 -0
  136. cribl_control_plane/models/outputnewrelic.py +424 -0
  137. cribl_control_plane/models/outputnewrelicevents.py +401 -0
  138. cribl_control_plane/models/outputopentelemetry.py +669 -0
  139. cribl_control_plane/models/outputprometheus.py +485 -0
  140. cribl_control_plane/models/outputring.py +121 -0
  141. cribl_control_plane/models/outputrouter.py +83 -0
  142. cribl_control_plane/models/outputs3.py +556 -0
  143. cribl_control_plane/models/outputsamplesresponse.py +14 -0
  144. cribl_control_plane/models/outputsecuritylake.py +505 -0
  145. cribl_control_plane/models/outputsentinel.py +488 -0
  146. cribl_control_plane/models/outputsentineloneaisiem.py +505 -0
  147. cribl_control_plane/models/outputservicenow.py +543 -0
  148. cribl_control_plane/models/outputsignalfx.py +369 -0
  149. cribl_control_plane/models/outputsnmp.py +80 -0
  150. cribl_control_plane/models/outputsns.py +274 -0
  151. cribl_control_plane/models/outputsplunk.py +383 -0
  152. cribl_control_plane/models/outputsplunkhec.py +434 -0
  153. cribl_control_plane/models/outputsplunklb.py +558 -0
  154. cribl_control_plane/models/outputsqs.py +328 -0
  155. cribl_control_plane/models/outputstatsd.py +224 -0
  156. cribl_control_plane/models/outputstatsdext.py +225 -0
  157. cribl_control_plane/models/outputsumologic.py +378 -0
  158. cribl_control_plane/models/outputsyslog.py +415 -0
  159. cribl_control_plane/models/outputtcpjson.py +413 -0
  160. cribl_control_plane/models/outputtestrequest.py +15 -0
  161. cribl_control_plane/models/outputtestresponse.py +29 -0
  162. cribl_control_plane/models/outputwavefront.py +369 -0
  163. cribl_control_plane/models/outputwebhook.py +689 -0
  164. cribl_control_plane/models/outputxsiam.py +415 -0
  165. cribl_control_plane/models/schemeclientoauth.py +24 -0
  166. cribl_control_plane/models/security.py +36 -0
  167. cribl_control_plane/models/updatehectokenrequest.py +31 -0
  168. cribl_control_plane/models/updateinputbyidop.py +44 -0
  169. cribl_control_plane/models/updateinputhectokenbyidandtokenop.py +52 -0
  170. cribl_control_plane/models/updateoutputbyidop.py +44 -0
  171. cribl_control_plane/outputs.py +1615 -0
  172. cribl_control_plane/py.typed +1 -0
  173. cribl_control_plane/sdk.py +164 -0
  174. cribl_control_plane/sdkconfiguration.py +36 -0
  175. cribl_control_plane/sources.py +1355 -0
  176. cribl_control_plane/types/__init__.py +21 -0
  177. cribl_control_plane/types/basemodel.py +39 -0
  178. cribl_control_plane/utils/__init__.py +187 -0
  179. cribl_control_plane/utils/annotations.py +55 -0
  180. cribl_control_plane/utils/datetimes.py +23 -0
  181. cribl_control_plane/utils/enums.py +74 -0
  182. cribl_control_plane/utils/eventstreaming.py +238 -0
  183. cribl_control_plane/utils/forms.py +223 -0
  184. cribl_control_plane/utils/headers.py +136 -0
  185. cribl_control_plane/utils/logger.py +27 -0
  186. cribl_control_plane/utils/metadata.py +118 -0
  187. cribl_control_plane/utils/queryparams.py +205 -0
  188. cribl_control_plane/utils/requestbodies.py +66 -0
  189. cribl_control_plane/utils/retries.py +217 -0
  190. cribl_control_plane/utils/security.py +207 -0
  191. cribl_control_plane/utils/serializers.py +249 -0
  192. cribl_control_plane/utils/unmarshal_json_response.py +24 -0
  193. cribl_control_plane/utils/url.py +155 -0
  194. cribl_control_plane/utils/values.py +137 -0
  195. cribl_control_plane-0.0.13.dist-info/METADATA +489 -0
  196. cribl_control_plane-0.0.13.dist-info/RECORD +197 -0
  197. cribl_control_plane-0.0.13.dist-info/WHEEL +4 -0
@@ -0,0 +1,471 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from cribl_control_plane import utils
5
+ from cribl_control_plane.types import BaseModel
6
+ from cribl_control_plane.utils import validate_open_enum
7
+ from enum import Enum
8
+ import pydantic
9
+ from pydantic.functional_validators import PlainValidator
10
+ from typing import List, Optional
11
+ from typing_extensions import Annotated, NotRequired, TypedDict
12
+
13
+
14
+ class OutputAzureBlobType(str, Enum, metaclass=utils.OpenEnumMeta):
15
+ AZURE_BLOB = "azure_blob"
16
+
17
+
18
+ class OutputAzureBlobDataFormat(str, Enum, metaclass=utils.OpenEnumMeta):
19
+ r"""Format of the output data"""
20
+
21
+ JSON = "json"
22
+ RAW = "raw"
23
+ PARQUET = "parquet"
24
+
25
+
26
+ class OutputAzureBlobBackpressureBehavior(str, Enum, metaclass=utils.OpenEnumMeta):
27
+ r"""How to handle events when all receivers are exerting backpressure"""
28
+
29
+ BLOCK = "block"
30
+ DROP = "drop"
31
+
32
+
33
+ class OutputAzureBlobDiskSpaceProtection(str, Enum, metaclass=utils.OpenEnumMeta):
34
+ r"""How to handle events when disk space is below the global 'Min free disk space' limit"""
35
+
36
+ BLOCK = "block"
37
+ DROP = "drop"
38
+
39
+
40
+ class OutputAzureBlobAuthenticationMethod(str, Enum, metaclass=utils.OpenEnumMeta):
41
+ MANUAL = "manual"
42
+ SECRET = "secret"
43
+ CLIENT_SECRET = "clientSecret"
44
+ CLIENT_CERT = "clientCert"
45
+
46
+
47
+ class BlobAccessTier(str, Enum, metaclass=utils.OpenEnumMeta):
48
+ INFERRED = "Inferred"
49
+ HOT = "Hot"
50
+ COOL = "Cool"
51
+ COLD = "Cold"
52
+ ARCHIVE = "Archive"
53
+
54
+
55
+ class OutputAzureBlobCompression(str, Enum, metaclass=utils.OpenEnumMeta):
56
+ r"""Data compression format to apply to HTTP content before it is delivered"""
57
+
58
+ NONE = "none"
59
+ GZIP = "gzip"
60
+
61
+
62
+ class OutputAzureBlobCompressionLevel(str, Enum, metaclass=utils.OpenEnumMeta):
63
+ r"""Compression level to apply before moving files to final destination"""
64
+
65
+ BEST_SPEED = "best_speed"
66
+ NORMAL = "normal"
67
+ BEST_COMPRESSION = "best_compression"
68
+
69
+
70
+ class OutputAzureBlobParquetVersion(str, Enum, metaclass=utils.OpenEnumMeta):
71
+ r"""Determines which data types are supported and how they are represented"""
72
+
73
+ PARQUET_1_0 = "PARQUET_1_0"
74
+ PARQUET_2_4 = "PARQUET_2_4"
75
+ PARQUET_2_6 = "PARQUET_2_6"
76
+
77
+
78
+ class OutputAzureBlobDataPageVersion(str, Enum, metaclass=utils.OpenEnumMeta):
79
+ r"""Serialization format of data pages. Note that some reader implementations use Data page V2's attributes to work more efficiently, while others ignore it."""
80
+
81
+ DATA_PAGE_V1 = "DATA_PAGE_V1"
82
+ DATA_PAGE_V2 = "DATA_PAGE_V2"
83
+
84
+
85
+ class OutputAzureBlobKeyValueMetadatumTypedDict(TypedDict):
86
+ value: str
87
+ key: NotRequired[str]
88
+
89
+
90
+ class OutputAzureBlobKeyValueMetadatum(BaseModel):
91
+ value: str
92
+
93
+ key: Optional[str] = ""
94
+
95
+
96
+ class OutputAzureBlobCertificateTypedDict(TypedDict):
97
+ certificate_name: str
98
+ r"""The certificate you registered as credentials for your app in the Azure portal"""
99
+
100
+
101
+ class OutputAzureBlobCertificate(BaseModel):
102
+ certificate_name: Annotated[str, pydantic.Field(alias="certificateName")]
103
+ r"""The certificate you registered as credentials for your app in the Azure portal"""
104
+
105
+
106
+ class OutputAzureBlobTypedDict(TypedDict):
107
+ container_name: str
108
+ r"""The Azure Blob Storage container name. Name can include only lowercase letters, numbers, and hyphens. For dynamic container names, enter a JavaScript expression within quotes or backticks, to be evaluated at initialization. The expression can evaluate to a constant value and can reference Global Variables, such as `myContainer-${C.env[\"CRIBL_WORKER_ID\"]}`."""
109
+ id: NotRequired[str]
110
+ r"""Unique ID for this output"""
111
+ type: NotRequired[OutputAzureBlobType]
112
+ pipeline: NotRequired[str]
113
+ r"""Pipeline to process data before sending out to this output"""
114
+ system_fields: NotRequired[List[str]]
115
+ r"""Fields to automatically add to events, such as cribl_pipe. Supports wildcards."""
116
+ environment: NotRequired[str]
117
+ r"""Optionally, enable this config only on a specified Git branch. If empty, will be enabled everywhere."""
118
+ streamtags: NotRequired[List[str]]
119
+ r"""Tags for filtering and grouping in @{product}"""
120
+ create_container: NotRequired[bool]
121
+ r"""Create the configured container in Azure Blob Storage if it does not already exist"""
122
+ dest_path: NotRequired[str]
123
+ r"""Root directory prepended to path before uploading. Value can be a JavaScript expression enclosed in quotes or backticks, to be evaluated at initialization. The expression can evaluate to a constant value and can reference Global Variables, such as `myBlobPrefix-${C.env[\"CRIBL_WORKER_ID\"]}`."""
124
+ stage_path: NotRequired[str]
125
+ r"""Filesystem location in which to buffer files before compressing and moving to final destination. Use performant and stable storage."""
126
+ add_id_to_stage_path: NotRequired[bool]
127
+ r"""Add the Output ID value to staging location"""
128
+ max_concurrent_file_parts: NotRequired[float]
129
+ r"""Maximum number of parts to upload in parallel per file"""
130
+ remove_empty_dirs: NotRequired[bool]
131
+ r"""Remove empty staging directories after moving files"""
132
+ partition_expr: NotRequired[str]
133
+ r"""JavaScript expression defining how files are partitioned and organized. Default is date-based. If blank, Stream will fall back to the event's __partition field value – if present – otherwise to each location's root directory."""
134
+ format_: NotRequired[OutputAzureBlobDataFormat]
135
+ r"""Format of the output data"""
136
+ base_file_name: NotRequired[str]
137
+ r"""JavaScript expression to define the output filename prefix (can be constant)"""
138
+ file_name_suffix: NotRequired[str]
139
+ r"""JavaScript expression to define the output filename suffix (can be constant). The `__format` variable refers to the value of the `Data format` field (`json` or `raw`). The `__compression` field refers to the kind of compression being used (`none` or `gzip`)."""
140
+ max_file_size_mb: NotRequired[float]
141
+ r"""Maximum uncompressed output file size. Files of this size will be closed and moved to final output location."""
142
+ max_file_open_time_sec: NotRequired[float]
143
+ r"""Maximum amount of time to write to a file. Files open for longer than this will be closed and moved to final output location."""
144
+ max_file_idle_time_sec: NotRequired[float]
145
+ r"""Maximum amount of time to keep inactive files open. Files open for longer than this will be closed and moved to final output location."""
146
+ max_open_files: NotRequired[float]
147
+ r"""Maximum number of files to keep open concurrently. When exceeded, @{product} will close the oldest open files and move them to the final output location."""
148
+ header_line: NotRequired[str]
149
+ r"""If set, this line will be written to the beginning of each output file"""
150
+ write_high_water_mark: NotRequired[float]
151
+ r"""Buffer size used to write to a file"""
152
+ on_backpressure: NotRequired[OutputAzureBlobBackpressureBehavior]
153
+ r"""How to handle events when all receivers are exerting backpressure"""
154
+ deadletter_enabled: NotRequired[bool]
155
+ r"""If a file fails to move to its final destination after the maximum number of retries, move it to a designated directory to prevent further errors"""
156
+ on_disk_full_backpressure: NotRequired[OutputAzureBlobDiskSpaceProtection]
157
+ r"""How to handle events when disk space is below the global 'Min free disk space' limit"""
158
+ auth_type: NotRequired[OutputAzureBlobAuthenticationMethod]
159
+ storage_class: NotRequired[BlobAccessTier]
160
+ description: NotRequired[str]
161
+ compress: NotRequired[OutputAzureBlobCompression]
162
+ r"""Data compression format to apply to HTTP content before it is delivered"""
163
+ compression_level: NotRequired[OutputAzureBlobCompressionLevel]
164
+ r"""Compression level to apply before moving files to final destination"""
165
+ automatic_schema: NotRequired[bool]
166
+ r"""Automatically calculate the schema based on the events of each Parquet file generated"""
167
+ parquet_version: NotRequired[OutputAzureBlobParquetVersion]
168
+ r"""Determines which data types are supported and how they are represented"""
169
+ parquet_data_page_version: NotRequired[OutputAzureBlobDataPageVersion]
170
+ r"""Serialization format of data pages. Note that some reader implementations use Data page V2's attributes to work more efficiently, while others ignore it."""
171
+ parquet_row_group_length: NotRequired[float]
172
+ r"""The number of rows that every group will contain. The final group can contain a smaller number of rows."""
173
+ parquet_page_size: NotRequired[str]
174
+ r"""Target memory size for page segments, such as 1MB or 128MB. Generally, lower values improve reading speed, while higher values improve compression."""
175
+ should_log_invalid_rows: NotRequired[bool]
176
+ r"""Log up to 3 rows that @{product} skips due to data mismatch"""
177
+ key_value_metadata: NotRequired[List[OutputAzureBlobKeyValueMetadatumTypedDict]]
178
+ r"""The metadata of files the Destination writes will include the properties you add here as key-value pairs. Useful for tagging. Examples: \"key\":\"OCSF Event Class\", \"value\":\"9001\" """
179
+ enable_statistics: NotRequired[bool]
180
+ r"""Statistics profile an entire file in terms of minimum/maximum values within data, numbers of nulls, etc. You can use Parquet tools to view statistics."""
181
+ enable_write_page_index: NotRequired[bool]
182
+ r"""One page index contains statistics for one data page. Parquet readers use statistics to enable page skipping."""
183
+ enable_page_checksum: NotRequired[bool]
184
+ r"""Parquet tools can use the checksum of a Parquet page to verify data integrity"""
185
+ empty_dir_cleanup_sec: NotRequired[float]
186
+ r"""How frequently, in seconds, to clean up empty directories"""
187
+ deadletter_path: NotRequired[str]
188
+ r"""Storage location for files that fail to reach their final destination after maximum retries are exceeded"""
189
+ max_retry_num: NotRequired[float]
190
+ r"""The maximum number of times a file will attempt to move to its final destination before being dead-lettered"""
191
+ connection_string: NotRequired[str]
192
+ r"""Enter your Azure Storage account connection string. If left blank, Stream will fall back to env.AZURE_STORAGE_CONNECTION_STRING."""
193
+ text_secret: NotRequired[str]
194
+ r"""Select or create a stored text secret"""
195
+ storage_account_name: NotRequired[str]
196
+ r"""The name of your Azure storage account"""
197
+ tenant_id: NotRequired[str]
198
+ r"""The service principal's tenant ID"""
199
+ client_id: NotRequired[str]
200
+ r"""The service principal's client ID"""
201
+ azure_cloud: NotRequired[str]
202
+ r"""The Azure cloud to use. Defaults to Azure Public Cloud."""
203
+ endpoint_suffix: NotRequired[str]
204
+ r"""Endpoint suffix for the service URL. Takes precedence over the Azure Cloud setting. Defaults to core.windows.net."""
205
+ client_text_secret: NotRequired[str]
206
+ r"""Select or create a stored text secret"""
207
+ certificate: NotRequired[OutputAzureBlobCertificateTypedDict]
208
+
209
+
210
+ class OutputAzureBlob(BaseModel):
211
+ container_name: Annotated[str, pydantic.Field(alias="containerName")]
212
+ r"""The Azure Blob Storage container name. Name can include only lowercase letters, numbers, and hyphens. For dynamic container names, enter a JavaScript expression within quotes or backticks, to be evaluated at initialization. The expression can evaluate to a constant value and can reference Global Variables, such as `myContainer-${C.env[\"CRIBL_WORKER_ID\"]}`."""
213
+
214
+ id: Optional[str] = None
215
+ r"""Unique ID for this output"""
216
+
217
+ type: Annotated[
218
+ Optional[OutputAzureBlobType], PlainValidator(validate_open_enum(False))
219
+ ] = None
220
+
221
+ pipeline: Optional[str] = None
222
+ r"""Pipeline to process data before sending out to this output"""
223
+
224
+ system_fields: Annotated[
225
+ Optional[List[str]], pydantic.Field(alias="systemFields")
226
+ ] = None
227
+ r"""Fields to automatically add to events, such as cribl_pipe. Supports wildcards."""
228
+
229
+ environment: Optional[str] = None
230
+ r"""Optionally, enable this config only on a specified Git branch. If empty, will be enabled everywhere."""
231
+
232
+ streamtags: Optional[List[str]] = None
233
+ r"""Tags for filtering and grouping in @{product}"""
234
+
235
+ create_container: Annotated[
236
+ Optional[bool], pydantic.Field(alias="createContainer")
237
+ ] = False
238
+ r"""Create the configured container in Azure Blob Storage if it does not already exist"""
239
+
240
+ dest_path: Annotated[Optional[str], pydantic.Field(alias="destPath")] = None
241
+ r"""Root directory prepended to path before uploading. Value can be a JavaScript expression enclosed in quotes or backticks, to be evaluated at initialization. The expression can evaluate to a constant value and can reference Global Variables, such as `myBlobPrefix-${C.env[\"CRIBL_WORKER_ID\"]}`."""
242
+
243
+ stage_path: Annotated[Optional[str], pydantic.Field(alias="stagePath")] = (
244
+ "$CRIBL_HOME/state/outputs/staging"
245
+ )
246
+ r"""Filesystem location in which to buffer files before compressing and moving to final destination. Use performant and stable storage."""
247
+
248
+ add_id_to_stage_path: Annotated[
249
+ Optional[bool], pydantic.Field(alias="addIdToStagePath")
250
+ ] = True
251
+ r"""Add the Output ID value to staging location"""
252
+
253
+ max_concurrent_file_parts: Annotated[
254
+ Optional[float], pydantic.Field(alias="maxConcurrentFileParts")
255
+ ] = 1
256
+ r"""Maximum number of parts to upload in parallel per file"""
257
+
258
+ remove_empty_dirs: Annotated[
259
+ Optional[bool], pydantic.Field(alias="removeEmptyDirs")
260
+ ] = True
261
+ r"""Remove empty staging directories after moving files"""
262
+
263
+ partition_expr: Annotated[Optional[str], pydantic.Field(alias="partitionExpr")] = (
264
+ "C.Time.strftime(_time ? _time : Date.now()/1000, '%Y/%m/%d')"
265
+ )
266
+ r"""JavaScript expression defining how files are partitioned and organized. Default is date-based. If blank, Stream will fall back to the event's __partition field value – if present – otherwise to each location's root directory."""
267
+
268
+ format_: Annotated[
269
+ Annotated[
270
+ Optional[OutputAzureBlobDataFormat],
271
+ PlainValidator(validate_open_enum(False)),
272
+ ],
273
+ pydantic.Field(alias="format"),
274
+ ] = OutputAzureBlobDataFormat.JSON
275
+ r"""Format of the output data"""
276
+
277
+ base_file_name: Annotated[Optional[str], pydantic.Field(alias="baseFileName")] = (
278
+ "`CriblOut`"
279
+ )
280
+ r"""JavaScript expression to define the output filename prefix (can be constant)"""
281
+
282
+ file_name_suffix: Annotated[
283
+ Optional[str], pydantic.Field(alias="fileNameSuffix")
284
+ ] = '`.${C.env["CRIBL_WORKER_ID"]}.${__format}${__compression === "gzip" ? ".gz" : ""}`'
285
+ r"""JavaScript expression to define the output filename suffix (can be constant). The `__format` variable refers to the value of the `Data format` field (`json` or `raw`). The `__compression` field refers to the kind of compression being used (`none` or `gzip`)."""
286
+
287
+ max_file_size_mb: Annotated[
288
+ Optional[float], pydantic.Field(alias="maxFileSizeMB")
289
+ ] = 32
290
+ r"""Maximum uncompressed output file size. Files of this size will be closed and moved to final output location."""
291
+
292
+ max_file_open_time_sec: Annotated[
293
+ Optional[float], pydantic.Field(alias="maxFileOpenTimeSec")
294
+ ] = 300
295
+ r"""Maximum amount of time to write to a file. Files open for longer than this will be closed and moved to final output location."""
296
+
297
+ max_file_idle_time_sec: Annotated[
298
+ Optional[float], pydantic.Field(alias="maxFileIdleTimeSec")
299
+ ] = 30
300
+ r"""Maximum amount of time to keep inactive files open. Files open for longer than this will be closed and moved to final output location."""
301
+
302
+ max_open_files: Annotated[Optional[float], pydantic.Field(alias="maxOpenFiles")] = (
303
+ 100
304
+ )
305
+ r"""Maximum number of files to keep open concurrently. When exceeded, @{product} will close the oldest open files and move them to the final output location."""
306
+
307
+ header_line: Annotated[Optional[str], pydantic.Field(alias="headerLine")] = ""
308
+ r"""If set, this line will be written to the beginning of each output file"""
309
+
310
+ write_high_water_mark: Annotated[
311
+ Optional[float], pydantic.Field(alias="writeHighWaterMark")
312
+ ] = 64
313
+ r"""Buffer size used to write to a file"""
314
+
315
+ on_backpressure: Annotated[
316
+ Annotated[
317
+ Optional[OutputAzureBlobBackpressureBehavior],
318
+ PlainValidator(validate_open_enum(False)),
319
+ ],
320
+ pydantic.Field(alias="onBackpressure"),
321
+ ] = OutputAzureBlobBackpressureBehavior.BLOCK
322
+ r"""How to handle events when all receivers are exerting backpressure"""
323
+
324
+ deadletter_enabled: Annotated[
325
+ Optional[bool], pydantic.Field(alias="deadletterEnabled")
326
+ ] = False
327
+ r"""If a file fails to move to its final destination after the maximum number of retries, move it to a designated directory to prevent further errors"""
328
+
329
+ on_disk_full_backpressure: Annotated[
330
+ Annotated[
331
+ Optional[OutputAzureBlobDiskSpaceProtection],
332
+ PlainValidator(validate_open_enum(False)),
333
+ ],
334
+ pydantic.Field(alias="onDiskFullBackpressure"),
335
+ ] = OutputAzureBlobDiskSpaceProtection.BLOCK
336
+ r"""How to handle events when disk space is below the global 'Min free disk space' limit"""
337
+
338
+ auth_type: Annotated[
339
+ Annotated[
340
+ Optional[OutputAzureBlobAuthenticationMethod],
341
+ PlainValidator(validate_open_enum(False)),
342
+ ],
343
+ pydantic.Field(alias="authType"),
344
+ ] = OutputAzureBlobAuthenticationMethod.MANUAL
345
+
346
+ storage_class: Annotated[
347
+ Annotated[Optional[BlobAccessTier], PlainValidator(validate_open_enum(False))],
348
+ pydantic.Field(alias="storageClass"),
349
+ ] = BlobAccessTier.INFERRED
350
+
351
+ description: Optional[str] = None
352
+
353
+ compress: Annotated[
354
+ Optional[OutputAzureBlobCompression], PlainValidator(validate_open_enum(False))
355
+ ] = OutputAzureBlobCompression.GZIP
356
+ r"""Data compression format to apply to HTTP content before it is delivered"""
357
+
358
+ compression_level: Annotated[
359
+ Annotated[
360
+ Optional[OutputAzureBlobCompressionLevel],
361
+ PlainValidator(validate_open_enum(False)),
362
+ ],
363
+ pydantic.Field(alias="compressionLevel"),
364
+ ] = OutputAzureBlobCompressionLevel.BEST_SPEED
365
+ r"""Compression level to apply before moving files to final destination"""
366
+
367
+ automatic_schema: Annotated[
368
+ Optional[bool], pydantic.Field(alias="automaticSchema")
369
+ ] = False
370
+ r"""Automatically calculate the schema based on the events of each Parquet file generated"""
371
+
372
+ parquet_version: Annotated[
373
+ Annotated[
374
+ Optional[OutputAzureBlobParquetVersion],
375
+ PlainValidator(validate_open_enum(False)),
376
+ ],
377
+ pydantic.Field(alias="parquetVersion"),
378
+ ] = OutputAzureBlobParquetVersion.PARQUET_2_6
379
+ r"""Determines which data types are supported and how they are represented"""
380
+
381
+ parquet_data_page_version: Annotated[
382
+ Annotated[
383
+ Optional[OutputAzureBlobDataPageVersion],
384
+ PlainValidator(validate_open_enum(False)),
385
+ ],
386
+ pydantic.Field(alias="parquetDataPageVersion"),
387
+ ] = OutputAzureBlobDataPageVersion.DATA_PAGE_V2
388
+ r"""Serialization format of data pages. Note that some reader implementations use Data page V2's attributes to work more efficiently, while others ignore it."""
389
+
390
+ parquet_row_group_length: Annotated[
391
+ Optional[float], pydantic.Field(alias="parquetRowGroupLength")
392
+ ] = 10000
393
+ r"""The number of rows that every group will contain. The final group can contain a smaller number of rows."""
394
+
395
+ parquet_page_size: Annotated[
396
+ Optional[str], pydantic.Field(alias="parquetPageSize")
397
+ ] = "1MB"
398
+ r"""Target memory size for page segments, such as 1MB or 128MB. Generally, lower values improve reading speed, while higher values improve compression."""
399
+
400
+ should_log_invalid_rows: Annotated[
401
+ Optional[bool], pydantic.Field(alias="shouldLogInvalidRows")
402
+ ] = None
403
+ r"""Log up to 3 rows that @{product} skips due to data mismatch"""
404
+
405
+ key_value_metadata: Annotated[
406
+ Optional[List[OutputAzureBlobKeyValueMetadatum]],
407
+ pydantic.Field(alias="keyValueMetadata"),
408
+ ] = None
409
+ r"""The metadata of files the Destination writes will include the properties you add here as key-value pairs. Useful for tagging. Examples: \"key\":\"OCSF Event Class\", \"value\":\"9001\" """
410
+
411
+ enable_statistics: Annotated[
412
+ Optional[bool], pydantic.Field(alias="enableStatistics")
413
+ ] = True
414
+ r"""Statistics profile an entire file in terms of minimum/maximum values within data, numbers of nulls, etc. You can use Parquet tools to view statistics."""
415
+
416
+ enable_write_page_index: Annotated[
417
+ Optional[bool], pydantic.Field(alias="enableWritePageIndex")
418
+ ] = True
419
+ r"""One page index contains statistics for one data page. Parquet readers use statistics to enable page skipping."""
420
+
421
+ enable_page_checksum: Annotated[
422
+ Optional[bool], pydantic.Field(alias="enablePageChecksum")
423
+ ] = False
424
+ r"""Parquet tools can use the checksum of a Parquet page to verify data integrity"""
425
+
426
+ empty_dir_cleanup_sec: Annotated[
427
+ Optional[float], pydantic.Field(alias="emptyDirCleanupSec")
428
+ ] = 300
429
+ r"""How frequently, in seconds, to clean up empty directories"""
430
+
431
+ deadletter_path: Annotated[
432
+ Optional[str], pydantic.Field(alias="deadletterPath")
433
+ ] = "$CRIBL_HOME/state/outputs/dead-letter"
434
+ r"""Storage location for files that fail to reach their final destination after maximum retries are exceeded"""
435
+
436
+ max_retry_num: Annotated[Optional[float], pydantic.Field(alias="maxRetryNum")] = 20
437
+ r"""The maximum number of times a file will attempt to move to its final destination before being dead-lettered"""
438
+
439
+ connection_string: Annotated[
440
+ Optional[str], pydantic.Field(alias="connectionString")
441
+ ] = None
442
+ r"""Enter your Azure Storage account connection string. If left blank, Stream will fall back to env.AZURE_STORAGE_CONNECTION_STRING."""
443
+
444
+ text_secret: Annotated[Optional[str], pydantic.Field(alias="textSecret")] = None
445
+ r"""Select or create a stored text secret"""
446
+
447
+ storage_account_name: Annotated[
448
+ Optional[str], pydantic.Field(alias="storageAccountName")
449
+ ] = None
450
+ r"""The name of your Azure storage account"""
451
+
452
+ tenant_id: Annotated[Optional[str], pydantic.Field(alias="tenantId")] = None
453
+ r"""The service principal's tenant ID"""
454
+
455
+ client_id: Annotated[Optional[str], pydantic.Field(alias="clientId")] = None
456
+ r"""The service principal's client ID"""
457
+
458
+ azure_cloud: Annotated[Optional[str], pydantic.Field(alias="azureCloud")] = None
459
+ r"""The Azure cloud to use. Defaults to Azure Public Cloud."""
460
+
461
+ endpoint_suffix: Annotated[
462
+ Optional[str], pydantic.Field(alias="endpointSuffix")
463
+ ] = None
464
+ r"""Endpoint suffix for the service URL. Takes precedence over the Azure Cloud setting. Defaults to core.windows.net."""
465
+
466
+ client_text_secret: Annotated[
467
+ Optional[str], pydantic.Field(alias="clientTextSecret")
468
+ ] = None
469
+ r"""Select or create a stored text secret"""
470
+
471
+ certificate: Optional[OutputAzureBlobCertificate] = None