hyperprobe-agent 1.2.24__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.
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: agent.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x61gent.proto\x12\x13hyperprobe.agent.v1\"\x9c\x01\n\x10GetProbesRequest\x12\x10\n\x08\x61gent_id\x18\x01 \x01(\t\x12\x12\n\nservice_id\x18\x02 \x01(\t\x12\x13\n\x0b\x65nvironment\x18\x03 \x01(\t\x12\x12\n\ncommit_sha\x18\x04 \x01(\t\x12\x10\n\x08language\x18\x05 \x01(\t\x12\x15\n\ragent_version\x18\x06 \x01(\t\x12\x10\n\x08hostname\x18\x07 \x01(\t\"\xbc\x01\n\x11GetProbesResponse\x12*\n\x06probes\x18\x01 \x03(\x0b\x32\x1a.hyperprobe.agent.v1.Probe\x12\"\n\x15next_sync_interval_ms\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12=\n\rglobal_config\x18\x03 \x01(\x0b\x32&.hyperprobe.agent.v1.AgentGlobalConfigB\x18\n\x16_next_sync_interval_ms\"U\n\x16SourceMapStatusRequest\x12\x12\n\nservice_id\x18\x01 \x01(\t\x12\x13\n\x0b\x65nvironment\x18\x02 \x01(\t\x12\x12\n\ncommit_sha\x18\x03 \x01(\t\"C\n\x17SourceMapStatusResponse\x12\x13\n\x0bis_uploader\x18\x01 \x01(\x08\x12\x13\n\x0bis_complete\x18\x02 \x01(\x08\"n\n\x0eSourceMapChunk\x12\x12\n\nservice_id\x18\x01 \x01(\t\x12\x13\n\x0b\x65nvironment\x18\x02 \x01(\t\x12\x12\n\ncommit_sha\x18\x03 \x01(\t\x12\x11\n\tfile_name\x18\x04 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"!\n\x0eUploadResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"[\n\x1cMarkSourceMapCompleteRequest\x12\x12\n\nservice_id\x18\x01 \x01(\t\x12\x13\n\x0b\x65nvironment\x18\x02 \x01(\t\x12\x12\n\ncommit_sha\x18\x03 \x01(\t\"0\n\x1dMarkSourceMapCompleteResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"\x85\x03\n\x11\x41gentGlobalConfig\x12\x13\n\x0bredact_keys\x18\x01 \x03(\t\x12\x15\n\rredact_values\x18\x02 \x03(\t\x12\x1d\n\x10max_object_depth\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x1d\n\x10max_array_length\x18\x04 \x01(\x05H\x01\x88\x01\x01\x12\x1e\n\x11stack_frame_depth\x18\x05 \x01(\x05H\x02\x88\x01\x01\x12\"\n\x15max_object_properties\x18\x06 \x01(\x05H\x03\x88\x01\x01\x12\x1e\n\x11max_string_length\x18\x07 \x01(\x05H\x04\x88\x01\x01\x12\x1d\n\x10\x63\x61pture_closures\x18\x08 \x01(\x08H\x05\x88\x01\x01\x42\x13\n\x11_max_object_depthB\x13\n\x11_max_array_lengthB\x14\n\x12_stack_frame_depthB\x18\n\x16_max_object_propertiesB\x14\n\x12_max_string_lengthB\x13\n\x11_capture_closures\"\x91\x07\n\x05Probe\x12\n\n\x02id\x18\x01 \x01(\t\x12,\n\x04type\x18\x02 \x01(\x0e\x32\x1e.hyperprobe.agent.v1.ProbeType\x12\x18\n\x10runtime_location\x18\x03 \x01(\t\x12\x14\n\x0cruntime_line\x18\x04 \x01(\x05\x12\"\n\x1asecondary_runtime_location\x18\x05 \x01(\t\x12\x1e\n\x16secondary_runtime_line\x18\x06 \x01(\x05\x12\x11\n\tcondition\x18\x07 \x01(\t\x12\x10\n\x08template\x18\x08 \x01(\t\x12\x13\n\x0bmetric_name\x18\t \x01(\t\x12\x19\n\x11metric_expression\x18\n \x01(\t\x12\x19\n\x11watch_expressions\x18\x0b \x03(\t\x12\x11\n\thit_limit\x18\x0c \x01(\x05\x12\x13\n\x0b\x65xpiry_time\x18\r \x01(\x03\x12\x16\n\x0eruntime_column\x18\x0e \x01(\x05\x12 \n\x18secondary_runtime_column\x18\x0f \x01(\x05\x12\x1e\n\x16\x63orrelation_expression\x18\x10 \x01(\t\x12\x1d\n\x10max_object_depth\x18\x11 \x01(\x05H\x00\x88\x01\x01\x12\x1d\n\x10max_array_length\x18\x12 \x01(\x05H\x01\x88\x01\x01\x12\x1e\n\x11stack_frame_depth\x18\x13 \x01(\x05H\x02\x88\x01\x01\x12\"\n\x15max_object_properties\x18\x14 \x01(\x05H\x03\x88\x01\x01\x12\x1e\n\x11max_string_length\x18\x15 \x01(\x05H\x04\x88\x01\x01\x12$\n\x17should_capture_trace_id\x18\x16 \x01(\x08H\x05\x88\x01\x01\x12\x16\n\tlog_level\x18\x17 \x01(\tH\x06\x88\x01\x01\x12!\n\x14should_log_to_stdout\x18\x18 \x01(\x08H\x07\x88\x01\x01\x12\x1d\n\x10\x63\x61pture_closures\x18\x19 \x01(\x08H\x08\x88\x01\x01\x42\x13\n\x11_max_object_depthB\x13\n\x11_max_array_lengthB\x14\n\x12_stack_frame_depthB\x18\n\x16_max_object_propertiesB\x14\n\x12_max_string_lengthB\x1a\n\x18_should_capture_trace_idB\x0c\n\n_log_levelB\x17\n\x15_should_log_to_stdoutB\x13\n\x11_capture_closures\"W\n\x0eTelemetryBatch\x12\x10\n\x08\x61gent_id\x18\x01 \x01(\t\x12\x33\n\x06\x65vents\x18\x02 \x03(\x0b\x32#.hyperprobe.agent.v1.TelemetryEvent\"\x8a\x01\n\nStackFrame\x12\x15\n\rfunction_name\x18\x01 \x01(\t\x12\x11\n\tfile_name\x18\x02 \x01(\t\x12\x13\n\x0bline_number\x18\x03 \x01(\x05\x12\x15\n\rcolumn_number\x18\x04 \x01(\x05\x12\x17\n\nclass_name\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_class_name\"\x8f\x02\n\x0eTelemetryEvent\x12\x10\n\x08probe_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12\x35\n\x0cstack_frames\x18\x03 \x03(\x0b\x32\x1f.hyperprobe.agent.v1.StackFrame\x12\x1a\n\x12\x63\x61ptured_vars_json\x18\x04 \x01(\t\x12\x1a\n\x12watch_results_json\x18\x05 \x01(\t\x12\x15\n\revaluated_log\x18\x06 \x01(\t\x12\x14\n\x0cmetric_value\x18\x07 \x01(\x01\x12\x15\n\rcapture_error\x18\x08 \x01(\t\x12\x15\n\x08trace_id\x18\t \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_trace_id\"/\n\x11TelemetryResponse\x12\x1a\n\x12\x66inished_probe_ids\x18\x01 \x03(\t*\x9c\x01\n\tProbeType\x12\x1a\n\x16PROBE_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13PROBE_TYPE_SNAPSHOT\x10\x01\x12\x12\n\x0ePROBE_TYPE_LOG\x10\x02\x12\x16\n\x12PROBE_TYPE_COUNTER\x10\x03\x12\x15\n\x11PROBE_TYPE_METRIC\x10\x04\x12\x17\n\x13PROBE_TYPE_DURATION\x10\x05\x32\x99\x04\n\x0b\x41gentBroker\x12Z\n\tGetProbes\x12%.hyperprobe.agent.v1.GetProbesRequest\x1a&.hyperprobe.agent.v1.GetProbesResponse\x12^\n\x0fReportTelemetry\x12#.hyperprobe.agent.v1.TelemetryBatch\x1a&.hyperprobe.agent.v1.TelemetryResponse\x12o\n\x12GetSourceMapStatus\x12+.hyperprobe.agent.v1.SourceMapStatusRequest\x1a,.hyperprobe.agent.v1.SourceMapStatusResponse\x12]\n\x0fUploadSourceMap\x12#.hyperprobe.agent.v1.SourceMapChunk\x1a#.hyperprobe.agent.v1.UploadResponse(\x01\x12~\n\x15MarkSourceMapComplete\x12\x31.hyperprobe.agent.v1.MarkSourceMapCompleteRequest\x1a\x32.hyperprobe.agent.v1.MarkSourceMapCompleteResponseB\tB\x05\x41gentP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'agent_pb2', _globals)
22
+ if _descriptor._USE_C_DESCRIPTORS == False:
23
+ _globals['DESCRIPTOR']._options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'B\005AgentP\000'
25
+ _globals['_PROBETYPE']._serialized_start=2694
26
+ _globals['_PROBETYPE']._serialized_end=2850
27
+ _globals['_GETPROBESREQUEST']._serialized_start=37
28
+ _globals['_GETPROBESREQUEST']._serialized_end=193
29
+ _globals['_GETPROBESRESPONSE']._serialized_start=196
30
+ _globals['_GETPROBESRESPONSE']._serialized_end=384
31
+ _globals['_SOURCEMAPSTATUSREQUEST']._serialized_start=386
32
+ _globals['_SOURCEMAPSTATUSREQUEST']._serialized_end=471
33
+ _globals['_SOURCEMAPSTATUSRESPONSE']._serialized_start=473
34
+ _globals['_SOURCEMAPSTATUSRESPONSE']._serialized_end=540
35
+ _globals['_SOURCEMAPCHUNK']._serialized_start=542
36
+ _globals['_SOURCEMAPCHUNK']._serialized_end=652
37
+ _globals['_UPLOADRESPONSE']._serialized_start=654
38
+ _globals['_UPLOADRESPONSE']._serialized_end=687
39
+ _globals['_MARKSOURCEMAPCOMPLETEREQUEST']._serialized_start=689
40
+ _globals['_MARKSOURCEMAPCOMPLETEREQUEST']._serialized_end=780
41
+ _globals['_MARKSOURCEMAPCOMPLETERESPONSE']._serialized_start=782
42
+ _globals['_MARKSOURCEMAPCOMPLETERESPONSE']._serialized_end=830
43
+ _globals['_AGENTGLOBALCONFIG']._serialized_start=833
44
+ _globals['_AGENTGLOBALCONFIG']._serialized_end=1222
45
+ _globals['_PROBE']._serialized_start=1225
46
+ _globals['_PROBE']._serialized_end=2138
47
+ _globals['_TELEMETRYBATCH']._serialized_start=2140
48
+ _globals['_TELEMETRYBATCH']._serialized_end=2227
49
+ _globals['_STACKFRAME']._serialized_start=2230
50
+ _globals['_STACKFRAME']._serialized_end=2368
51
+ _globals['_TELEMETRYEVENT']._serialized_start=2371
52
+ _globals['_TELEMETRYEVENT']._serialized_end=2642
53
+ _globals['_TELEMETRYRESPONSE']._serialized_start=2644
54
+ _globals['_TELEMETRYRESPONSE']._serialized_end=2691
55
+ _globals['_AGENTBROKER']._serialized_start=2853
56
+ _globals['_AGENTBROKER']._serialized_end=3390
57
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,199 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
5
+ from . import agent_pb2 as agent__pb2
6
+
7
+
8
+ class AgentBrokerStub(object):
9
+ """Missing associated documentation comment in .proto file."""
10
+
11
+ def __init__(self, channel):
12
+ """Constructor.
13
+
14
+ Args:
15
+ channel: A grpc.Channel.
16
+ """
17
+ self.GetProbes = channel.unary_unary(
18
+ '/hyperprobe.agent.v1.AgentBroker/GetProbes',
19
+ request_serializer=agent__pb2.GetProbesRequest.SerializeToString,
20
+ response_deserializer=agent__pb2.GetProbesResponse.FromString,
21
+ )
22
+ self.ReportTelemetry = channel.unary_unary(
23
+ '/hyperprobe.agent.v1.AgentBroker/ReportTelemetry',
24
+ request_serializer=agent__pb2.TelemetryBatch.SerializeToString,
25
+ response_deserializer=agent__pb2.TelemetryResponse.FromString,
26
+ )
27
+ self.GetSourceMapStatus = channel.unary_unary(
28
+ '/hyperprobe.agent.v1.AgentBroker/GetSourceMapStatus',
29
+ request_serializer=agent__pb2.SourceMapStatusRequest.SerializeToString,
30
+ response_deserializer=agent__pb2.SourceMapStatusResponse.FromString,
31
+ )
32
+ self.UploadSourceMap = channel.stream_unary(
33
+ '/hyperprobe.agent.v1.AgentBroker/UploadSourceMap',
34
+ request_serializer=agent__pb2.SourceMapChunk.SerializeToString,
35
+ response_deserializer=agent__pb2.UploadResponse.FromString,
36
+ )
37
+ self.MarkSourceMapComplete = channel.unary_unary(
38
+ '/hyperprobe.agent.v1.AgentBroker/MarkSourceMapComplete',
39
+ request_serializer=agent__pb2.MarkSourceMapCompleteRequest.SerializeToString,
40
+ response_deserializer=agent__pb2.MarkSourceMapCompleteResponse.FromString,
41
+ )
42
+
43
+
44
+ class AgentBrokerServicer(object):
45
+ """Missing associated documentation comment in .proto file."""
46
+
47
+ def GetProbes(self, request, context):
48
+ """Missing associated documentation comment in .proto file."""
49
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
50
+ context.set_details('Method not implemented!')
51
+ raise NotImplementedError('Method not implemented!')
52
+
53
+ def ReportTelemetry(self, request, context):
54
+ """Missing associated documentation comment in .proto file."""
55
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
56
+ context.set_details('Method not implemented!')
57
+ raise NotImplementedError('Method not implemented!')
58
+
59
+ def GetSourceMapStatus(self, request, context):
60
+ """Handshake for JS source maps
61
+ """
62
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
63
+ context.set_details('Method not implemented!')
64
+ raise NotImplementedError('Method not implemented!')
65
+
66
+ def UploadSourceMap(self, request_iterator, context):
67
+ """Missing associated documentation comment in .proto file."""
68
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
69
+ context.set_details('Method not implemented!')
70
+ raise NotImplementedError('Method not implemented!')
71
+
72
+ def MarkSourceMapComplete(self, request, context):
73
+ """Missing associated documentation comment in .proto file."""
74
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
75
+ context.set_details('Method not implemented!')
76
+ raise NotImplementedError('Method not implemented!')
77
+
78
+
79
+ def add_AgentBrokerServicer_to_server(servicer, server):
80
+ rpc_method_handlers = {
81
+ 'GetProbes': grpc.unary_unary_rpc_method_handler(
82
+ servicer.GetProbes,
83
+ request_deserializer=agent__pb2.GetProbesRequest.FromString,
84
+ response_serializer=agent__pb2.GetProbesResponse.SerializeToString,
85
+ ),
86
+ 'ReportTelemetry': grpc.unary_unary_rpc_method_handler(
87
+ servicer.ReportTelemetry,
88
+ request_deserializer=agent__pb2.TelemetryBatch.FromString,
89
+ response_serializer=agent__pb2.TelemetryResponse.SerializeToString,
90
+ ),
91
+ 'GetSourceMapStatus': grpc.unary_unary_rpc_method_handler(
92
+ servicer.GetSourceMapStatus,
93
+ request_deserializer=agent__pb2.SourceMapStatusRequest.FromString,
94
+ response_serializer=agent__pb2.SourceMapStatusResponse.SerializeToString,
95
+ ),
96
+ 'UploadSourceMap': grpc.stream_unary_rpc_method_handler(
97
+ servicer.UploadSourceMap,
98
+ request_deserializer=agent__pb2.SourceMapChunk.FromString,
99
+ response_serializer=agent__pb2.UploadResponse.SerializeToString,
100
+ ),
101
+ 'MarkSourceMapComplete': grpc.unary_unary_rpc_method_handler(
102
+ servicer.MarkSourceMapComplete,
103
+ request_deserializer=agent__pb2.MarkSourceMapCompleteRequest.FromString,
104
+ response_serializer=agent__pb2.MarkSourceMapCompleteResponse.SerializeToString,
105
+ ),
106
+ }
107
+ generic_handler = grpc.method_handlers_generic_handler(
108
+ 'hyperprobe.agent.v1.AgentBroker', rpc_method_handlers)
109
+ server.add_generic_rpc_handlers((generic_handler,))
110
+
111
+
112
+ # This class is part of an EXPERIMENTAL API.
113
+ class AgentBroker(object):
114
+ """Missing associated documentation comment in .proto file."""
115
+
116
+ @staticmethod
117
+ def GetProbes(request,
118
+ target,
119
+ options=(),
120
+ channel_credentials=None,
121
+ call_credentials=None,
122
+ insecure=False,
123
+ compression=None,
124
+ wait_for_ready=None,
125
+ timeout=None,
126
+ metadata=None):
127
+ return grpc.experimental.unary_unary(request, target, '/hyperprobe.agent.v1.AgentBroker/GetProbes',
128
+ agent__pb2.GetProbesRequest.SerializeToString,
129
+ agent__pb2.GetProbesResponse.FromString,
130
+ options, channel_credentials,
131
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
132
+
133
+ @staticmethod
134
+ def ReportTelemetry(request,
135
+ target,
136
+ options=(),
137
+ channel_credentials=None,
138
+ call_credentials=None,
139
+ insecure=False,
140
+ compression=None,
141
+ wait_for_ready=None,
142
+ timeout=None,
143
+ metadata=None):
144
+ return grpc.experimental.unary_unary(request, target, '/hyperprobe.agent.v1.AgentBroker/ReportTelemetry',
145
+ agent__pb2.TelemetryBatch.SerializeToString,
146
+ agent__pb2.TelemetryResponse.FromString,
147
+ options, channel_credentials,
148
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
149
+
150
+ @staticmethod
151
+ def GetSourceMapStatus(request,
152
+ target,
153
+ options=(),
154
+ channel_credentials=None,
155
+ call_credentials=None,
156
+ insecure=False,
157
+ compression=None,
158
+ wait_for_ready=None,
159
+ timeout=None,
160
+ metadata=None):
161
+ return grpc.experimental.unary_unary(request, target, '/hyperprobe.agent.v1.AgentBroker/GetSourceMapStatus',
162
+ agent__pb2.SourceMapStatusRequest.SerializeToString,
163
+ agent__pb2.SourceMapStatusResponse.FromString,
164
+ options, channel_credentials,
165
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
166
+
167
+ @staticmethod
168
+ def UploadSourceMap(request_iterator,
169
+ target,
170
+ options=(),
171
+ channel_credentials=None,
172
+ call_credentials=None,
173
+ insecure=False,
174
+ compression=None,
175
+ wait_for_ready=None,
176
+ timeout=None,
177
+ metadata=None):
178
+ return grpc.experimental.stream_unary(request_iterator, target, '/hyperprobe.agent.v1.AgentBroker/UploadSourceMap',
179
+ agent__pb2.SourceMapChunk.SerializeToString,
180
+ agent__pb2.UploadResponse.FromString,
181
+ options, channel_credentials,
182
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
183
+
184
+ @staticmethod
185
+ def MarkSourceMapComplete(request,
186
+ target,
187
+ options=(),
188
+ channel_credentials=None,
189
+ call_credentials=None,
190
+ insecure=False,
191
+ compression=None,
192
+ wait_for_ready=None,
193
+ timeout=None,
194
+ metadata=None):
195
+ return grpc.experimental.unary_unary(request, target, '/hyperprobe.agent.v1.AgentBroker/MarkSourceMapComplete',
196
+ agent__pb2.MarkSourceMapCompleteRequest.SerializeToString,
197
+ agent__pb2.MarkSourceMapCompleteResponse.FromString,
198
+ options, channel_credentials,
199
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -0,0 +1,154 @@
1
+ Metadata-Version: 2.4
2
+ Name: hyperprobe-agent
3
+ Version: 1.2.24
4
+ Summary: Production-grade, non-breaking live debugger and telemetry agent for Python.
5
+ Home-page: https://www.hyperprobe.co
6
+ Author: Arif, Saksham, Karan
7
+ Author-email: arif@hypertest.co, saksham@hypertest.co, karan@hypertest.co
8
+ License: Hyperprobe Proprietary License
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Operating System :: OS Independent
13
+ Requires-Python: >=3.12
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: protobuf<6.0.0,>=4.25.3
17
+ Requires-Dist: grpcio>=1.62.2
18
+ Provides-Extra: dev
19
+ Requires-Dist: grpcio>=1.50.0; extra == "dev"
20
+ Requires-Dist: grpcio-tools>=1.50.0; extra == "dev"
21
+ Requires-Dist: protobuf>=4.21.0; extra == "dev"
22
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
23
+ Dynamic: author
24
+ Dynamic: author-email
25
+ Dynamic: classifier
26
+ Dynamic: description
27
+ Dynamic: description-content-type
28
+ Dynamic: home-page
29
+ Dynamic: license
30
+ Dynamic: license-file
31
+ Dynamic: provides-extra
32
+ Dynamic: requires-dist
33
+ Dynamic: requires-python
34
+ Dynamic: summary
35
+
36
+ # HyperProbe Python Agent
37
+
38
+ Production-grade, non-breaking live debugger and telemetry agent for Python.
39
+
40
+ HyperProbe allows you to debug running Python applications in real-time without breaking them, restarting them, or altering production traffic. It leverages modern Python's fast, low-overhead monitoring APIs (`sys.monitoring`) to securely and dynamically extract stack frames, local variables, and logs at targeted lines.
41
+
42
+ ## Features
43
+
44
+ - **Non-Breaking Snapshot Probes:** Capture local variables and stack traces dynamically at any line of code.
45
+ - **Dynamic Log Probes:** Inject live log templates to print formatted output without redeploying code.
46
+ - **Counter Probes:** Emit a value of `1` whenever a configured source line is reached.
47
+ - **Metric Probes:** Safely evaluate a numerical Python expression and emit its value.
48
+ - **Duration Probes:** Measure elapsed monotonic time in milliseconds between two source lines, with optional request correlation.
49
+ - **Zero-Code-Change Auto-Instrumentation:** Prepend our bootstrap runtime to any Python process without editing your application's code.
50
+ - **Circular Reference & Deep Object Protection:** Memory-safe serialization of deeply nested or cyclic variables.
51
+ - **High-Performance Safety Guard:** Automatically pauses monitoring and goes idle if CPU/memory boundaries or pause budgets are exceeded.
52
+
53
+ ## Metric-family probes
54
+
55
+ Counter, metric, and duration probes are created through HyperProbe in the same way as snapshot and log probes. No application code changes or additional public SDK calls are required.
56
+
57
+ | Probe | Configuration | Emitted `metric_value` |
58
+ | --- | --- | --- |
59
+ | Counter | `metric_name` and one runtime location | `1` per matching hit |
60
+ | Metric | `metric_name`, `metric_expression`, and one runtime location | The finite numerical expression result |
61
+ | Duration | `metric_name`, primary and secondary runtime locations, and optional `correlation_expression` | Monotonic elapsed milliseconds |
62
+
63
+ Conditions are evaluated at every configured location. Metric expressions use the same restricted, read-only Python evaluator as conditions and watches. Numerical strings follow Node SDK `parseFloat` behavior for compatibility; invalid or non-finite values are exported with `metric_value` set to `0` and a populated `capture_error`.
64
+
65
+ Duration correlation expressions must evaluate to a string or number. When omitted or when they evaluate to `None`, a singleton correlation key is used. Unmatched duration ends are ignored, and pending starts expire after 60 seconds.
66
+
67
+ ## Installation
68
+
69
+ Install the package via `pip` (or `testpypi` for testing):
70
+
71
+ ```bash
72
+ pip install hyperprobe-agent
73
+ ```
74
+
75
+ ## Usage
76
+
77
+ Run your application using the `hyperprobe-run` launcher. This automatically injects the live-debugging runtime before your code executes:
78
+
79
+ ```bash
80
+ HYPERPROBE_BROKER_URL="https://logger.app.hyperprobe.co" \
81
+ HYPERPROBE_SERVICE_ID="<service-uuid-from-dashboard>" \
82
+ HYPERPROBE_ENVIRONMENT="development" \
83
+ GIT_COMMIT=$(git rev-parse HEAD) \
84
+ hyperprobe-run python app.py
85
+ ```
86
+
87
+ ### Configuration Environment Variables
88
+
89
+ Configure the agent using the following environment variables:
90
+
91
+ | Variable | Description | Default |
92
+ | --- | --- | --- |
93
+ | `HYPERPROBE_BROKER_URL` | The URL of the HyperProbe Telemetry Broker. | *Required* |
94
+ | `HYPERPROBE_SERVICE_ID` | A unique name identifying this service. | *Required* |
95
+ | `HYPERPROBE_ENVIRONMENT` | Deployment environment name (e.g., `production`, `staging`). | *Required* |
96
+ | `HYPERPROBE_COMMIT_SHA` or `GIT_COMMIT` | Git commit SHA of the running application version. | *Required* |
97
+ | `HYPERPROBE_DISABLED` | Set to `YES` to explicitly disable the agent. | *(unset)* |
98
+ | `HYPERPROBE_SYNC_INTERVAL_MS` | Rate at which the agent syncs probe definitions from the broker. | `60000` (1 min) |
99
+ | `HYPERPROBE_FLUSH_INTERVAL_MS` | Delay before sending telemetry events to the broker. | `1000` (1 sec) |
100
+ | `HYPERPROBE_MAX_QUEUE_SIZE` | Maximum number of telemetry events held before flush. | `100` |
101
+ | `HYPERPROBE_HITS_PER_SEC` | Max snapshot capture requests per second (quota). | `10` |
102
+ | `HYPERPROBE_BANDWIDTH_KB_PER_SEC` | Max bandwidth limit for telemetry transmissions (quota). | `1024` (1 MB) |
103
+ | `HYPERPROBE_RPC_TIMEOUT_SEC` | Deadline for broker RPCs. | `10` |
104
+ | `HYPERPROBE_COOLDOWN_SEC` | Tracing suspension duration after a RED safety state. | `10` |
105
+ | `HYPERPROBE_MAX_LAG_MS` | Execution-thread lag threshold for the safety monitor. | `50` |
106
+ | `HYPERPROBE_PAUSE_BUDGET_MS` | Per-second capture pause budget for the safety monitor. | `15` |
107
+ | `HYPERPROBE_REDACT_KEYS` | Comma-separated key patterns to redact. | `password,secret,token,authorization,cookie,key,signature` |
108
+ | `HYPERPROBE_REDACT_VALUES` | Comma-separated value patterns to redact. | *(empty)* |
109
+ | `HYPERPROBE_MAX_OBJECT_DEPTH` | Maximum serialized object depth. | `3` |
110
+ | `HYPERPROBE_MAX_ARRAY_LENGTH` | Maximum serialized array length. | `3` |
111
+ | `HYPERPROBE_STACK_FRAME_DEPTH` | Maximum captured stack-frame depth. | `3` |
112
+ | `HYPERPROBE_MAX_OBJECT_PROPERTIES` | Maximum serialized properties per object. | `50` |
113
+ | `HYPERPROBE_MAX_STRING_LENGTH` | Maximum serialized string length. | `1024` |
114
+
115
+ ### Debug logging
116
+
117
+ Set `DEBUG` to a comma- or space-separated list of namespaces. Patterns accept
118
+ `*`, and exclusions begin with `-`:
119
+
120
+ ```bash
121
+ DEBUG=hyperprobe* # all HyperProbe SDK logs
122
+ DEBUG=hyperprobe:broker,hyperprobe:monitor # selected components
123
+ DEBUG=hyperprobe*,-hyperprobe:evaluator # exclude a component
124
+ DEBUG_COLORS=1 # force ANSI colors
125
+ ```
126
+
127
+ Without `*`, a selector is exact: `DEBUG=hyperprobe` does not match
128
+ `hyperprobe:agent`. Use `DEBUG=hyperprobe*` to enable every component.
129
+ Set `DEBUG_COLORS=0` to disable colors. Logging configuration is read during
130
+ SDK initialization, so set these variables before starting the process.
131
+
132
+ ## Programmatic Usage (Inside Your Code)
133
+
134
+ If you prefer to start the agent directly inside your Python script instead of using the `hyperprobe-run` launcher, you can do so by importing the package and calling `HyperProbe.start()` programmatically.
135
+
136
+ This is useful for applications where you want to control exactly when the agent boots up or configure the agent dynamically at runtime:
137
+
138
+ ```python
139
+ import os
140
+ from hyperprobe import HyperProbe
141
+
142
+ # Start the agent programmatically at your application's entrypoint
143
+ agent = HyperProbe.start({
144
+ "service_id": "<service-uuid-from-dashboard>",
145
+ "environment": os.getenv("PYTHON_ENV"), # Your environment name (e.g. dev, staging, production). Use whatever variable contains the env value.
146
+ "broker_url": "https://logger.app.hyperprobe.co",
147
+ "commit_sha": os.getenv("GIT_COMMIT"), # CI-injected commit SHA (reads os.getenv("GIT_COMMIT") by default)
148
+ })
149
+
150
+ # Your application code goes here...
151
+
152
+ # To cleanly shut down the agent when your app stops:
153
+ HyperProbe.shutdown()
154
+ ```
@@ -0,0 +1,24 @@
1
+ hyperprobe/__init__.py,sha256=ErvFIpUhK2fDe0vKIkUuEEs1mLf5BvrFQJczW4KBsP4,237
2
+ hyperprobe/agent.py,sha256=YUKtghBiRJVDQ5mNkShEy_KmkSU2Ng0RJWFubIf2hu8,22112
3
+ hyperprobe/bootstrap.py,sha256=arp0lWSdGDSGigen38PPTOEjwze6d14fLusQ7_cuOQg,1501
4
+ hyperprobe/core/__init__.py,sha256=1r5vPRYaDz5zQ5A5G4JPi9iEUxvBC1CzY8kqKKXr3JY,25
5
+ hyperprobe/core/broker.py,sha256=dpTUkWiokVN2vN7rzV4OUvNsilhGtXlWpjVckMV4J7Q,4467
6
+ hyperprobe/core/evaluator.py,sha256=NeW89apY_H7csF52OYmdwmvC2f3YJ-4pLrf4xklP7ws,4231
7
+ hyperprobe/core/logger.py,sha256=FroDqYVLnsY7hCIaIHwbYsPkeAYvyxJqlL1CJgEcSY8,4245
8
+ hyperprobe/core/monitoring_engine.py,sha256=PPD4aozQ8FP89KzAfxNBq4Q964YdOxK_4Du0K_101RY,31030
9
+ hyperprobe/core/probe_output.py,sha256=bw1kAkKOPfMzGFQcedd27mBWs9Wb-Hgy2606LUKrUEk,5410
10
+ hyperprobe/core/quota.py,sha256=P-lF0oWX5BI1Oz06-HSClAyv8YpHn1LrH--lgYExi6A,2259
11
+ hyperprobe/core/safety.py,sha256=we59VYMzDBNWCuFWFekx5jZ_xGHDWyBxZl-HeywaHBY,4621
12
+ hyperprobe/core/serializer.py,sha256=Q6z-GQFB-dojVO0OE2APYQiRDjZ1fZj98ITc0XmJyX4,6926
13
+ hyperprobe/core/trace_extractor.py,sha256=dvPh6ZVG4fbHhkXUu-qjtiHocdlhinWJBwG6D5BukQ4,3035
14
+ hyperprobe/core/injection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ hyperprobe/core/injection/sitecustomize.py,sha256=8CeHcyO5A-O3h1SPSEXibG-6DECYyW27_TCfErKylgM,773
16
+ hyperprobe/protos/__init__.py,sha256=JU1jQzcuydepMdz-b0Nd9mMwi6TkLEWMpM55r7QBwII,248
17
+ hyperprobe/protos/agent_pb2.py,sha256=A6j74DEvGJgwcNVaOoFtMtl0I3Y9wYIn3aC-ldbGOGU,8281
18
+ hyperprobe/protos/agent_pb2_grpc.py,sha256=gBQ0YDqWHqAUiE5iH0kVYl-mnSSu96WHX0ztO5X1RCg,8861
19
+ hyperprobe_agent-1.2.24.dist-info/licenses/LICENSE,sha256=DatEVqJNb8DiIMXzkSJfATqgcOdjMZiA2MZihcu_3MU,492
20
+ hyperprobe_agent-1.2.24.dist-info/METADATA,sha256=ULI93QU258yQrSGI-0o0IlBd_gGB8yPxOPe3e8o5Zqs,8061
21
+ hyperprobe_agent-1.2.24.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
22
+ hyperprobe_agent-1.2.24.dist-info/entry_points.txt,sha256=rq9v7B2STaSYyqS3OVQB4wTjbqPPmTtyXhUCkidYSYQ,61
23
+ hyperprobe_agent-1.2.24.dist-info/top_level.txt,sha256=_73ZHbABMnTWvNhqFoUOD0NF0ECScwIAiQqzyZCowRE,11
24
+ hyperprobe_agent-1.2.24.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ hyperprobe-run = hyperprobe.bootstrap:main
@@ -0,0 +1,13 @@
1
+ Hyperprobe Proprietary License
2
+
3
+ Copyright (c) 2026 Hyperprobe. All rights reserved.
4
+
5
+ This software and its associated documentation are proprietary to Hyperprobe.
6
+ No permission is granted to use, copy, modify, distribute, sublicense, or
7
+ create derivative works except as expressly authorized under a written
8
+ commercial license agreement with Hyperprobe.
9
+
10
+ A valid commercial license from Hyperprobe is required to operate this
11
+ software.
12
+
13
+ For licensing inquiries, visit https://hyperprobe.co/.
@@ -0,0 +1 @@
1
+ hyperprobe