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.
- cribl_control_plane/__init__.py +17 -0
- cribl_control_plane/_hooks/__init__.py +5 -0
- cribl_control_plane/_hooks/clientcredentials.py +211 -0
- cribl_control_plane/_hooks/registration.py +13 -0
- cribl_control_plane/_hooks/sdkhooks.py +81 -0
- cribl_control_plane/_hooks/types.py +112 -0
- cribl_control_plane/_version.py +15 -0
- cribl_control_plane/auth_sdk.py +184 -0
- cribl_control_plane/basesdk.py +358 -0
- cribl_control_plane/errors/__init__.py +60 -0
- cribl_control_plane/errors/apierror.py +38 -0
- cribl_control_plane/errors/criblcontrolplaneerror.py +26 -0
- cribl_control_plane/errors/error.py +24 -0
- cribl_control_plane/errors/healthstatus_error.py +38 -0
- cribl_control_plane/errors/no_response_error.py +13 -0
- cribl_control_plane/errors/responsevalidationerror.py +25 -0
- cribl_control_plane/health.py +166 -0
- cribl_control_plane/httpclient.py +126 -0
- cribl_control_plane/models/__init__.py +7305 -0
- cribl_control_plane/models/addhectokenrequest.py +34 -0
- cribl_control_plane/models/authtoken.py +13 -0
- cribl_control_plane/models/createinputhectokenbyidop.py +45 -0
- cribl_control_plane/models/createinputop.py +24 -0
- cribl_control_plane/models/createoutputop.py +24 -0
- cribl_control_plane/models/createoutputtestbyidop.py +46 -0
- cribl_control_plane/models/criblevent.py +14 -0
- cribl_control_plane/models/deleteinputbyidop.py +37 -0
- cribl_control_plane/models/deleteoutputbyidop.py +37 -0
- cribl_control_plane/models/deleteoutputpqbyidop.py +36 -0
- cribl_control_plane/models/getinputbyidop.py +37 -0
- cribl_control_plane/models/getoutputbyidop.py +37 -0
- cribl_control_plane/models/getoutputpqbyidop.py +36 -0
- cribl_control_plane/models/getoutputsamplesbyidop.py +37 -0
- cribl_control_plane/models/healthstatus.py +36 -0
- cribl_control_plane/models/input.py +199 -0
- cribl_control_plane/models/inputappscope.py +448 -0
- cribl_control_plane/models/inputazureblob.py +308 -0
- cribl_control_plane/models/inputcollection.py +208 -0
- cribl_control_plane/models/inputconfluentcloud.py +585 -0
- cribl_control_plane/models/inputcribl.py +165 -0
- cribl_control_plane/models/inputcriblhttp.py +341 -0
- cribl_control_plane/models/inputcribllakehttp.py +342 -0
- cribl_control_plane/models/inputcriblmetrics.py +175 -0
- cribl_control_plane/models/inputcribltcp.py +299 -0
- cribl_control_plane/models/inputcrowdstrike.py +410 -0
- cribl_control_plane/models/inputdatadogagent.py +364 -0
- cribl_control_plane/models/inputdatagen.py +180 -0
- cribl_control_plane/models/inputedgeprometheus.py +551 -0
- cribl_control_plane/models/inputelastic.py +494 -0
- cribl_control_plane/models/inputeventhub.py +360 -0
- cribl_control_plane/models/inputexec.py +213 -0
- cribl_control_plane/models/inputfile.py +259 -0
- cribl_control_plane/models/inputfirehose.py +341 -0
- cribl_control_plane/models/inputgooglepubsub.py +247 -0
- cribl_control_plane/models/inputgrafana_union.py +1247 -0
- cribl_control_plane/models/inputhttp.py +403 -0
- cribl_control_plane/models/inputhttpraw.py +407 -0
- cribl_control_plane/models/inputjournalfiles.py +208 -0
- cribl_control_plane/models/inputkafka.py +581 -0
- cribl_control_plane/models/inputkinesis.py +363 -0
- cribl_control_plane/models/inputkubeevents.py +182 -0
- cribl_control_plane/models/inputkubelogs.py +256 -0
- cribl_control_plane/models/inputkubemetrics.py +233 -0
- cribl_control_plane/models/inputloki.py +468 -0
- cribl_control_plane/models/inputmetrics.py +290 -0
- cribl_control_plane/models/inputmodeldriventelemetry.py +274 -0
- cribl_control_plane/models/inputmsk.py +654 -0
- cribl_control_plane/models/inputnetflow.py +224 -0
- cribl_control_plane/models/inputoffice365mgmt.py +384 -0
- cribl_control_plane/models/inputoffice365msgtrace.py +449 -0
- cribl_control_plane/models/inputoffice365service.py +377 -0
- cribl_control_plane/models/inputopentelemetry.py +516 -0
- cribl_control_plane/models/inputprometheus.py +464 -0
- cribl_control_plane/models/inputprometheusrw.py +470 -0
- cribl_control_plane/models/inputrawudp.py +207 -0
- cribl_control_plane/models/inputs3.py +416 -0
- cribl_control_plane/models/inputs3inventory.py +440 -0
- cribl_control_plane/models/inputsecuritylake.py +425 -0
- cribl_control_plane/models/inputsnmp.py +274 -0
- cribl_control_plane/models/inputsplunk.py +387 -0
- cribl_control_plane/models/inputsplunkhec.py +478 -0
- cribl_control_plane/models/inputsplunksearch.py +537 -0
- cribl_control_plane/models/inputsqs.py +320 -0
- cribl_control_plane/models/inputsyslog_union.py +759 -0
- cribl_control_plane/models/inputsystemmetrics.py +533 -0
- cribl_control_plane/models/inputsystemstate.py +417 -0
- cribl_control_plane/models/inputtcp.py +359 -0
- cribl_control_plane/models/inputtcpjson.py +334 -0
- cribl_control_plane/models/inputwef.py +498 -0
- cribl_control_plane/models/inputwindowsmetrics.py +457 -0
- cribl_control_plane/models/inputwineventlogs.py +222 -0
- cribl_control_plane/models/inputwiz.py +334 -0
- cribl_control_plane/models/inputzscalerhec.py +439 -0
- cribl_control_plane/models/listinputop.py +24 -0
- cribl_control_plane/models/listoutputop.py +24 -0
- cribl_control_plane/models/logininfo.py +16 -0
- cribl_control_plane/models/output.py +229 -0
- cribl_control_plane/models/outputazureblob.py +471 -0
- cribl_control_plane/models/outputazuredataexplorer.py +660 -0
- cribl_control_plane/models/outputazureeventhub.py +321 -0
- cribl_control_plane/models/outputazurelogs.py +386 -0
- cribl_control_plane/models/outputclickhouse.py +650 -0
- cribl_control_plane/models/outputcloudwatch.py +273 -0
- cribl_control_plane/models/outputconfluentcloud.py +591 -0
- cribl_control_plane/models/outputcriblhttp.py +494 -0
- cribl_control_plane/models/outputcribllake.py +396 -0
- cribl_control_plane/models/outputcribltcp.py +387 -0
- cribl_control_plane/models/outputcrowdstrikenextgensiem.py +410 -0
- cribl_control_plane/models/outputdatadog.py +472 -0
- cribl_control_plane/models/outputdataset.py +437 -0
- cribl_control_plane/models/outputdefault.py +55 -0
- cribl_control_plane/models/outputdevnull.py +50 -0
- cribl_control_plane/models/outputdiskspool.py +89 -0
- cribl_control_plane/models/outputdls3.py +560 -0
- cribl_control_plane/models/outputdynatracehttp.py +454 -0
- cribl_control_plane/models/outputdynatraceotlp.py +486 -0
- cribl_control_plane/models/outputelastic.py +494 -0
- cribl_control_plane/models/outputelasticcloud.py +407 -0
- cribl_control_plane/models/outputexabeam.py +297 -0
- cribl_control_plane/models/outputfilesystem.py +357 -0
- cribl_control_plane/models/outputgooglechronicle.py +486 -0
- cribl_control_plane/models/outputgooglecloudlogging.py +557 -0
- cribl_control_plane/models/outputgooglecloudstorage.py +499 -0
- cribl_control_plane/models/outputgooglepubsub.py +274 -0
- cribl_control_plane/models/outputgrafanacloud_union.py +1024 -0
- cribl_control_plane/models/outputgraphite.py +225 -0
- cribl_control_plane/models/outputhoneycomb.py +369 -0
- cribl_control_plane/models/outputhumiohec.py +389 -0
- cribl_control_plane/models/outputinfluxdb.py +523 -0
- cribl_control_plane/models/outputkafka.py +581 -0
- cribl_control_plane/models/outputkinesis.py +312 -0
- cribl_control_plane/models/outputloki.py +425 -0
- cribl_control_plane/models/outputminio.py +512 -0
- cribl_control_plane/models/outputmsk.py +654 -0
- cribl_control_plane/models/outputnetflow.py +80 -0
- cribl_control_plane/models/outputnewrelic.py +424 -0
- cribl_control_plane/models/outputnewrelicevents.py +401 -0
- cribl_control_plane/models/outputopentelemetry.py +669 -0
- cribl_control_plane/models/outputprometheus.py +485 -0
- cribl_control_plane/models/outputring.py +121 -0
- cribl_control_plane/models/outputrouter.py +83 -0
- cribl_control_plane/models/outputs3.py +556 -0
- cribl_control_plane/models/outputsamplesresponse.py +14 -0
- cribl_control_plane/models/outputsecuritylake.py +505 -0
- cribl_control_plane/models/outputsentinel.py +488 -0
- cribl_control_plane/models/outputsentineloneaisiem.py +505 -0
- cribl_control_plane/models/outputservicenow.py +543 -0
- cribl_control_plane/models/outputsignalfx.py +369 -0
- cribl_control_plane/models/outputsnmp.py +80 -0
- cribl_control_plane/models/outputsns.py +274 -0
- cribl_control_plane/models/outputsplunk.py +383 -0
- cribl_control_plane/models/outputsplunkhec.py +434 -0
- cribl_control_plane/models/outputsplunklb.py +558 -0
- cribl_control_plane/models/outputsqs.py +328 -0
- cribl_control_plane/models/outputstatsd.py +224 -0
- cribl_control_plane/models/outputstatsdext.py +225 -0
- cribl_control_plane/models/outputsumologic.py +378 -0
- cribl_control_plane/models/outputsyslog.py +415 -0
- cribl_control_plane/models/outputtcpjson.py +413 -0
- cribl_control_plane/models/outputtestrequest.py +15 -0
- cribl_control_plane/models/outputtestresponse.py +29 -0
- cribl_control_plane/models/outputwavefront.py +369 -0
- cribl_control_plane/models/outputwebhook.py +689 -0
- cribl_control_plane/models/outputxsiam.py +415 -0
- cribl_control_plane/models/schemeclientoauth.py +24 -0
- cribl_control_plane/models/security.py +36 -0
- cribl_control_plane/models/updatehectokenrequest.py +31 -0
- cribl_control_plane/models/updateinputbyidop.py +44 -0
- cribl_control_plane/models/updateinputhectokenbyidandtokenop.py +52 -0
- cribl_control_plane/models/updateoutputbyidop.py +44 -0
- cribl_control_plane/outputs.py +1615 -0
- cribl_control_plane/py.typed +1 -0
- cribl_control_plane/sdk.py +164 -0
- cribl_control_plane/sdkconfiguration.py +36 -0
- cribl_control_plane/sources.py +1355 -0
- cribl_control_plane/types/__init__.py +21 -0
- cribl_control_plane/types/basemodel.py +39 -0
- cribl_control_plane/utils/__init__.py +187 -0
- cribl_control_plane/utils/annotations.py +55 -0
- cribl_control_plane/utils/datetimes.py +23 -0
- cribl_control_plane/utils/enums.py +74 -0
- cribl_control_plane/utils/eventstreaming.py +238 -0
- cribl_control_plane/utils/forms.py +223 -0
- cribl_control_plane/utils/headers.py +136 -0
- cribl_control_plane/utils/logger.py +27 -0
- cribl_control_plane/utils/metadata.py +118 -0
- cribl_control_plane/utils/queryparams.py +205 -0
- cribl_control_plane/utils/requestbodies.py +66 -0
- cribl_control_plane/utils/retries.py +217 -0
- cribl_control_plane/utils/security.py +207 -0
- cribl_control_plane/utils/serializers.py +249 -0
- cribl_control_plane/utils/unmarshal_json_response.py +24 -0
- cribl_control_plane/utils/url.py +155 -0
- cribl_control_plane/utils/values.py +137 -0
- cribl_control_plane-0.0.13.dist-info/METADATA +489 -0
- cribl_control_plane-0.0.13.dist-info/RECORD +197 -0
- cribl_control_plane-0.0.13.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,498 @@
|
|
|
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 Any, List, Optional
|
|
11
|
+
from typing_extensions import Annotated, NotRequired, TypedDict
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InputWefType(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
15
|
+
WEF = "wef"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class InputWefConnectionTypedDict(TypedDict):
|
|
19
|
+
output: str
|
|
20
|
+
pipeline: NotRequired[str]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class InputWefConnection(BaseModel):
|
|
24
|
+
output: str
|
|
25
|
+
|
|
26
|
+
pipeline: Optional[str] = None
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class InputWefMode(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
30
|
+
r"""With Smart mode, PQ will write events to the filesystem only when it detects backpressure from the processing engine. With Always On mode, PQ will always write events directly to the queue before forwarding them to the processing engine."""
|
|
31
|
+
|
|
32
|
+
SMART = "smart"
|
|
33
|
+
ALWAYS = "always"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class InputWefCompression(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
37
|
+
r"""Codec to use to compress the persisted data"""
|
|
38
|
+
|
|
39
|
+
NONE = "none"
|
|
40
|
+
GZIP = "gzip"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class InputWefPqTypedDict(TypedDict):
|
|
44
|
+
mode: NotRequired[InputWefMode]
|
|
45
|
+
r"""With Smart mode, PQ will write events to the filesystem only when it detects backpressure from the processing engine. With Always On mode, PQ will always write events directly to the queue before forwarding them to the processing engine."""
|
|
46
|
+
max_buffer_size: NotRequired[float]
|
|
47
|
+
r"""The maximum number of events to hold in memory before writing the events to disk"""
|
|
48
|
+
commit_frequency: NotRequired[float]
|
|
49
|
+
r"""The number of events to send downstream before committing that Stream has read them"""
|
|
50
|
+
max_file_size: NotRequired[str]
|
|
51
|
+
r"""The maximum size to store in each queue file before closing and optionally compressing. Enter a numeral with units of KB, MB, etc."""
|
|
52
|
+
max_size: NotRequired[str]
|
|
53
|
+
r"""The maximum disk space that the queue can consume (as an average per Worker Process) before queueing stops. Enter a numeral with units of KB, MB, etc."""
|
|
54
|
+
path: NotRequired[str]
|
|
55
|
+
r"""The location for the persistent queue files. To this field's value, the system will append: /<worker-id>/inputs/<input-id>"""
|
|
56
|
+
compress: NotRequired[InputWefCompression]
|
|
57
|
+
r"""Codec to use to compress the persisted data"""
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class InputWefPq(BaseModel):
|
|
61
|
+
mode: Annotated[
|
|
62
|
+
Optional[InputWefMode], PlainValidator(validate_open_enum(False))
|
|
63
|
+
] = InputWefMode.ALWAYS
|
|
64
|
+
r"""With Smart mode, PQ will write events to the filesystem only when it detects backpressure from the processing engine. With Always On mode, PQ will always write events directly to the queue before forwarding them to the processing engine."""
|
|
65
|
+
|
|
66
|
+
max_buffer_size: Annotated[
|
|
67
|
+
Optional[float], pydantic.Field(alias="maxBufferSize")
|
|
68
|
+
] = 1000
|
|
69
|
+
r"""The maximum number of events to hold in memory before writing the events to disk"""
|
|
70
|
+
|
|
71
|
+
commit_frequency: Annotated[
|
|
72
|
+
Optional[float], pydantic.Field(alias="commitFrequency")
|
|
73
|
+
] = 42
|
|
74
|
+
r"""The number of events to send downstream before committing that Stream has read them"""
|
|
75
|
+
|
|
76
|
+
max_file_size: Annotated[Optional[str], pydantic.Field(alias="maxFileSize")] = (
|
|
77
|
+
"1 MB"
|
|
78
|
+
)
|
|
79
|
+
r"""The maximum size to store in each queue file before closing and optionally compressing. Enter a numeral with units of KB, MB, etc."""
|
|
80
|
+
|
|
81
|
+
max_size: Annotated[Optional[str], pydantic.Field(alias="maxSize")] = "5GB"
|
|
82
|
+
r"""The maximum disk space that the queue can consume (as an average per Worker Process) before queueing stops. Enter a numeral with units of KB, MB, etc."""
|
|
83
|
+
|
|
84
|
+
path: Optional[str] = "$CRIBL_HOME/state/queues"
|
|
85
|
+
r"""The location for the persistent queue files. To this field's value, the system will append: /<worker-id>/inputs/<input-id>"""
|
|
86
|
+
|
|
87
|
+
compress: Annotated[
|
|
88
|
+
Optional[InputWefCompression], PlainValidator(validate_open_enum(False))
|
|
89
|
+
] = InputWefCompression.NONE
|
|
90
|
+
r"""Codec to use to compress the persisted data"""
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class InputWefAuthenticationMethod(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
94
|
+
r"""How to authenticate incoming client connections"""
|
|
95
|
+
|
|
96
|
+
CLIENT_CERT = "clientCert"
|
|
97
|
+
KERBEROS = "kerberos"
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class InputWefMinimumTLSVersion(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
101
|
+
TL_SV1 = "TLSv1"
|
|
102
|
+
TL_SV1_1 = "TLSv1.1"
|
|
103
|
+
TL_SV1_2 = "TLSv1.2"
|
|
104
|
+
TL_SV1_3 = "TLSv1.3"
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class InputWefMaximumTLSVersion(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
108
|
+
TL_SV1 = "TLSv1"
|
|
109
|
+
TL_SV1_1 = "TLSv1.1"
|
|
110
|
+
TL_SV1_2 = "TLSv1.2"
|
|
111
|
+
TL_SV1_3 = "TLSv1.3"
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class MTLSSettingsTypedDict(TypedDict):
|
|
115
|
+
priv_key_path: str
|
|
116
|
+
r"""Path on server containing the private key to use. PEM format. Can reference $ENV_VARS."""
|
|
117
|
+
cert_path: str
|
|
118
|
+
r"""Path on server containing certificates to use. PEM format. Can reference $ENV_VARS."""
|
|
119
|
+
ca_path: str
|
|
120
|
+
r"""Server path containing CA certificates (in PEM format) to use. Can reference $ENV_VARS. If multiple certificates are present in a .pem, each must directly certify the one preceding it."""
|
|
121
|
+
disabled: NotRequired[bool]
|
|
122
|
+
r"""Enable TLS"""
|
|
123
|
+
reject_unauthorized: NotRequired[bool]
|
|
124
|
+
r"""Required for WEF certificate authentication"""
|
|
125
|
+
request_cert: NotRequired[bool]
|
|
126
|
+
r"""Required for WEF certificate authentication"""
|
|
127
|
+
certificate_name: NotRequired[str]
|
|
128
|
+
r"""Name of the predefined certificate"""
|
|
129
|
+
passphrase: NotRequired[str]
|
|
130
|
+
r"""Passphrase to use to decrypt private key"""
|
|
131
|
+
common_name_regex: NotRequired[str]
|
|
132
|
+
r"""Regex matching allowable common names in peer certificates' subject attribute"""
|
|
133
|
+
min_version: NotRequired[InputWefMinimumTLSVersion]
|
|
134
|
+
max_version: NotRequired[InputWefMaximumTLSVersion]
|
|
135
|
+
ocsp_check: NotRequired[bool]
|
|
136
|
+
r"""Enable OCSP check of certificate"""
|
|
137
|
+
keytab: NotRequired[Any]
|
|
138
|
+
principal: NotRequired[Any]
|
|
139
|
+
ocsp_check_fail_close: NotRequired[bool]
|
|
140
|
+
r"""If enabled, checks will fail on any OCSP error. Otherwise, checks will fail only when a certificate is revoked, ignoring other errors."""
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class MTLSSettings(BaseModel):
|
|
144
|
+
priv_key_path: Annotated[str, pydantic.Field(alias="privKeyPath")]
|
|
145
|
+
r"""Path on server containing the private key to use. PEM format. Can reference $ENV_VARS."""
|
|
146
|
+
|
|
147
|
+
cert_path: Annotated[str, pydantic.Field(alias="certPath")]
|
|
148
|
+
r"""Path on server containing certificates to use. PEM format. Can reference $ENV_VARS."""
|
|
149
|
+
|
|
150
|
+
ca_path: Annotated[str, pydantic.Field(alias="caPath")]
|
|
151
|
+
r"""Server path containing CA certificates (in PEM format) to use. Can reference $ENV_VARS. If multiple certificates are present in a .pem, each must directly certify the one preceding it."""
|
|
152
|
+
|
|
153
|
+
disabled: Optional[bool] = False
|
|
154
|
+
r"""Enable TLS"""
|
|
155
|
+
|
|
156
|
+
reject_unauthorized: Annotated[
|
|
157
|
+
Optional[bool], pydantic.Field(alias="rejectUnauthorized")
|
|
158
|
+
] = True
|
|
159
|
+
r"""Required for WEF certificate authentication"""
|
|
160
|
+
|
|
161
|
+
request_cert: Annotated[Optional[bool], pydantic.Field(alias="requestCert")] = True
|
|
162
|
+
r"""Required for WEF certificate authentication"""
|
|
163
|
+
|
|
164
|
+
certificate_name: Annotated[
|
|
165
|
+
Optional[str], pydantic.Field(alias="certificateName")
|
|
166
|
+
] = None
|
|
167
|
+
r"""Name of the predefined certificate"""
|
|
168
|
+
|
|
169
|
+
passphrase: Optional[str] = None
|
|
170
|
+
r"""Passphrase to use to decrypt private key"""
|
|
171
|
+
|
|
172
|
+
common_name_regex: Annotated[
|
|
173
|
+
Optional[str], pydantic.Field(alias="commonNameRegex")
|
|
174
|
+
] = "/.*/"
|
|
175
|
+
r"""Regex matching allowable common names in peer certificates' subject attribute"""
|
|
176
|
+
|
|
177
|
+
min_version: Annotated[
|
|
178
|
+
Annotated[
|
|
179
|
+
Optional[InputWefMinimumTLSVersion],
|
|
180
|
+
PlainValidator(validate_open_enum(False)),
|
|
181
|
+
],
|
|
182
|
+
pydantic.Field(alias="minVersion"),
|
|
183
|
+
] = None
|
|
184
|
+
|
|
185
|
+
max_version: Annotated[
|
|
186
|
+
Annotated[
|
|
187
|
+
Optional[InputWefMaximumTLSVersion],
|
|
188
|
+
PlainValidator(validate_open_enum(False)),
|
|
189
|
+
],
|
|
190
|
+
pydantic.Field(alias="maxVersion"),
|
|
191
|
+
] = None
|
|
192
|
+
|
|
193
|
+
ocsp_check: Annotated[Optional[bool], pydantic.Field(alias="ocspCheck")] = False
|
|
194
|
+
r"""Enable OCSP check of certificate"""
|
|
195
|
+
|
|
196
|
+
keytab: Optional[Any] = None
|
|
197
|
+
|
|
198
|
+
principal: Optional[Any] = None
|
|
199
|
+
|
|
200
|
+
ocsp_check_fail_close: Annotated[
|
|
201
|
+
Optional[bool], pydantic.Field(alias="ocspCheckFailClose")
|
|
202
|
+
] = False
|
|
203
|
+
r"""If enabled, checks will fail on any OCSP error. Otherwise, checks will fail only when a certificate is revoked, ignoring other errors."""
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class InputWefFormat(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
207
|
+
r"""Content format in which the endpoint should deliver events"""
|
|
208
|
+
|
|
209
|
+
RAW = "Raw"
|
|
210
|
+
RENDERED_TEXT = "RenderedText"
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class QueryBuilderMode(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
214
|
+
SIMPLE = "simple"
|
|
215
|
+
XML = "xml"
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class SubscriptionMetadatumTypedDict(TypedDict):
|
|
219
|
+
name: str
|
|
220
|
+
value: str
|
|
221
|
+
r"""JavaScript expression to compute field's value, enclosed in quotes or backticks. (Can evaluate to a constant.)"""
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class SubscriptionMetadatum(BaseModel):
|
|
225
|
+
name: str
|
|
226
|
+
|
|
227
|
+
value: str
|
|
228
|
+
r"""JavaScript expression to compute field's value, enclosed in quotes or backticks. (Can evaluate to a constant.)"""
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
class SubscriptionTypedDict(TypedDict):
|
|
232
|
+
subscription_name: str
|
|
233
|
+
targets: List[str]
|
|
234
|
+
r"""The DNS names of the endpoints that should forward these events. You may use wildcards, such as *.mydomain.com"""
|
|
235
|
+
version: NotRequired[str]
|
|
236
|
+
r"""Version UUID for this subscription. If any subscription parameters are modified, this value will change."""
|
|
237
|
+
content_format: NotRequired[InputWefFormat]
|
|
238
|
+
r"""Content format in which the endpoint should deliver events"""
|
|
239
|
+
heartbeat_interval: NotRequired[float]
|
|
240
|
+
r"""Maximum time (in seconds) between endpoint checkins before considering it unavailable"""
|
|
241
|
+
batch_timeout: NotRequired[float]
|
|
242
|
+
r"""Interval (in seconds) over which the endpoint should collect events before sending them to Stream"""
|
|
243
|
+
read_existing_events: NotRequired[bool]
|
|
244
|
+
r"""Newly subscribed endpoints will send previously existing events. Disable to receive new events only."""
|
|
245
|
+
send_bookmarks: NotRequired[bool]
|
|
246
|
+
r"""Keep track of which events have been received, resuming from that point after a re-subscription. This setting takes precedence over 'Read existing events'. See [Cribl Docs](https://docs.cribl.io/stream/sources-wef/#subscriptions) for more details."""
|
|
247
|
+
compress: NotRequired[bool]
|
|
248
|
+
r"""Receive compressed events from the source"""
|
|
249
|
+
locale: NotRequired[str]
|
|
250
|
+
r"""The RFC-3066 locale the Windows clients should use when sending events. Defaults to \"en-US\"."""
|
|
251
|
+
query_selector: NotRequired[QueryBuilderMode]
|
|
252
|
+
metadata: NotRequired[List[SubscriptionMetadatumTypedDict]]
|
|
253
|
+
r"""Fields to add to events ingested under this subscription"""
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
class Subscription(BaseModel):
|
|
257
|
+
subscription_name: Annotated[str, pydantic.Field(alias="subscriptionName")]
|
|
258
|
+
|
|
259
|
+
targets: List[str]
|
|
260
|
+
r"""The DNS names of the endpoints that should forward these events. You may use wildcards, such as *.mydomain.com"""
|
|
261
|
+
|
|
262
|
+
version: Optional[str] = None
|
|
263
|
+
r"""Version UUID for this subscription. If any subscription parameters are modified, this value will change."""
|
|
264
|
+
|
|
265
|
+
content_format: Annotated[
|
|
266
|
+
Annotated[Optional[InputWefFormat], PlainValidator(validate_open_enum(False))],
|
|
267
|
+
pydantic.Field(alias="contentFormat"),
|
|
268
|
+
] = InputWefFormat.RAW
|
|
269
|
+
r"""Content format in which the endpoint should deliver events"""
|
|
270
|
+
|
|
271
|
+
heartbeat_interval: Annotated[
|
|
272
|
+
Optional[float], pydantic.Field(alias="heartbeatInterval")
|
|
273
|
+
] = 60
|
|
274
|
+
r"""Maximum time (in seconds) between endpoint checkins before considering it unavailable"""
|
|
275
|
+
|
|
276
|
+
batch_timeout: Annotated[Optional[float], pydantic.Field(alias="batchTimeout")] = 60
|
|
277
|
+
r"""Interval (in seconds) over which the endpoint should collect events before sending them to Stream"""
|
|
278
|
+
|
|
279
|
+
read_existing_events: Annotated[
|
|
280
|
+
Optional[bool], pydantic.Field(alias="readExistingEvents")
|
|
281
|
+
] = False
|
|
282
|
+
r"""Newly subscribed endpoints will send previously existing events. Disable to receive new events only."""
|
|
283
|
+
|
|
284
|
+
send_bookmarks: Annotated[Optional[bool], pydantic.Field(alias="sendBookmarks")] = (
|
|
285
|
+
True
|
|
286
|
+
)
|
|
287
|
+
r"""Keep track of which events have been received, resuming from that point after a re-subscription. This setting takes precedence over 'Read existing events'. See [Cribl Docs](https://docs.cribl.io/stream/sources-wef/#subscriptions) for more details."""
|
|
288
|
+
|
|
289
|
+
compress: Optional[bool] = True
|
|
290
|
+
r"""Receive compressed events from the source"""
|
|
291
|
+
|
|
292
|
+
locale: Optional[str] = "en-US"
|
|
293
|
+
r"""The RFC-3066 locale the Windows clients should use when sending events. Defaults to \"en-US\"."""
|
|
294
|
+
|
|
295
|
+
query_selector: Annotated[
|
|
296
|
+
Annotated[
|
|
297
|
+
Optional[QueryBuilderMode], PlainValidator(validate_open_enum(False))
|
|
298
|
+
],
|
|
299
|
+
pydantic.Field(alias="querySelector"),
|
|
300
|
+
] = QueryBuilderMode.SIMPLE
|
|
301
|
+
|
|
302
|
+
metadata: Optional[List[SubscriptionMetadatum]] = None
|
|
303
|
+
r"""Fields to add to events ingested under this subscription"""
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
class InputWefMetadatumTypedDict(TypedDict):
|
|
307
|
+
name: str
|
|
308
|
+
value: str
|
|
309
|
+
r"""JavaScript expression to compute field's value, enclosed in quotes or backticks. (Can evaluate to a constant.)"""
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
class InputWefMetadatum(BaseModel):
|
|
313
|
+
name: str
|
|
314
|
+
|
|
315
|
+
value: str
|
|
316
|
+
r"""JavaScript expression to compute field's value, enclosed in quotes or backticks. (Can evaluate to a constant.)"""
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
class InputWefTypedDict(TypedDict):
|
|
320
|
+
type: InputWefType
|
|
321
|
+
subscriptions: List[SubscriptionTypedDict]
|
|
322
|
+
r"""Subscriptions to events on forwarding endpoints"""
|
|
323
|
+
id: NotRequired[str]
|
|
324
|
+
r"""Unique ID for this input"""
|
|
325
|
+
disabled: NotRequired[bool]
|
|
326
|
+
pipeline: NotRequired[str]
|
|
327
|
+
r"""Pipeline to process data from this Source before sending it through the Routes"""
|
|
328
|
+
send_to_routes: NotRequired[bool]
|
|
329
|
+
r"""Select whether to send data to Routes, or directly to Destinations."""
|
|
330
|
+
environment: NotRequired[str]
|
|
331
|
+
r"""Optionally, enable this config only on a specified Git branch. If empty, will be enabled everywhere."""
|
|
332
|
+
pq_enabled: NotRequired[bool]
|
|
333
|
+
r"""Use a disk queue to minimize data loss when connected services block. See [Cribl Docs](https://docs.cribl.io/stream/persistent-queues) for PQ defaults (Cribl-managed Cloud Workers) and configuration options (on-prem and hybrid Workers)."""
|
|
334
|
+
streamtags: NotRequired[List[str]]
|
|
335
|
+
r"""Tags for filtering and grouping in @{product}"""
|
|
336
|
+
connections: NotRequired[List[InputWefConnectionTypedDict]]
|
|
337
|
+
r"""Direct connections to Destinations, and optionally via a Pipeline or a Pack"""
|
|
338
|
+
pq: NotRequired[InputWefPqTypedDict]
|
|
339
|
+
host: NotRequired[str]
|
|
340
|
+
r"""Address to bind on. Defaults to 0.0.0.0 (all addresses)."""
|
|
341
|
+
port: NotRequired[float]
|
|
342
|
+
r"""Port to listen on"""
|
|
343
|
+
auth_method: NotRequired[InputWefAuthenticationMethod]
|
|
344
|
+
r"""How to authenticate incoming client connections"""
|
|
345
|
+
tls: NotRequired[MTLSSettingsTypedDict]
|
|
346
|
+
max_active_req: NotRequired[float]
|
|
347
|
+
r"""Maximum number of active requests allowed per Worker Process. Set to 0 for unlimited. Caution: Increasing the limit above the default value, or setting it to unlimited, may degrade performance and reduce throughput."""
|
|
348
|
+
max_requests_per_socket: NotRequired[int]
|
|
349
|
+
r"""Maximum number of requests per socket before @{product} instructs the client to close the connection. Default is 0 (unlimited)."""
|
|
350
|
+
enable_proxy_header: NotRequired[bool]
|
|
351
|
+
r"""Preserve the client’s original IP address in the __srcIpPort field when connecting through an HTTP proxy that supports the X-Forwarded-For header. This does not apply to TCP-layer Proxy Protocol v1/v2."""
|
|
352
|
+
capture_headers: NotRequired[bool]
|
|
353
|
+
r"""Add request headers to events in the __headers field"""
|
|
354
|
+
keep_alive_timeout: NotRequired[float]
|
|
355
|
+
r"""After the last response is sent, @{product} will wait this long for additional data before closing the socket connection. Minimum 1 second, maximum 600 seconds (10 minutes)."""
|
|
356
|
+
enable_health_check: NotRequired[bool]
|
|
357
|
+
r"""Expose the /cribl_health endpoint, which returns 200 OK when this Source is healthy"""
|
|
358
|
+
ip_allowlist_regex: NotRequired[str]
|
|
359
|
+
r"""Messages from matched IP addresses will be processed, unless also matched by the denylist"""
|
|
360
|
+
ip_denylist_regex: NotRequired[str]
|
|
361
|
+
r"""Messages from matched IP addresses will be ignored. This takes precedence over the allowlist."""
|
|
362
|
+
socket_timeout: NotRequired[float]
|
|
363
|
+
r"""How long @{product} should wait before assuming that an inactive socket has timed out. To wait forever, set to 0."""
|
|
364
|
+
ca_fingerprint: NotRequired[str]
|
|
365
|
+
r"""SHA1 fingerprint expected by the client, if it does not match the first certificate in the configured CA chain"""
|
|
366
|
+
keytab: NotRequired[str]
|
|
367
|
+
r"""Path to the keytab file containing the service principal credentials. @{product} will use `/etc/krb5.keytab` if not provided."""
|
|
368
|
+
principal: NotRequired[str]
|
|
369
|
+
r"""Kerberos principal used for authentication, typically in the form HTTP/<hostname>@<REALM>"""
|
|
370
|
+
allow_machine_id_mismatch: NotRequired[bool]
|
|
371
|
+
r"""Allow events to be ingested even if their MachineID does not match the client certificate CN"""
|
|
372
|
+
metadata: NotRequired[List[InputWefMetadatumTypedDict]]
|
|
373
|
+
r"""Fields to add to events from this input"""
|
|
374
|
+
description: NotRequired[str]
|
|
375
|
+
log_fingerprint_mismatch: NotRequired[bool]
|
|
376
|
+
r"""Log a warning if the client certificate authority (CA) fingerprint does not match the expected value. A mismatch prevents Cribl from receiving events from the Windows Event Forwarder."""
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
class InputWef(BaseModel):
|
|
380
|
+
type: Annotated[InputWefType, PlainValidator(validate_open_enum(False))]
|
|
381
|
+
|
|
382
|
+
subscriptions: List[Subscription]
|
|
383
|
+
r"""Subscriptions to events on forwarding endpoints"""
|
|
384
|
+
|
|
385
|
+
id: Optional[str] = None
|
|
386
|
+
r"""Unique ID for this input"""
|
|
387
|
+
|
|
388
|
+
disabled: Optional[bool] = False
|
|
389
|
+
|
|
390
|
+
pipeline: Optional[str] = None
|
|
391
|
+
r"""Pipeline to process data from this Source before sending it through the Routes"""
|
|
392
|
+
|
|
393
|
+
send_to_routes: Annotated[Optional[bool], pydantic.Field(alias="sendToRoutes")] = (
|
|
394
|
+
True
|
|
395
|
+
)
|
|
396
|
+
r"""Select whether to send data to Routes, or directly to Destinations."""
|
|
397
|
+
|
|
398
|
+
environment: Optional[str] = None
|
|
399
|
+
r"""Optionally, enable this config only on a specified Git branch. If empty, will be enabled everywhere."""
|
|
400
|
+
|
|
401
|
+
pq_enabled: Annotated[Optional[bool], pydantic.Field(alias="pqEnabled")] = False
|
|
402
|
+
r"""Use a disk queue to minimize data loss when connected services block. See [Cribl Docs](https://docs.cribl.io/stream/persistent-queues) for PQ defaults (Cribl-managed Cloud Workers) and configuration options (on-prem and hybrid Workers)."""
|
|
403
|
+
|
|
404
|
+
streamtags: Optional[List[str]] = None
|
|
405
|
+
r"""Tags for filtering and grouping in @{product}"""
|
|
406
|
+
|
|
407
|
+
connections: Optional[List[InputWefConnection]] = None
|
|
408
|
+
r"""Direct connections to Destinations, and optionally via a Pipeline or a Pack"""
|
|
409
|
+
|
|
410
|
+
pq: Optional[InputWefPq] = None
|
|
411
|
+
|
|
412
|
+
host: Optional[str] = "0.0.0.0"
|
|
413
|
+
r"""Address to bind on. Defaults to 0.0.0.0 (all addresses)."""
|
|
414
|
+
|
|
415
|
+
port: Optional[float] = 5986
|
|
416
|
+
r"""Port to listen on"""
|
|
417
|
+
|
|
418
|
+
auth_method: Annotated[
|
|
419
|
+
Annotated[
|
|
420
|
+
Optional[InputWefAuthenticationMethod],
|
|
421
|
+
PlainValidator(validate_open_enum(False)),
|
|
422
|
+
],
|
|
423
|
+
pydantic.Field(alias="authMethod"),
|
|
424
|
+
] = InputWefAuthenticationMethod.CLIENT_CERT
|
|
425
|
+
r"""How to authenticate incoming client connections"""
|
|
426
|
+
|
|
427
|
+
tls: Optional[MTLSSettings] = None
|
|
428
|
+
|
|
429
|
+
max_active_req: Annotated[Optional[float], pydantic.Field(alias="maxActiveReq")] = (
|
|
430
|
+
256
|
|
431
|
+
)
|
|
432
|
+
r"""Maximum number of active requests allowed per Worker Process. Set to 0 for unlimited. Caution: Increasing the limit above the default value, or setting it to unlimited, may degrade performance and reduce throughput."""
|
|
433
|
+
|
|
434
|
+
max_requests_per_socket: Annotated[
|
|
435
|
+
Optional[int], pydantic.Field(alias="maxRequestsPerSocket")
|
|
436
|
+
] = 0
|
|
437
|
+
r"""Maximum number of requests per socket before @{product} instructs the client to close the connection. Default is 0 (unlimited)."""
|
|
438
|
+
|
|
439
|
+
enable_proxy_header: Annotated[
|
|
440
|
+
Optional[bool], pydantic.Field(alias="enableProxyHeader")
|
|
441
|
+
] = False
|
|
442
|
+
r"""Preserve the client’s original IP address in the __srcIpPort field when connecting through an HTTP proxy that supports the X-Forwarded-For header. This does not apply to TCP-layer Proxy Protocol v1/v2."""
|
|
443
|
+
|
|
444
|
+
capture_headers: Annotated[
|
|
445
|
+
Optional[bool], pydantic.Field(alias="captureHeaders")
|
|
446
|
+
] = False
|
|
447
|
+
r"""Add request headers to events in the __headers field"""
|
|
448
|
+
|
|
449
|
+
keep_alive_timeout: Annotated[
|
|
450
|
+
Optional[float], pydantic.Field(alias="keepAliveTimeout")
|
|
451
|
+
] = 90
|
|
452
|
+
r"""After the last response is sent, @{product} will wait this long for additional data before closing the socket connection. Minimum 1 second, maximum 600 seconds (10 minutes)."""
|
|
453
|
+
|
|
454
|
+
enable_health_check: Annotated[
|
|
455
|
+
Optional[bool], pydantic.Field(alias="enableHealthCheck")
|
|
456
|
+
] = False
|
|
457
|
+
r"""Expose the /cribl_health endpoint, which returns 200 OK when this Source is healthy"""
|
|
458
|
+
|
|
459
|
+
ip_allowlist_regex: Annotated[
|
|
460
|
+
Optional[str], pydantic.Field(alias="ipAllowlistRegex")
|
|
461
|
+
] = "/.*/"
|
|
462
|
+
r"""Messages from matched IP addresses will be processed, unless also matched by the denylist"""
|
|
463
|
+
|
|
464
|
+
ip_denylist_regex: Annotated[
|
|
465
|
+
Optional[str], pydantic.Field(alias="ipDenylistRegex")
|
|
466
|
+
] = "/^$/"
|
|
467
|
+
r"""Messages from matched IP addresses will be ignored. This takes precedence over the allowlist."""
|
|
468
|
+
|
|
469
|
+
socket_timeout: Annotated[
|
|
470
|
+
Optional[float], pydantic.Field(alias="socketTimeout")
|
|
471
|
+
] = 0
|
|
472
|
+
r"""How long @{product} should wait before assuming that an inactive socket has timed out. To wait forever, set to 0."""
|
|
473
|
+
|
|
474
|
+
ca_fingerprint: Annotated[Optional[str], pydantic.Field(alias="caFingerprint")] = (
|
|
475
|
+
None
|
|
476
|
+
)
|
|
477
|
+
r"""SHA1 fingerprint expected by the client, if it does not match the first certificate in the configured CA chain"""
|
|
478
|
+
|
|
479
|
+
keytab: Optional[str] = None
|
|
480
|
+
r"""Path to the keytab file containing the service principal credentials. @{product} will use `/etc/krb5.keytab` if not provided."""
|
|
481
|
+
|
|
482
|
+
principal: Optional[str] = None
|
|
483
|
+
r"""Kerberos principal used for authentication, typically in the form HTTP/<hostname>@<REALM>"""
|
|
484
|
+
|
|
485
|
+
allow_machine_id_mismatch: Annotated[
|
|
486
|
+
Optional[bool], pydantic.Field(alias="allowMachineIdMismatch")
|
|
487
|
+
] = False
|
|
488
|
+
r"""Allow events to be ingested even if their MachineID does not match the client certificate CN"""
|
|
489
|
+
|
|
490
|
+
metadata: Optional[List[InputWefMetadatum]] = None
|
|
491
|
+
r"""Fields to add to events from this input"""
|
|
492
|
+
|
|
493
|
+
description: Optional[str] = None
|
|
494
|
+
|
|
495
|
+
log_fingerprint_mismatch: Annotated[
|
|
496
|
+
Optional[bool], pydantic.Field(alias="logFingerprintMismatch")
|
|
497
|
+
] = False
|
|
498
|
+
r"""Log a warning if the client certificate authority (CA) fingerprint does not match the expected value. A mismatch prevents Cribl from receiving events from the Windows Event Forwarder."""
|