1use super::catalog;
2use super::config_entry;
3use super::health;
4use lazy_static::lazy_static;
5use serde_derive::{Deserialize, Serialize};
6use serde_json::Value;
7use std::collections::HashMap;
8
9type ServiceKind = String;
11
12lazy_static! {
13 pub static ref SERVICE_KIND_TYPICAL: ServiceKind = {
18 String::new()
19 };
20 pub static ref SERVICE_KIND_CONNECT_PROXY: ServiceKind = {
24 String::from("connect-proxy")
25 };
26
27 pub static ref SERVICE_KIND_MESH_GATEWAY: ServiceKind = {
31 String::from("mesh-gateway")
32 };
33
34 pub static ref SERVICE_KIND_TERMINATING_GATEWAY: ServiceKind = {
37 String::from("terminating-gateway")
38 };
39}
40
41type UpstreamDestType = String;
43
44lazy_static! {
45 pub static ref UPSTREAM_DEST_TYPE_SERVICE: UpstreamDestType = {
47 String::from("service")
48 };
49
50 pub static ref UPSTREAM_DEST_TYPE_PREPARED_QUERY: UpstreamDestType = {
52 String::from("prepared_query")
53 };
54}
55
56#[derive(Default, Debug, Clone, Serialize, Deserialize)]
58#[allow(non_snake_case)]
59pub struct AgentCheck {
60 pub Node: Option<String>,
61 pub CheckID: Option<String>,
62 pub Name: Option<String>,
63 pub Status: Option<String>,
64 pub Notes: Option<String>,
65 pub Output: Option<String>,
66 pub ServiceID: Option<String>,
67 pub ServiceName: Option<String>,
68 pub Type: Option<String>,
69 pub Definition: Option<health::HealthCheckDefinition>,
70 pub Namespace: String,
71}
72
73#[derive(Default, Debug, Clone, Serialize, Deserialize)]
75pub struct Filter {
76 pub filter: String,
77}
78
79#[derive(Default, Debug, Clone, Serialize, Deserialize)]
81#[allow(non_snake_case)]
82pub struct AgentWeights {
83 pub Passing: Option<usize>,
84 pub Warning: Option<usize>,
85}
86
87#[derive(Default, Debug, Clone, Serialize, Deserialize)]
89#[allow(non_snake_case)]
90pub struct AgentService {
91 pub Kind: Option<ServiceKind>,
92 pub ID: Option<String>,
93 pub Service: Option<String>,
94 pub Tags: Option<Vec<String>>,
95 pub Meta: Option<HashMap<String, String>>,
96 pub Port: Option<usize>,
97 pub Address: Option<String>,
98 pub TaggedAddresses: Option<HashMap<String, catalog::ServiceAddress>>,
99 pub Weights: Option<AgentWeights>,
100 pub EnableTagOverride: Option<bool>,
101 pub CreateIndex: Option<u64>,
102 pub ModifyIndex: Option<u64>,
103 pub ContentHash: Option<String>,
104 pub Proxy: Option<AgentServiceConnectProxyConfig>,
105 pub Connect: Option<AgentServiceConnect>,
106 pub Namespace: Option<String>,
110 pub Datacenter: Option<String>,
112}
113
114#[derive(Default, Debug, Clone, Serialize, Deserialize)]
116#[allow(non_snake_case)]
117pub struct AgentServiceChecksInfo {
118 pub AggregatedStatus: Option<String>,
119 pub Service: Option<AgentService>,
120 pub Checks: Option<health::HealthChecks>,
121}
122
123#[derive(Default, Debug, Clone, Serialize, Deserialize)]
125#[allow(non_snake_case)]
126pub struct AgentServiceConnect {
127 pub Native: Option<bool>,
128 pub SidecarService: Box<Option<AgentServiceRegistration>>,
129}
130
131#[derive(Default, Debug, Clone, Serialize, Deserialize)]
134#[allow(non_snake_case)]
135pub struct AgentServiceConnectProxyConfig {
136 pub DestinationServiceName: Option<String>,
137 pub DestinationServiceID: Option<String>,
138 pub LocalServiceAddress: Option<String>,
139 pub LocalServicePort: Option<String>,
140 pub Mode: Option<config_entry::ProxyMode>,
141 pub TransparentProxy: Option<String>,
142 pub Config: Option<HashMap<String, Value>>,
143 pub Upstreams: Option<Vec<Upstream>>,
144 pub MeshGateway: Option<config_entry::MeshGatewayConfig>,
145 pub Expose: Option<config_entry::ExposeConfig>,
146}
147
148#[derive(Default, Debug, Clone, Serialize, Deserialize)]
150#[allow(non_snake_case)]
151pub struct AgentServiceRegistration {
152 pub Kind: Option<ServiceKind>,
153 pub ID: Option<String>,
154 pub Name: Option<String>,
155 pub Tags: Option<Vec<String>>,
156 pub Port: Option<usize>,
157 pub Address: Option<String>,
158 pub TaggedAddresses: Option<HashMap<String, catalog::ServiceAddress>>,
159 pub EnableTagOverride: Option<bool>,
160 pub Meta: Option<HashMap<String, String>>,
161 pub Weights: Option<AgentWeights>,
162 pub Check: Option<AgentServiceCheck>,
163 pub Checks: Option<AgentServiceChecks>,
164 pub Proxy: Option<AgentServiceConnectProxyConfig>,
165 pub Connect: Option<AgentServiceConnect>,
166 }
168
169#[derive(Default, Debug, Clone, Serialize, Deserialize)]
171#[allow(non_snake_case)]
172pub struct ServiceRegisterOpts {
173 #[serde(rename = "replace-existing-checks")]
177 pub ReplaceExistingChecks: bool,
178}
179
180#[derive(Default, Debug, Clone, Serialize, Deserialize)]
182#[allow(non_snake_case)]
183pub struct Upstream {
184 pub DestinationType: Option<UpstreamDestType>,
185 pub DestinationNamespace: Option<String>,
186 pub DestinationName: Option<String>,
187 pub Datacenter: Option<String>,
188 pub LocalBindAddress: Option<String>,
189 pub LocalBindPort: Option<usize>,
190 pub Config: HashMap<String, Value>,
191 pub MeshGateway: Option<config_entry::MeshGatewayConfig>,
192 pub CentrallyConfigured: Option<bool>,
193}
194type AgentServiceChecks = Vec<AgentServiceCheck>;
196
197#[derive(Default, Debug, Clone, Serialize, Deserialize)]
199#[allow(non_snake_case)]
200pub struct AgentServiceCheck {
201 pub CheckID: Option<String>,
202 pub Name: Option<String>,
203 pub Args: Option<Vec<String>>,
204 pub DockerContainerID: Option<String>,
205 pub Shell: Option<String>,
207 pub Interval: Option<String>,
208 pub Timeout: Option<String>,
209 pub TTL: Option<String>,
210 pub HTTP: Option<String>,
211 pub Header: Option<HashMap<String, String>>,
212 pub Method: Option<String>,
213 pub Body: Option<String>,
214 pub TCP: Option<String>,
215 pub Status: Option<String>,
216 pub Notes: Option<String>,
217 pub TLSServerName: Option<String>,
218 pub TLSSkipVerify: Option<bool>,
219 pub GRPC: Option<String>,
220 pub GRPCUseTLS: Option<bool>,
221 pub AliasNode: Option<String>,
222 pub AliasService: Option<String>,
223 pub SuccessBeforePassing: Option<i64>,
224 pub FailuresBeforeCritical: Option<i64>,
225
226 pub DeregisterCriticalServiceAfter: Option<String>,
233}
234
235#[derive(Default, Debug, Clone, Serialize, Deserialize)]
237#[allow(non_snake_case)]
238pub struct MetricsInfo {
239 pub Timestamp: Option<String>,
240 pub Gauges: Option<Vec<GaugeValue>>,
241 pub Points: Option<Vec<PointValue>>,
242 pub Counters: Option<Vec<SampledValue>>,
243 pub Samples: Option<Vec<SampledValue>>,
244}
245
246#[derive(Default, Debug, Clone, Serialize, Deserialize)]
249#[allow(non_snake_case)]
250pub struct GaugeValue {
251 pub Name: Option<String>,
252 pub Value: Option<f32>,
253 pub Labels: Option<HashMap<String, String>>,
254}
255
256#[derive(Default, Debug, Clone, Serialize, Deserialize)]
258#[allow(non_snake_case)]
259pub struct PointValue {
260 pub Name: Option<String>,
261 pub Points: Option<Vec<f32>>,
262}
263
264#[derive(Default, Debug, Clone, Serialize, Deserialize)]
267#[allow(non_snake_case)]
268pub struct SampledValue {
269 pub Name: Option<String>,
270 pub Count: Option<i64>,
271 pub Sum: Option<f64>,
272 pub Min: Option<f64>,
273 pub Max: Option<f64>,
274 pub Mean: Option<f64>,
275 pub Stddev: Option<f64>,
276 pub Labels: Option<HashMap<String, String>>,
277}