basaltic-sdk-python 0.1.1__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.
Files changed (47) hide show
  1. basaltic/__init__.py +26 -0
  2. basaltic/_client.py +136 -0
  3. basaltic/_common.py +284 -0
  4. basaltic/_transport.py +196 -0
  5. basaltic/_version.py +3 -0
  6. basaltic/auth.py +231 -0
  7. basaltic/client.py +144 -0
  8. basaltic/config.py +151 -0
  9. basaltic/errors.py +73 -0
  10. basaltic/models/__init__.py +17 -0
  11. basaltic/models/audit.py +85 -0
  12. basaltic/models/billing.py +284 -0
  13. basaltic/models/catalog.py +35 -0
  14. basaltic/models/certificate.py +127 -0
  15. basaltic/models/compute.py +905 -0
  16. basaltic/models/dns.py +256 -0
  17. basaltic/models/iam.py +736 -0
  18. basaltic/models/kms.py +157 -0
  19. basaltic/models/loadbalancer.py +574 -0
  20. basaltic/models/network.py +985 -0
  21. basaltic/models/quota.py +30 -0
  22. basaltic/models/secrets.py +136 -0
  23. basaltic/models/storage.py +789 -0
  24. basaltic/models/telemetry.py +393 -0
  25. basaltic/models/workspace.py +734 -0
  26. basaltic/py.typed +0 -0
  27. basaltic/response.py +152 -0
  28. basaltic/services/__init__.py +1 -0
  29. basaltic/services/audit.py +211 -0
  30. basaltic/services/billing.py +777 -0
  31. basaltic/services/catalog.py +172 -0
  32. basaltic/services/certificate.py +395 -0
  33. basaltic/services/compute.py +2395 -0
  34. basaltic/services/dns.py +1079 -0
  35. basaltic/services/iam.py +3405 -0
  36. basaltic/services/kms.py +742 -0
  37. basaltic/services/loadbalancer.py +1727 -0
  38. basaltic/services/network.py +4691 -0
  39. basaltic/services/quota.py +75 -0
  40. basaltic/services/secrets.py +550 -0
  41. basaltic/services/storage.py +3059 -0
  42. basaltic/services/telemetry.py +1316 -0
  43. basaltic/services/workspace.py +3899 -0
  44. basaltic_sdk_python-0.1.1.dist-info/METADATA +211 -0
  45. basaltic_sdk_python-0.1.1.dist-info/RECORD +47 -0
  46. basaltic_sdk_python-0.1.1.dist-info/WHEEL +4 -0
  47. basaltic_sdk_python-0.1.1.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,1316 @@
1
+ """Generated typed API methods; do not edit."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import AsyncIterator, Iterator
6
+ from typing import cast
7
+
8
+ from .._common import UNSET, AsyncBinaryBody, BinaryBody, Operation, Unset
9
+ from .._transport import AsyncTransport, SyncTransport
10
+ from ..config import RequestOptions
11
+ from ..models import telemetry as m
12
+ from ..response import (
13
+ ApiResponse,
14
+ Page,
15
+ aiterate_pages,
16
+ aresolve_reference,
17
+ iterate_pages,
18
+ reference_scope,
19
+ resolve_reference,
20
+ )
21
+
22
+ _OPS = {
23
+ "createLogGroup": Operation(
24
+ id="createLogGroup",
25
+ method="POST",
26
+ path="/v1/log-groups",
27
+ authenticated=True,
28
+ requiredQuery=[],
29
+ requiredHeaders=[],
30
+ queryEncoding={},
31
+ bodyRequired=True,
32
+ contentType="application/json",
33
+ accept="application/json",
34
+ ),
35
+ "deleteLogGroup": Operation(
36
+ id="deleteLogGroup",
37
+ method="DELETE",
38
+ path="/v1/log-groups/{id}",
39
+ authenticated=True,
40
+ requiredQuery=[],
41
+ requiredHeaders=[],
42
+ queryEncoding={},
43
+ bodyRequired=False,
44
+ contentType="",
45
+ accept="application/json",
46
+ ),
47
+ "deleteTraceSettings": Operation(
48
+ id="deleteTraceSettings",
49
+ method="DELETE",
50
+ path="/v1/trace-settings",
51
+ authenticated=True,
52
+ requiredQuery=[],
53
+ requiredHeaders=[],
54
+ queryEncoding={},
55
+ bodyRequired=False,
56
+ contentType="",
57
+ accept="application/json",
58
+ ),
59
+ "getLog": Operation(
60
+ id="getLog",
61
+ method="GET",
62
+ path="/v1/logs/{log_id}",
63
+ authenticated=True,
64
+ requiredQuery=[],
65
+ requiredHeaders=[],
66
+ queryEncoding={},
67
+ bodyRequired=False,
68
+ contentType="",
69
+ accept="application/json",
70
+ ),
71
+ "getLogGroup": Operation(
72
+ id="getLogGroup",
73
+ method="GET",
74
+ path="/v1/log-groups/{id}",
75
+ authenticated=True,
76
+ requiredQuery=[],
77
+ requiredHeaders=[],
78
+ queryEncoding={},
79
+ bodyRequired=False,
80
+ contentType="",
81
+ accept="application/json",
82
+ ),
83
+ "getRetainedTelemetryPresence": Operation(
84
+ id="getRetainedTelemetryPresence",
85
+ method="GET",
86
+ path="/v1/trace-settings/retained-data",
87
+ authenticated=True,
88
+ requiredQuery=[],
89
+ requiredHeaders=[],
90
+ queryEncoding={},
91
+ bodyRequired=False,
92
+ contentType="",
93
+ accept="application/json",
94
+ ),
95
+ "getTrace": Operation(
96
+ id="getTrace",
97
+ method="GET",
98
+ path="/v1/traces/{trace_id}",
99
+ authenticated=True,
100
+ requiredQuery=[],
101
+ requiredHeaders=[],
102
+ queryEncoding={},
103
+ bodyRequired=False,
104
+ contentType="",
105
+ accept="application/json",
106
+ ),
107
+ "getTraceSettings": Operation(
108
+ id="getTraceSettings",
109
+ method="GET",
110
+ path="/v1/trace-settings",
111
+ authenticated=True,
112
+ requiredQuery=[],
113
+ requiredHeaders=[],
114
+ queryEncoding={},
115
+ bodyRequired=False,
116
+ contentType="",
117
+ accept="application/json",
118
+ ),
119
+ "ingestLogs": Operation(
120
+ id="ingestLogs",
121
+ method="POST",
122
+ path="/v1/logs",
123
+ authenticated=True,
124
+ requiredQuery=[],
125
+ requiredHeaders=[],
126
+ queryEncoding={},
127
+ bodyRequired=True,
128
+ contentType="application/json",
129
+ accept="application/json",
130
+ ),
131
+ "ingestSpans": Operation(
132
+ id="ingestSpans",
133
+ method="POST",
134
+ path="/v1/spans",
135
+ authenticated=True,
136
+ requiredQuery=[],
137
+ requiredHeaders=[],
138
+ queryEncoding={},
139
+ bodyRequired=True,
140
+ contentType="application/json",
141
+ accept="application/json",
142
+ ),
143
+ "listLogGroups": Operation(
144
+ id="listLogGroups",
145
+ method="GET",
146
+ path="/v1/log-groups",
147
+ authenticated=True,
148
+ requiredQuery=[],
149
+ requiredHeaders=[],
150
+ queryEncoding={
151
+ "name": {"style": "form", "explode": True},
152
+ "crn": {"style": "form", "explode": True},
153
+ "limit": {"style": "form", "explode": True},
154
+ "marker": {"style": "form", "explode": True},
155
+ },
156
+ bodyRequired=False,
157
+ contentType="",
158
+ accept="application/json",
159
+ itemsKey="log_groups",
160
+ ),
161
+ "listMetricNames": Operation(
162
+ id="listMetricNames",
163
+ method="GET",
164
+ path="/v1/metrics/names",
165
+ authenticated=True,
166
+ requiredQuery=["start", "end"],
167
+ requiredHeaders=[],
168
+ queryEncoding={
169
+ "start": {"style": "form", "explode": True},
170
+ "end": {"style": "form", "explode": True},
171
+ },
172
+ bodyRequired=False,
173
+ contentType="",
174
+ accept="application/json",
175
+ itemsKey="data",
176
+ ),
177
+ "listMetricNamesPost": Operation(
178
+ id="listMetricNamesPost",
179
+ method="POST",
180
+ path="/v1/metrics/names",
181
+ authenticated=True,
182
+ requiredQuery=[],
183
+ requiredHeaders=[],
184
+ queryEncoding={},
185
+ bodyRequired=False,
186
+ contentType="application/x-www-form-urlencoded",
187
+ accept="application/json",
188
+ ),
189
+ "listMetricSeries": Operation(
190
+ id="listMetricSeries",
191
+ method="GET",
192
+ path="/v1/metrics/series",
193
+ authenticated=True,
194
+ requiredQuery=["metric", "start", "end"],
195
+ requiredHeaders=[],
196
+ queryEncoding={
197
+ "metric": {"style": "form", "explode": True},
198
+ "start": {"style": "form", "explode": True},
199
+ "end": {"style": "form", "explode": True},
200
+ },
201
+ bodyRequired=False,
202
+ contentType="",
203
+ accept="application/json",
204
+ ),
205
+ "listMetricSeriesPost": Operation(
206
+ id="listMetricSeriesPost",
207
+ method="POST",
208
+ path="/v1/metrics/series",
209
+ authenticated=True,
210
+ requiredQuery=[],
211
+ requiredHeaders=[],
212
+ queryEncoding={},
213
+ bodyRequired=False,
214
+ contentType="application/x-www-form-urlencoded",
215
+ accept="application/json",
216
+ ),
217
+ "putTraceSettings": Operation(
218
+ id="putTraceSettings",
219
+ method="PUT",
220
+ path="/v1/trace-settings",
221
+ authenticated=True,
222
+ requiredQuery=[],
223
+ requiredHeaders=[],
224
+ queryEncoding={},
225
+ bodyRequired=True,
226
+ contentType="application/json",
227
+ accept="application/json",
228
+ ),
229
+ "queryMetricsInstant": Operation(
230
+ id="queryMetricsInstant",
231
+ method="GET",
232
+ path="/v1/metrics/query",
233
+ authenticated=True,
234
+ requiredQuery=["metric", "agg"],
235
+ requiredHeaders=[],
236
+ queryEncoding={
237
+ "metric": {"style": "form", "explode": True},
238
+ "agg": {"style": "form", "explode": True},
239
+ "match[]": {"style": "form", "explode": True},
240
+ "by[]": {"style": "form", "explode": True},
241
+ "step": {"style": "form", "explode": True},
242
+ "time": {"style": "form", "explode": True},
243
+ },
244
+ bodyRequired=False,
245
+ contentType="",
246
+ accept="application/json",
247
+ ),
248
+ "queryMetricsInstantPost": Operation(
249
+ id="queryMetricsInstantPost",
250
+ method="POST",
251
+ path="/v1/metrics/query",
252
+ authenticated=True,
253
+ requiredQuery=[],
254
+ requiredHeaders=[],
255
+ queryEncoding={},
256
+ bodyRequired=False,
257
+ contentType="application/x-www-form-urlencoded",
258
+ accept="application/json",
259
+ ),
260
+ "queryMetricsRange": Operation(
261
+ id="queryMetricsRange",
262
+ method="GET",
263
+ path="/v1/metrics/query_range",
264
+ authenticated=True,
265
+ requiredQuery=["metric", "agg", "start", "end"],
266
+ requiredHeaders=[],
267
+ queryEncoding={
268
+ "metric": {"style": "form", "explode": True},
269
+ "agg": {"style": "form", "explode": True},
270
+ "match[]": {"style": "form", "explode": True},
271
+ "by[]": {"style": "form", "explode": True},
272
+ "start": {"style": "form", "explode": True},
273
+ "end": {"style": "form", "explode": True},
274
+ "step": {"style": "form", "explode": True},
275
+ },
276
+ bodyRequired=False,
277
+ contentType="",
278
+ accept="application/json",
279
+ ),
280
+ "queryMetricsRangePost": Operation(
281
+ id="queryMetricsRangePost",
282
+ method="POST",
283
+ path="/v1/metrics/query_range",
284
+ authenticated=True,
285
+ requiredQuery=[],
286
+ requiredHeaders=[],
287
+ queryEncoding={},
288
+ bodyRequired=False,
289
+ contentType="application/x-www-form-urlencoded",
290
+ accept="application/json",
291
+ ),
292
+ "searchLogs": Operation(
293
+ id="searchLogs",
294
+ method="GET",
295
+ path="/v1/logs",
296
+ authenticated=True,
297
+ requiredQuery=["from", "to"],
298
+ requiredHeaders=[],
299
+ queryEncoding={
300
+ "from": {"style": "form", "explode": True},
301
+ "to": {"style": "form", "explode": True},
302
+ "log_group": {"style": "form", "explode": True},
303
+ "log_stream": {"style": "form", "explode": True},
304
+ "min_severity": {"style": "form", "explode": True},
305
+ "region": {"style": "form", "explode": True},
306
+ "q": {"style": "form", "explode": True},
307
+ "trace_id": {"style": "form", "explode": True},
308
+ "limit": {"style": "form", "explode": True},
309
+ "marker": {"style": "form", "explode": True},
310
+ },
311
+ bodyRequired=False,
312
+ contentType="",
313
+ accept="application/json",
314
+ ),
315
+ "searchTraces": Operation(
316
+ id="searchTraces",
317
+ method="GET",
318
+ path="/v1/traces",
319
+ authenticated=True,
320
+ requiredQuery=["from", "to"],
321
+ requiredHeaders=[],
322
+ queryEncoding={
323
+ "from": {"style": "form", "explode": True},
324
+ "to": {"style": "form", "explode": True},
325
+ "service": {"style": "form", "explode": True},
326
+ "operation": {"style": "form", "explode": True},
327
+ "status_code": {"style": "form", "explode": True},
328
+ "min_duration_ms": {"style": "form", "explode": True},
329
+ "limit": {"style": "form", "explode": True},
330
+ "marker": {"style": "form", "explode": True},
331
+ },
332
+ bodyRequired=False,
333
+ contentType="",
334
+ accept="application/json",
335
+ ),
336
+ "updateLogGroup": Operation(
337
+ id="updateLogGroup",
338
+ method="PATCH",
339
+ path="/v1/log-groups/{id}",
340
+ authenticated=True,
341
+ requiredQuery=[],
342
+ requiredHeaders=[],
343
+ queryEncoding={},
344
+ bodyRequired=True,
345
+ contentType="application/json",
346
+ accept="application/json",
347
+ ),
348
+ "writeMetrics": Operation(
349
+ id="writeMetrics",
350
+ method="POST",
351
+ path="/v1/metrics/write",
352
+ authenticated=True,
353
+ requiredQuery=[],
354
+ requiredHeaders=[],
355
+ queryEncoding={},
356
+ bodyRequired=True,
357
+ contentType="application/x-protobuf",
358
+ accept="application/json",
359
+ ),
360
+ }
361
+
362
+
363
+ class TelemetryService:
364
+ def __init__(self, transport: SyncTransport) -> None:
365
+ self._transport = transport
366
+
367
+ def create_log_group(
368
+ self, body: m.CreateLogGroupBody, *, options: RequestOptions | None = None
369
+ ) -> ApiResponse[m.CreateLogGroupResponse]:
370
+ "Create a log group"
371
+ return cast(
372
+ ApiResponse[m.CreateLogGroupResponse],
373
+ self._transport.request(
374
+ "telemetry",
375
+ "https://telemetry.{region}.basaltic.sh",
376
+ _OPS["createLogGroup"],
377
+ "json",
378
+ {},
379
+ body,
380
+ None,
381
+ options,
382
+ ),
383
+ )
384
+
385
+ def delete_log_group(self, id: str, *, options: RequestOptions | None = None) -> None:
386
+ "Delete a log group"
387
+ return cast(
388
+ None,
389
+ self._transport.request(
390
+ "telemetry",
391
+ "https://telemetry.{region}.basaltic.sh",
392
+ _OPS["deleteLogGroup"],
393
+ "discard",
394
+ {"id": id},
395
+ UNSET,
396
+ None,
397
+ options,
398
+ ),
399
+ )
400
+
401
+ def delete_trace_settings(self, *, options: RequestOptions | None = None) -> None:
402
+ "Delete trace settings"
403
+ return cast(
404
+ None,
405
+ self._transport.request(
406
+ "telemetry",
407
+ "https://telemetry.{region}.basaltic.sh",
408
+ _OPS["deleteTraceSettings"],
409
+ "discard",
410
+ {},
411
+ UNSET,
412
+ None,
413
+ options,
414
+ ),
415
+ )
416
+
417
+ def get_log(
418
+ self, log_id: str, *, options: RequestOptions | None = None
419
+ ) -> ApiResponse[m.GetLogResponse]:
420
+ "Get a single log record by id"
421
+ return cast(
422
+ ApiResponse[m.GetLogResponse],
423
+ self._transport.request(
424
+ "telemetry",
425
+ "https://telemetry.{region}.basaltic.sh",
426
+ _OPS["getLog"],
427
+ "json",
428
+ {"log_id": log_id},
429
+ UNSET,
430
+ None,
431
+ options,
432
+ ),
433
+ )
434
+
435
+ def get_log_group(
436
+ self, id: str, *, options: RequestOptions | None = None
437
+ ) -> ApiResponse[m.GetLogGroupResponse]:
438
+ "Get a log group by id"
439
+ return cast(
440
+ ApiResponse[m.GetLogGroupResponse],
441
+ self._transport.request(
442
+ "telemetry",
443
+ "https://telemetry.{region}.basaltic.sh",
444
+ _OPS["getLogGroup"],
445
+ "json",
446
+ {"id": id},
447
+ UNSET,
448
+ None,
449
+ options,
450
+ ),
451
+ )
452
+
453
+ def get_log_group_by_reference(
454
+ self,
455
+ reference: str,
456
+ *,
457
+ scope: m.GetLogGroupScope | None = None,
458
+ options: RequestOptions | None = None,
459
+ ) -> ApiResponse[m.GetLogGroupResource]:
460
+ return cast(
461
+ ApiResponse[m.GetLogGroupResource],
462
+ resolve_reference(
463
+ reference,
464
+ lambda id: self.get_log_group(id, options=options),
465
+ lambda match: self.list_log_groups(
466
+ query=cast(
467
+ m.ListLogGroupsQuery, {**reference_scope(scope), **match, "limit": 2}
468
+ ),
469
+ options=options,
470
+ ),
471
+ True,
472
+ "log_group",
473
+ ),
474
+ )
475
+
476
+ def get_retained_telemetry_presence(
477
+ self, *, options: RequestOptions | None = None
478
+ ) -> ApiResponse[m.GetRetainedTelemetryPresenceResponse]:
479
+ "Check retained telemetry presence"
480
+ return cast(
481
+ ApiResponse[m.GetRetainedTelemetryPresenceResponse],
482
+ self._transport.request(
483
+ "telemetry",
484
+ "https://telemetry.{region}.basaltic.sh",
485
+ _OPS["getRetainedTelemetryPresence"],
486
+ "json",
487
+ {},
488
+ UNSET,
489
+ None,
490
+ options,
491
+ ),
492
+ )
493
+
494
+ def get_trace(
495
+ self, trace_id: str, *, options: RequestOptions | None = None
496
+ ) -> ApiResponse[m.GetTraceResponse]:
497
+ "Get all spans for a trace"
498
+ return cast(
499
+ ApiResponse[m.GetTraceResponse],
500
+ self._transport.request(
501
+ "telemetry",
502
+ "https://telemetry.{region}.basaltic.sh",
503
+ _OPS["getTrace"],
504
+ "json",
505
+ {"trace_id": trace_id},
506
+ UNSET,
507
+ None,
508
+ options,
509
+ ),
510
+ )
511
+
512
+ def get_trace_settings(
513
+ self, *, options: RequestOptions | None = None
514
+ ) -> ApiResponse[m.GetTraceSettingsResponse]:
515
+ "Get the caller account's trace settings"
516
+ return cast(
517
+ ApiResponse[m.GetTraceSettingsResponse],
518
+ self._transport.request(
519
+ "telemetry",
520
+ "https://telemetry.{region}.basaltic.sh",
521
+ _OPS["getTraceSettings"],
522
+ "json",
523
+ {},
524
+ UNSET,
525
+ None,
526
+ options,
527
+ ),
528
+ )
529
+
530
+ def ingest_logs(
531
+ self, body: m.IngestLogsBody, *, options: RequestOptions | None = None
532
+ ) -> ApiResponse[m.IngestLogsResponse]:
533
+ "Ingest a batch of log records"
534
+ return cast(
535
+ ApiResponse[m.IngestLogsResponse],
536
+ self._transport.request(
537
+ "telemetry",
538
+ "https://telemetry.{region}.basaltic.sh",
539
+ _OPS["ingestLogs"],
540
+ "json",
541
+ {},
542
+ body,
543
+ None,
544
+ options,
545
+ ),
546
+ )
547
+
548
+ def ingest_spans(
549
+ self, body: m.IngestSpansBody, *, options: RequestOptions | None = None
550
+ ) -> ApiResponse[m.IngestSpansResponse]:
551
+ "Ingest a batch of trace spans"
552
+ return cast(
553
+ ApiResponse[m.IngestSpansResponse],
554
+ self._transport.request(
555
+ "telemetry",
556
+ "https://telemetry.{region}.basaltic.sh",
557
+ _OPS["ingestSpans"],
558
+ "json",
559
+ {},
560
+ body,
561
+ None,
562
+ options,
563
+ ),
564
+ )
565
+
566
+ def list_log_groups(
567
+ self, *, query: m.ListLogGroupsQuery | None = None, options: RequestOptions | None = None
568
+ ) -> Page[m.ListLogGroupsResponse, m.ListLogGroupsItem]:
569
+ "List log groups (or look up one by name)"
570
+ return cast(
571
+ Page[m.ListLogGroupsResponse, m.ListLogGroupsItem],
572
+ self._transport.request(
573
+ "telemetry",
574
+ "https://telemetry.{region}.basaltic.sh",
575
+ _OPS["listLogGroups"],
576
+ "page",
577
+ {},
578
+ UNSET,
579
+ query,
580
+ options,
581
+ ),
582
+ )
583
+
584
+ def list_log_groups_all(
585
+ self, *, query: m.ListLogGroupsQuery | None = None, options: RequestOptions | None = None
586
+ ) -> Iterator[m.ListLogGroupsItem]:
587
+ return iterate_pages(
588
+ lambda marker: self.list_log_groups(
589
+ query=cast(m.ListLogGroupsQuery, {**(query or {}), "marker": marker}),
590
+ options=options,
591
+ ),
592
+ (query or {}).get("marker", ""),
593
+ )
594
+
595
+ def list_metric_names(
596
+ self, *, query: m.ListMetricNamesQuery, options: RequestOptions | None = None
597
+ ) -> Page[m.ListMetricNamesResponse, m.ListMetricNamesItem]:
598
+ "List the distinct metric names emitted in a time window"
599
+ return cast(
600
+ Page[m.ListMetricNamesResponse, m.ListMetricNamesItem],
601
+ self._transport.request(
602
+ "telemetry",
603
+ "https://telemetry.{region}.basaltic.sh",
604
+ _OPS["listMetricNames"],
605
+ "page",
606
+ {},
607
+ UNSET,
608
+ query,
609
+ options,
610
+ ),
611
+ )
612
+
613
+ def list_metric_names_post(
614
+ self,
615
+ body: m.ListMetricNamesPostBody | Unset = UNSET,
616
+ *,
617
+ options: RequestOptions | None = None,
618
+ ) -> ApiResponse[m.ListMetricNamesPostResponse]:
619
+ "List the distinct metric names emitted in a time window (form body)"
620
+ return cast(
621
+ ApiResponse[m.ListMetricNamesPostResponse],
622
+ self._transport.request(
623
+ "telemetry",
624
+ "https://telemetry.{region}.basaltic.sh",
625
+ _OPS["listMetricNamesPost"],
626
+ "json",
627
+ {},
628
+ body,
629
+ None,
630
+ options,
631
+ ),
632
+ )
633
+
634
+ def list_metric_series(
635
+ self, *, query: m.ListMetricSeriesQuery, options: RequestOptions | None = None
636
+ ) -> ApiResponse[m.ListMetricSeriesResponse]:
637
+ "List distinct label sets for a metric"
638
+ return cast(
639
+ ApiResponse[m.ListMetricSeriesResponse],
640
+ self._transport.request(
641
+ "telemetry",
642
+ "https://telemetry.{region}.basaltic.sh",
643
+ _OPS["listMetricSeries"],
644
+ "json",
645
+ {},
646
+ UNSET,
647
+ query,
648
+ options,
649
+ ),
650
+ )
651
+
652
+ def list_metric_series_post(
653
+ self,
654
+ body: m.ListMetricSeriesPostBody | Unset = UNSET,
655
+ *,
656
+ options: RequestOptions | None = None,
657
+ ) -> ApiResponse[m.ListMetricSeriesPostResponse]:
658
+ "List distinct label sets for a metric (form body)"
659
+ return cast(
660
+ ApiResponse[m.ListMetricSeriesPostResponse],
661
+ self._transport.request(
662
+ "telemetry",
663
+ "https://telemetry.{region}.basaltic.sh",
664
+ _OPS["listMetricSeriesPost"],
665
+ "json",
666
+ {},
667
+ body,
668
+ None,
669
+ options,
670
+ ),
671
+ )
672
+
673
+ def put_trace_settings(
674
+ self, body: m.PutTraceSettingsBody, *, options: RequestOptions | None = None
675
+ ) -> ApiResponse[m.PutTraceSettingsResponse]:
676
+ "Update the caller account's trace settings"
677
+ return cast(
678
+ ApiResponse[m.PutTraceSettingsResponse],
679
+ self._transport.request(
680
+ "telemetry",
681
+ "https://telemetry.{region}.basaltic.sh",
682
+ _OPS["putTraceSettings"],
683
+ "json",
684
+ {},
685
+ body,
686
+ None,
687
+ options,
688
+ ),
689
+ )
690
+
691
+ def query_metrics_instant(
692
+ self, *, query: m.QueryMetricsInstantQuery, options: RequestOptions | None = None
693
+ ) -> ApiResponse[m.QueryMetricsInstantResponse]:
694
+ "Instant structured metric query"
695
+ return cast(
696
+ ApiResponse[m.QueryMetricsInstantResponse],
697
+ self._transport.request(
698
+ "telemetry",
699
+ "https://telemetry.{region}.basaltic.sh",
700
+ _OPS["queryMetricsInstant"],
701
+ "json",
702
+ {},
703
+ UNSET,
704
+ query,
705
+ options,
706
+ ),
707
+ )
708
+
709
+ def query_metrics_instant_post(
710
+ self,
711
+ body: m.QueryMetricsInstantPostBody | Unset = UNSET,
712
+ *,
713
+ options: RequestOptions | None = None,
714
+ ) -> ApiResponse[m.QueryMetricsInstantPostResponse]:
715
+ "Instant structured metric query (form body)"
716
+ return cast(
717
+ ApiResponse[m.QueryMetricsInstantPostResponse],
718
+ self._transport.request(
719
+ "telemetry",
720
+ "https://telemetry.{region}.basaltic.sh",
721
+ _OPS["queryMetricsInstantPost"],
722
+ "json",
723
+ {},
724
+ body,
725
+ None,
726
+ options,
727
+ ),
728
+ )
729
+
730
+ def query_metrics_range(
731
+ self, *, query: m.QueryMetricsRangeQuery, options: RequestOptions | None = None
732
+ ) -> ApiResponse[m.QueryMetricsRangeResponse]:
733
+ "Range structured metric query"
734
+ return cast(
735
+ ApiResponse[m.QueryMetricsRangeResponse],
736
+ self._transport.request(
737
+ "telemetry",
738
+ "https://telemetry.{region}.basaltic.sh",
739
+ _OPS["queryMetricsRange"],
740
+ "json",
741
+ {},
742
+ UNSET,
743
+ query,
744
+ options,
745
+ ),
746
+ )
747
+
748
+ def query_metrics_range_post(
749
+ self,
750
+ body: m.QueryMetricsRangePostBody | Unset = UNSET,
751
+ *,
752
+ options: RequestOptions | None = None,
753
+ ) -> ApiResponse[m.QueryMetricsRangePostResponse]:
754
+ "Range structured metric query (form body)"
755
+ return cast(
756
+ ApiResponse[m.QueryMetricsRangePostResponse],
757
+ self._transport.request(
758
+ "telemetry",
759
+ "https://telemetry.{region}.basaltic.sh",
760
+ _OPS["queryMetricsRangePost"],
761
+ "json",
762
+ {},
763
+ body,
764
+ None,
765
+ options,
766
+ ),
767
+ )
768
+
769
+ def search_logs(
770
+ self, *, query: m.SearchLogsQuery, options: RequestOptions | None = None
771
+ ) -> ApiResponse[m.SearchLogsResponse]:
772
+ "Search log records"
773
+ return cast(
774
+ ApiResponse[m.SearchLogsResponse],
775
+ self._transport.request(
776
+ "telemetry",
777
+ "https://telemetry.{region}.basaltic.sh",
778
+ _OPS["searchLogs"],
779
+ "json",
780
+ {},
781
+ UNSET,
782
+ query,
783
+ options,
784
+ ),
785
+ )
786
+
787
+ def search_traces(
788
+ self, *, query: m.SearchTracesQuery, options: RequestOptions | None = None
789
+ ) -> ApiResponse[m.SearchTracesResponse]:
790
+ "List traces"
791
+ return cast(
792
+ ApiResponse[m.SearchTracesResponse],
793
+ self._transport.request(
794
+ "telemetry",
795
+ "https://telemetry.{region}.basaltic.sh",
796
+ _OPS["searchTraces"],
797
+ "json",
798
+ {},
799
+ UNSET,
800
+ query,
801
+ options,
802
+ ),
803
+ )
804
+
805
+ def update_log_group(
806
+ self, id: str, body: m.UpdateLogGroupBody, *, options: RequestOptions | None = None
807
+ ) -> ApiResponse[m.UpdateLogGroupResponse]:
808
+ "Update a log group"
809
+ return cast(
810
+ ApiResponse[m.UpdateLogGroupResponse],
811
+ self._transport.request(
812
+ "telemetry",
813
+ "https://telemetry.{region}.basaltic.sh",
814
+ _OPS["updateLogGroup"],
815
+ "json",
816
+ {"id": id},
817
+ body,
818
+ None,
819
+ options,
820
+ ),
821
+ )
822
+
823
+ def write_metrics(self, body: BinaryBody, *, options: RequestOptions | None = None) -> None:
824
+ "Prometheus remote_write ingest"
825
+ return cast(
826
+ None,
827
+ self._transport.request(
828
+ "telemetry",
829
+ "https://telemetry.{region}.basaltic.sh",
830
+ _OPS["writeMetrics"],
831
+ "discard",
832
+ {},
833
+ body,
834
+ None,
835
+ options,
836
+ ),
837
+ )
838
+
839
+
840
+ class AsyncTelemetryService:
841
+ def __init__(self, transport: AsyncTransport) -> None:
842
+ self._transport = transport
843
+
844
+ async def create_log_group(
845
+ self, body: m.CreateLogGroupBody, *, options: RequestOptions | None = None
846
+ ) -> ApiResponse[m.CreateLogGroupResponse]:
847
+ "Create a log group"
848
+ return cast(
849
+ ApiResponse[m.CreateLogGroupResponse],
850
+ await self._transport.request(
851
+ "telemetry",
852
+ "https://telemetry.{region}.basaltic.sh",
853
+ _OPS["createLogGroup"],
854
+ "json",
855
+ {},
856
+ body,
857
+ None,
858
+ options,
859
+ ),
860
+ )
861
+
862
+ async def delete_log_group(self, id: str, *, options: RequestOptions | None = None) -> None:
863
+ "Delete a log group"
864
+ return cast(
865
+ None,
866
+ await self._transport.request(
867
+ "telemetry",
868
+ "https://telemetry.{region}.basaltic.sh",
869
+ _OPS["deleteLogGroup"],
870
+ "discard",
871
+ {"id": id},
872
+ UNSET,
873
+ None,
874
+ options,
875
+ ),
876
+ )
877
+
878
+ async def delete_trace_settings(self, *, options: RequestOptions | None = None) -> None:
879
+ "Delete trace settings"
880
+ return cast(
881
+ None,
882
+ await self._transport.request(
883
+ "telemetry",
884
+ "https://telemetry.{region}.basaltic.sh",
885
+ _OPS["deleteTraceSettings"],
886
+ "discard",
887
+ {},
888
+ UNSET,
889
+ None,
890
+ options,
891
+ ),
892
+ )
893
+
894
+ async def get_log(
895
+ self, log_id: str, *, options: RequestOptions | None = None
896
+ ) -> ApiResponse[m.GetLogResponse]:
897
+ "Get a single log record by id"
898
+ return cast(
899
+ ApiResponse[m.GetLogResponse],
900
+ await self._transport.request(
901
+ "telemetry",
902
+ "https://telemetry.{region}.basaltic.sh",
903
+ _OPS["getLog"],
904
+ "json",
905
+ {"log_id": log_id},
906
+ UNSET,
907
+ None,
908
+ options,
909
+ ),
910
+ )
911
+
912
+ async def get_log_group(
913
+ self, id: str, *, options: RequestOptions | None = None
914
+ ) -> ApiResponse[m.GetLogGroupResponse]:
915
+ "Get a log group by id"
916
+ return cast(
917
+ ApiResponse[m.GetLogGroupResponse],
918
+ await self._transport.request(
919
+ "telemetry",
920
+ "https://telemetry.{region}.basaltic.sh",
921
+ _OPS["getLogGroup"],
922
+ "json",
923
+ {"id": id},
924
+ UNSET,
925
+ None,
926
+ options,
927
+ ),
928
+ )
929
+
930
+ async def get_log_group_by_reference(
931
+ self,
932
+ reference: str,
933
+ *,
934
+ scope: m.GetLogGroupScope | None = None,
935
+ options: RequestOptions | None = None,
936
+ ) -> ApiResponse[m.GetLogGroupResource]:
937
+ return cast(
938
+ ApiResponse[m.GetLogGroupResource],
939
+ await aresolve_reference(
940
+ reference,
941
+ lambda id: self.get_log_group(id, options=options),
942
+ lambda match: self.list_log_groups(
943
+ query=cast(
944
+ m.ListLogGroupsQuery, {**reference_scope(scope), **match, "limit": 2}
945
+ ),
946
+ options=options,
947
+ ),
948
+ True,
949
+ "log_group",
950
+ ),
951
+ )
952
+
953
+ async def get_retained_telemetry_presence(
954
+ self, *, options: RequestOptions | None = None
955
+ ) -> ApiResponse[m.GetRetainedTelemetryPresenceResponse]:
956
+ "Check retained telemetry presence"
957
+ return cast(
958
+ ApiResponse[m.GetRetainedTelemetryPresenceResponse],
959
+ await self._transport.request(
960
+ "telemetry",
961
+ "https://telemetry.{region}.basaltic.sh",
962
+ _OPS["getRetainedTelemetryPresence"],
963
+ "json",
964
+ {},
965
+ UNSET,
966
+ None,
967
+ options,
968
+ ),
969
+ )
970
+
971
+ async def get_trace(
972
+ self, trace_id: str, *, options: RequestOptions | None = None
973
+ ) -> ApiResponse[m.GetTraceResponse]:
974
+ "Get all spans for a trace"
975
+ return cast(
976
+ ApiResponse[m.GetTraceResponse],
977
+ await self._transport.request(
978
+ "telemetry",
979
+ "https://telemetry.{region}.basaltic.sh",
980
+ _OPS["getTrace"],
981
+ "json",
982
+ {"trace_id": trace_id},
983
+ UNSET,
984
+ None,
985
+ options,
986
+ ),
987
+ )
988
+
989
+ async def get_trace_settings(
990
+ self, *, options: RequestOptions | None = None
991
+ ) -> ApiResponse[m.GetTraceSettingsResponse]:
992
+ "Get the caller account's trace settings"
993
+ return cast(
994
+ ApiResponse[m.GetTraceSettingsResponse],
995
+ await self._transport.request(
996
+ "telemetry",
997
+ "https://telemetry.{region}.basaltic.sh",
998
+ _OPS["getTraceSettings"],
999
+ "json",
1000
+ {},
1001
+ UNSET,
1002
+ None,
1003
+ options,
1004
+ ),
1005
+ )
1006
+
1007
+ async def ingest_logs(
1008
+ self, body: m.IngestLogsBody, *, options: RequestOptions | None = None
1009
+ ) -> ApiResponse[m.IngestLogsResponse]:
1010
+ "Ingest a batch of log records"
1011
+ return cast(
1012
+ ApiResponse[m.IngestLogsResponse],
1013
+ await self._transport.request(
1014
+ "telemetry",
1015
+ "https://telemetry.{region}.basaltic.sh",
1016
+ _OPS["ingestLogs"],
1017
+ "json",
1018
+ {},
1019
+ body,
1020
+ None,
1021
+ options,
1022
+ ),
1023
+ )
1024
+
1025
+ async def ingest_spans(
1026
+ self, body: m.IngestSpansBody, *, options: RequestOptions | None = None
1027
+ ) -> ApiResponse[m.IngestSpansResponse]:
1028
+ "Ingest a batch of trace spans"
1029
+ return cast(
1030
+ ApiResponse[m.IngestSpansResponse],
1031
+ await self._transport.request(
1032
+ "telemetry",
1033
+ "https://telemetry.{region}.basaltic.sh",
1034
+ _OPS["ingestSpans"],
1035
+ "json",
1036
+ {},
1037
+ body,
1038
+ None,
1039
+ options,
1040
+ ),
1041
+ )
1042
+
1043
+ async def list_log_groups(
1044
+ self, *, query: m.ListLogGroupsQuery | None = None, options: RequestOptions | None = None
1045
+ ) -> Page[m.ListLogGroupsResponse, m.ListLogGroupsItem]:
1046
+ "List log groups (or look up one by name)"
1047
+ return cast(
1048
+ Page[m.ListLogGroupsResponse, m.ListLogGroupsItem],
1049
+ await self._transport.request(
1050
+ "telemetry",
1051
+ "https://telemetry.{region}.basaltic.sh",
1052
+ _OPS["listLogGroups"],
1053
+ "page",
1054
+ {},
1055
+ UNSET,
1056
+ query,
1057
+ options,
1058
+ ),
1059
+ )
1060
+
1061
+ def list_log_groups_all(
1062
+ self, *, query: m.ListLogGroupsQuery | None = None, options: RequestOptions | None = None
1063
+ ) -> AsyncIterator[m.ListLogGroupsItem]:
1064
+ return aiterate_pages(
1065
+ lambda marker: self.list_log_groups(
1066
+ query=cast(m.ListLogGroupsQuery, {**(query or {}), "marker": marker}),
1067
+ options=options,
1068
+ ),
1069
+ (query or {}).get("marker", ""),
1070
+ )
1071
+
1072
+ async def list_metric_names(
1073
+ self, *, query: m.ListMetricNamesQuery, options: RequestOptions | None = None
1074
+ ) -> Page[m.ListMetricNamesResponse, m.ListMetricNamesItem]:
1075
+ "List the distinct metric names emitted in a time window"
1076
+ return cast(
1077
+ Page[m.ListMetricNamesResponse, m.ListMetricNamesItem],
1078
+ await self._transport.request(
1079
+ "telemetry",
1080
+ "https://telemetry.{region}.basaltic.sh",
1081
+ _OPS["listMetricNames"],
1082
+ "page",
1083
+ {},
1084
+ UNSET,
1085
+ query,
1086
+ options,
1087
+ ),
1088
+ )
1089
+
1090
+ async def list_metric_names_post(
1091
+ self,
1092
+ body: m.ListMetricNamesPostBody | Unset = UNSET,
1093
+ *,
1094
+ options: RequestOptions | None = None,
1095
+ ) -> ApiResponse[m.ListMetricNamesPostResponse]:
1096
+ "List the distinct metric names emitted in a time window (form body)"
1097
+ return cast(
1098
+ ApiResponse[m.ListMetricNamesPostResponse],
1099
+ await self._transport.request(
1100
+ "telemetry",
1101
+ "https://telemetry.{region}.basaltic.sh",
1102
+ _OPS["listMetricNamesPost"],
1103
+ "json",
1104
+ {},
1105
+ body,
1106
+ None,
1107
+ options,
1108
+ ),
1109
+ )
1110
+
1111
+ async def list_metric_series(
1112
+ self, *, query: m.ListMetricSeriesQuery, options: RequestOptions | None = None
1113
+ ) -> ApiResponse[m.ListMetricSeriesResponse]:
1114
+ "List distinct label sets for a metric"
1115
+ return cast(
1116
+ ApiResponse[m.ListMetricSeriesResponse],
1117
+ await self._transport.request(
1118
+ "telemetry",
1119
+ "https://telemetry.{region}.basaltic.sh",
1120
+ _OPS["listMetricSeries"],
1121
+ "json",
1122
+ {},
1123
+ UNSET,
1124
+ query,
1125
+ options,
1126
+ ),
1127
+ )
1128
+
1129
+ async def list_metric_series_post(
1130
+ self,
1131
+ body: m.ListMetricSeriesPostBody | Unset = UNSET,
1132
+ *,
1133
+ options: RequestOptions | None = None,
1134
+ ) -> ApiResponse[m.ListMetricSeriesPostResponse]:
1135
+ "List distinct label sets for a metric (form body)"
1136
+ return cast(
1137
+ ApiResponse[m.ListMetricSeriesPostResponse],
1138
+ await self._transport.request(
1139
+ "telemetry",
1140
+ "https://telemetry.{region}.basaltic.sh",
1141
+ _OPS["listMetricSeriesPost"],
1142
+ "json",
1143
+ {},
1144
+ body,
1145
+ None,
1146
+ options,
1147
+ ),
1148
+ )
1149
+
1150
+ async def put_trace_settings(
1151
+ self, body: m.PutTraceSettingsBody, *, options: RequestOptions | None = None
1152
+ ) -> ApiResponse[m.PutTraceSettingsResponse]:
1153
+ "Update the caller account's trace settings"
1154
+ return cast(
1155
+ ApiResponse[m.PutTraceSettingsResponse],
1156
+ await self._transport.request(
1157
+ "telemetry",
1158
+ "https://telemetry.{region}.basaltic.sh",
1159
+ _OPS["putTraceSettings"],
1160
+ "json",
1161
+ {},
1162
+ body,
1163
+ None,
1164
+ options,
1165
+ ),
1166
+ )
1167
+
1168
+ async def query_metrics_instant(
1169
+ self, *, query: m.QueryMetricsInstantQuery, options: RequestOptions | None = None
1170
+ ) -> ApiResponse[m.QueryMetricsInstantResponse]:
1171
+ "Instant structured metric query"
1172
+ return cast(
1173
+ ApiResponse[m.QueryMetricsInstantResponse],
1174
+ await self._transport.request(
1175
+ "telemetry",
1176
+ "https://telemetry.{region}.basaltic.sh",
1177
+ _OPS["queryMetricsInstant"],
1178
+ "json",
1179
+ {},
1180
+ UNSET,
1181
+ query,
1182
+ options,
1183
+ ),
1184
+ )
1185
+
1186
+ async def query_metrics_instant_post(
1187
+ self,
1188
+ body: m.QueryMetricsInstantPostBody | Unset = UNSET,
1189
+ *,
1190
+ options: RequestOptions | None = None,
1191
+ ) -> ApiResponse[m.QueryMetricsInstantPostResponse]:
1192
+ "Instant structured metric query (form body)"
1193
+ return cast(
1194
+ ApiResponse[m.QueryMetricsInstantPostResponse],
1195
+ await self._transport.request(
1196
+ "telemetry",
1197
+ "https://telemetry.{region}.basaltic.sh",
1198
+ _OPS["queryMetricsInstantPost"],
1199
+ "json",
1200
+ {},
1201
+ body,
1202
+ None,
1203
+ options,
1204
+ ),
1205
+ )
1206
+
1207
+ async def query_metrics_range(
1208
+ self, *, query: m.QueryMetricsRangeQuery, options: RequestOptions | None = None
1209
+ ) -> ApiResponse[m.QueryMetricsRangeResponse]:
1210
+ "Range structured metric query"
1211
+ return cast(
1212
+ ApiResponse[m.QueryMetricsRangeResponse],
1213
+ await self._transport.request(
1214
+ "telemetry",
1215
+ "https://telemetry.{region}.basaltic.sh",
1216
+ _OPS["queryMetricsRange"],
1217
+ "json",
1218
+ {},
1219
+ UNSET,
1220
+ query,
1221
+ options,
1222
+ ),
1223
+ )
1224
+
1225
+ async def query_metrics_range_post(
1226
+ self,
1227
+ body: m.QueryMetricsRangePostBody | Unset = UNSET,
1228
+ *,
1229
+ options: RequestOptions | None = None,
1230
+ ) -> ApiResponse[m.QueryMetricsRangePostResponse]:
1231
+ "Range structured metric query (form body)"
1232
+ return cast(
1233
+ ApiResponse[m.QueryMetricsRangePostResponse],
1234
+ await self._transport.request(
1235
+ "telemetry",
1236
+ "https://telemetry.{region}.basaltic.sh",
1237
+ _OPS["queryMetricsRangePost"],
1238
+ "json",
1239
+ {},
1240
+ body,
1241
+ None,
1242
+ options,
1243
+ ),
1244
+ )
1245
+
1246
+ async def search_logs(
1247
+ self, *, query: m.SearchLogsQuery, options: RequestOptions | None = None
1248
+ ) -> ApiResponse[m.SearchLogsResponse]:
1249
+ "Search log records"
1250
+ return cast(
1251
+ ApiResponse[m.SearchLogsResponse],
1252
+ await self._transport.request(
1253
+ "telemetry",
1254
+ "https://telemetry.{region}.basaltic.sh",
1255
+ _OPS["searchLogs"],
1256
+ "json",
1257
+ {},
1258
+ UNSET,
1259
+ query,
1260
+ options,
1261
+ ),
1262
+ )
1263
+
1264
+ async def search_traces(
1265
+ self, *, query: m.SearchTracesQuery, options: RequestOptions | None = None
1266
+ ) -> ApiResponse[m.SearchTracesResponse]:
1267
+ "List traces"
1268
+ return cast(
1269
+ ApiResponse[m.SearchTracesResponse],
1270
+ await self._transport.request(
1271
+ "telemetry",
1272
+ "https://telemetry.{region}.basaltic.sh",
1273
+ _OPS["searchTraces"],
1274
+ "json",
1275
+ {},
1276
+ UNSET,
1277
+ query,
1278
+ options,
1279
+ ),
1280
+ )
1281
+
1282
+ async def update_log_group(
1283
+ self, id: str, body: m.UpdateLogGroupBody, *, options: RequestOptions | None = None
1284
+ ) -> ApiResponse[m.UpdateLogGroupResponse]:
1285
+ "Update a log group"
1286
+ return cast(
1287
+ ApiResponse[m.UpdateLogGroupResponse],
1288
+ await self._transport.request(
1289
+ "telemetry",
1290
+ "https://telemetry.{region}.basaltic.sh",
1291
+ _OPS["updateLogGroup"],
1292
+ "json",
1293
+ {"id": id},
1294
+ body,
1295
+ None,
1296
+ options,
1297
+ ),
1298
+ )
1299
+
1300
+ async def write_metrics(
1301
+ self, body: AsyncBinaryBody, *, options: RequestOptions | None = None
1302
+ ) -> None:
1303
+ "Prometheus remote_write ingest"
1304
+ return cast(
1305
+ None,
1306
+ await self._transport.request(
1307
+ "telemetry",
1308
+ "https://telemetry.{region}.basaltic.sh",
1309
+ _OPS["writeMetrics"],
1310
+ "discard",
1311
+ {},
1312
+ body,
1313
+ None,
1314
+ options,
1315
+ ),
1316
+ )