55
66from __future__ import annotations
77
8- from typing import Optional
8+ from types import MappingProxyType
9+ from typing import Any , Optional , Union
910
10- from pydantic import BaseModel , ConfigDict , field_validator , model_validator
11+ from pydantic import BaseModel , ConfigDict , Field , field_validator , model_validator
1112
1213from datadog_checks .base .utils .functions import identity
1314from datadog_checks .base .utils .models import validation
1415
1516from . import defaults , validators
1617
1718
19+ class AuthToken (BaseModel ):
20+ model_config = ConfigDict (
21+ arbitrary_types_allowed = True ,
22+ frozen = True ,
23+ )
24+ reader : Optional [MappingProxyType [str , Any ]] = None
25+ writer : Optional [MappingProxyType [str , Any ]] = None
26+
27+
28+ class ExtraMetrics (BaseModel ):
29+ model_config = ConfigDict (
30+ arbitrary_types_allowed = True ,
31+ extra = 'allow' ,
32+ frozen = True ,
33+ )
34+ name : Optional [str ] = None
35+ type : Optional [str ] = None
36+
37+
1838class MetricPatterns (BaseModel ):
1939 model_config = ConfigDict (
2040 arbitrary_types_allowed = True ,
@@ -24,34 +44,125 @@ class MetricPatterns(BaseModel):
2444 include : Optional [tuple [str , ...]] = None
2545
2646
47+ class Metrics (BaseModel ):
48+ model_config = ConfigDict (
49+ arbitrary_types_allowed = True ,
50+ extra = 'allow' ,
51+ frozen = True ,
52+ )
53+ name : Optional [str ] = None
54+ type : Optional [str ] = None
55+
56+
57+ class Proxy (BaseModel ):
58+ model_config = ConfigDict (
59+ arbitrary_types_allowed = True ,
60+ frozen = True ,
61+ )
62+ http : Optional [str ] = None
63+ https : Optional [str ] = None
64+ no_proxy : Optional [tuple [str , ...]] = None
65+
66+
67+ class ShareLabels (BaseModel ):
68+ model_config = ConfigDict (
69+ arbitrary_types_allowed = True ,
70+ frozen = True ,
71+ )
72+ labels : Optional [tuple [str , ...]] = None
73+ match : Optional [tuple [str , ...]] = None
74+
75+
2776class InstanceConfig (BaseModel ):
2877 model_config = ConfigDict (
2978 validate_default = True ,
3079 arbitrary_types_allowed = True ,
3180 frozen = True ,
3281 )
82+ allow_redirects : Optional [bool ] = None
83+ auth_token : Optional [AuthToken ] = None
84+ auth_type : Optional [str ] = None
85+ aws_host : Optional [str ] = None
86+ aws_region : Optional [str ] = None
87+ aws_service : Optional [str ] = None
88+ cache_metric_wildcards : Optional [bool ] = None
89+ cache_shared_labels : Optional [bool ] = None
90+ collect_counters_with_distributions : Optional [bool ] = None
91+ collect_histogram_buckets : Optional [bool ] = None
92+ connect_timeout : Optional [float ] = None
3393 disable_generic_tags : Optional [bool ] = None
3494 empty_default_hostname : Optional [bool ] = None
95+ enable_health_service_check : Optional [bool ] = None
96+ exclude_labels : Optional [tuple [str , ...]] = None
97+ exclude_metrics : Optional [tuple [str , ...]] = None
98+ exclude_metrics_by_labels : Optional [MappingProxyType [str , Union [bool , tuple [str , ...]]]] = None
99+ extra_headers : Optional [MappingProxyType [str , Any ]] = None
100+ extra_metrics : Optional [tuple [Union [str , MappingProxyType [str , Union [str , ExtraMetrics ]]], ...]] = None
101+ headers : Optional [MappingProxyType [str , Any ]] = None
102+ histogram_buckets_as_distributions : Optional [bool ] = None
103+ hostname_format : Optional [str ] = None
104+ hostname_label : Optional [str ] = None
105+ ignore_connection_errors : Optional [bool ] = None
106+ ignore_tags : Optional [tuple [str , ...]] = None
107+ include_labels : Optional [tuple [str , ...]] = None
108+ kerberos_auth : Optional [str ] = None
109+ kerberos_cache : Optional [str ] = None
110+ kerberos_delegate : Optional [bool ] = None
111+ kerberos_force_initiate : Optional [bool ] = None
112+ kerberos_hostname : Optional [str ] = None
113+ kerberos_keytab : Optional [str ] = None
114+ kerberos_principal : Optional [str ] = None
115+ log_requests : Optional [bool ] = None
35116 metric_patterns : Optional [MetricPatterns ] = None
117+ metrics : Optional [tuple [Union [str , MappingProxyType [str , Union [str , Metrics ]]], ...]] = None
36118 min_collection_interval : Optional [float ] = None
119+ namespace : Optional [str ] = Field (None , pattern = '\\ w*' )
120+ non_cumulative_histogram_buckets : Optional [bool ] = None
121+ ntlm_domain : Optional [str ] = None
122+ openmetrics_endpoint : str
123+ password : Optional [str ] = None
124+ persist_connections : Optional [bool ] = None
125+ proxy : Optional [Proxy ] = None
126+ raw_line_filters : Optional [tuple [str , ...]] = None
127+ raw_metric_prefix : Optional [str ] = None
128+ read_timeout : Optional [float ] = None
129+ rename_labels : Optional [MappingProxyType [str , Any ]] = None
130+ request_size : Optional [float ] = None
37131 service : Optional [str ] = None
132+ share_labels : Optional [MappingProxyType [str , Union [bool , ShareLabels ]]] = None
133+ skip_proxy : Optional [bool ] = None
134+ tag_by_endpoint : Optional [bool ] = None
38135 tags : Optional [tuple [str , ...]] = None
136+ telemetry : Optional [bool ] = None
137+ timeout : Optional [float ] = None
138+ tls_ca_cert : Optional [str ] = None
139+ tls_cert : Optional [str ] = None
140+ tls_ciphers : Optional [tuple [str , ...]] = None
141+ tls_ignore_warning : Optional [bool ] = None
142+ tls_private_key : Optional [str ] = None
143+ tls_protocols_allowed : Optional [tuple [str , ...]] = None
144+ tls_use_host_header : Optional [bool ] = None
145+ tls_verify : Optional [bool ] = None
146+ use_latest_spec : Optional [bool ] = None
147+ use_legacy_auth_encoding : Optional [bool ] = None
148+ use_process_start_time : Optional [bool ] = None
149+ username : Optional [str ] = None
39150
40- @model_validator (mode = " before" )
151+ @model_validator (mode = ' before' )
41152 def _initial_validation (cls , values ):
42- return validation .core .initialize_config (getattr (validators , " initialize_instance" , identity )(values ))
153+ return validation .core .initialize_config (getattr (validators , ' initialize_instance' , identity )(values ))
43154
44- @field_validator ("*" , mode = " before" )
155+ @field_validator ('*' , mode = ' before' )
45156 def _validate (cls , value , info ):
46157 field = cls .model_fields [info .field_name ]
47158 field_name = field .alias or info .field_name
48- if field_name in info .context [" configured_fields" ]:
49- value = getattr (validators , f" instance_{ info .field_name } " , identity )(value , field = field )
159+ if field_name in info .context [' configured_fields' ]:
160+ value = getattr (validators , f' instance_{ info .field_name } ' , identity )(value , field = field )
50161 else :
51- value = getattr (defaults , f" instance_{ info .field_name } " , lambda : value )()
162+ value = getattr (defaults , f' instance_{ info .field_name } ' , lambda : value )()
52163
53164 return validation .utils .make_immutable (value )
54165
55- @model_validator (mode = " after" )
166+ @model_validator (mode = ' after' )
56167 def _final_validation (cls , model ):
57- return validation .core .check_model (getattr (validators , " check_instance" , identity )(model ))
168+ return validation .core .check_model (getattr (validators , ' check_instance' , identity )(model ))
0 commit comments