1
1
from api_to_dataframe .models .retainer import retry_strategies , Strategies
2
2
from api_to_dataframe .models .get_data import GetData
3
- from api_to_dataframe .utils .logger import logger , telemetry
4
- import time
3
+ from api_to_dataframe .utils .logger import logger
5
4
6
5
7
6
class ClientBuilder :
@@ -37,38 +36,18 @@ def __init__( # pylint: disable=too-many-positional-arguments,too-many-argument
37
36
if endpoint == "" :
38
37
error_msg = "endpoint cannot be an empty string"
39
38
logger .error (error_msg )
40
- telemetry .logs ().new_log (
41
- msg = error_msg ,
42
- tags = {"component" : "ClientBuilder" , "method" : "__init__" },
43
- level = 40 # ERROR level
44
- )
45
39
raise ValueError
46
40
if not isinstance (retries , int ) or retries < 0 :
47
41
error_msg = "retries must be a non-negative integer"
48
42
logger .error (error_msg )
49
- telemetry .logs ().new_log (
50
- msg = error_msg ,
51
- tags = {"component" : "ClientBuilder" , "method" : "__init__" },
52
- level = 40 # ERROR level
53
- )
54
43
raise ValueError
55
44
if not isinstance (initial_delay , int ) or initial_delay < 0 :
56
45
error_msg = "initial_delay must be a non-negative integer"
57
46
logger .error (error_msg )
58
- telemetry .logs ().new_log (
59
- msg = error_msg ,
60
- tags = {"component" : "ClientBuilder" , "method" : "__init__" },
61
- level = 40 # ERROR level
62
- )
63
47
raise ValueError
64
48
if not isinstance (connection_timeout , int ) or connection_timeout < 0 :
65
49
error_msg = "connection_timeout must be a non-negative integer"
66
50
logger .error (error_msg )
67
- telemetry .logs ().new_log (
68
- msg = error_msg ,
69
- tags = {"component" : "ClientBuilder" , "method" : "__init__" },
70
- level = 40 # ERROR level
71
- )
72
51
raise ValueError
73
52
74
53
self .endpoint = endpoint
@@ -78,28 +57,6 @@ def __init__( # pylint: disable=too-many-positional-arguments,too-many-argument
78
57
self .retries = retries
79
58
self .delay = initial_delay
80
59
81
- # Record client initialization metric
82
- telemetry .metrics ().metric_increment (
83
- name = "client.initialization" ,
84
- tags = {
85
- "endpoint" : endpoint ,
86
- "retry_strategy" : retry_strategy .name ,
87
- "connection_timeout" : str (connection_timeout )
88
- }
89
- )
90
-
91
- # Log initialization
92
- telemetry .logs ().new_log (
93
- msg = f"ClientBuilder initialized with endpoint { endpoint } " ,
94
- tags = {
95
- "endpoint" : endpoint ,
96
- "retry_strategy" : retry_strategy .name ,
97
- "connection_timeout" : str (connection_timeout ),
98
- "component" : "ClientBuilder"
99
- },
100
- level = 20 # INFO level
101
- )
102
-
103
60
@retry_strategies
104
61
def get_api_data (self ):
105
62
"""
@@ -112,67 +69,13 @@ def get_api_data(self):
112
69
Returns:
113
70
dict: The JSON response from the API as a dictionary.
114
71
"""
115
- # Use the telemetry spans with new API
116
- span = telemetry .traces ().new_span ("get_api_data" )
117
- try :
118
- # Add span attributes
119
- span .set_attribute ("endpoint" , self .endpoint )
120
- span .set_attribute ("retry_strategy" , self .retry_strategy .name )
121
- span .set_attribute ("connection_timeout" , self .connection_timeout )
122
-
123
- # Log the API request
124
- telemetry .logs ().new_log (
125
- msg = f"Making API request to { self .endpoint } " ,
126
- tags = {
127
- "endpoint" : self .endpoint ,
128
- "component" : "ClientBuilder" ,
129
- "method" : "get_api_data"
130
- },
131
- level = 20 # INFO level
132
- )
133
-
134
- # Record the start time for response time measurement
135
- start_time = time .time ()
136
-
137
- # Make the API request
138
- response = GetData .get_response (
139
- endpoint = self .endpoint ,
140
- headers = self .headers ,
141
- connection_timeout = self .connection_timeout ,
142
- )
143
-
144
- # Calculate response time
145
- response_time = time .time () - start_time
146
-
147
- # Record response time as histogram
148
- telemetry .metrics ().record_histogram (
149
- name = "api.response_time" ,
150
- tags = {"endpoint" : self .endpoint },
151
- value = response_time
152
- )
153
-
154
- # Record successful request metric
155
- telemetry .metrics ().metric_increment (
156
- name = "api.request.success" ,
157
- tags = {"endpoint" : self .endpoint }
158
- )
159
-
160
- # Log success
161
- telemetry .logs ().new_log (
162
- msg = f"API request to { self .endpoint } successful" ,
163
- tags = {
164
- "endpoint" : self .endpoint ,
165
- "response_status" : response .status_code ,
166
- "response_time" : response_time ,
167
- "component" : "ClientBuilder" ,
168
- "method" : "get_api_data"
169
- },
170
- level = 20 # INFO level
171
- )
72
+ response = GetData .get_response (
73
+ endpoint = self .endpoint ,
74
+ headers = self .headers ,
75
+ connection_timeout = self .connection_timeout ,
76
+ )
172
77
173
- return response .json ()
174
- finally :
175
- span .end ()
78
+ return response .json ()
176
79
177
80
@staticmethod
178
81
def api_to_dataframe (response : dict ):
@@ -189,69 +92,4 @@ def api_to_dataframe(response: dict):
189
92
Returns:
190
93
DataFrame: A pandas DataFrame containing the data from the API response.
191
94
"""
192
- # Use telemetry with new API
193
- span = telemetry .traces ().new_span ("api_to_dataframe" )
194
- try :
195
- response_size = len (response ) if isinstance (response , list ) else 1
196
- span .set_attribute ("response_size" , response_size )
197
-
198
- # Log conversion start
199
- telemetry .logs ().new_log (
200
- msg = "Converting API response to DataFrame" ,
201
- tags = {
202
- "response_size" : response_size ,
203
- "response_type" : type (response ).__name__ ,
204
- "component" : "ClientBuilder" ,
205
- "method" : "api_to_dataframe"
206
- },
207
- level = 20 # INFO level
208
- )
209
-
210
- try :
211
- # Convert to dataframe
212
- df = GetData .to_dataframe (response )
213
-
214
- # Record metrics
215
- telemetry .metrics ().metric_increment (
216
- name = "dataframe.conversion.success" ,
217
- tags = {"size" : len (df )}
218
- )
219
-
220
- # Log success
221
- telemetry .logs ().new_log (
222
- msg = "Successfully converted API response to DataFrame" ,
223
- tags = {
224
- "dataframe_rows" : len (df ),
225
- "dataframe_columns" : len (df .columns ),
226
- "component" : "ClientBuilder" ,
227
- "method" : "api_to_dataframe"
228
- },
229
- level = 20 # INFO level
230
- )
231
-
232
- return df
233
-
234
- except Exception as e :
235
- # Record failure metric
236
- telemetry .metrics ().metric_increment (
237
- name = "dataframe.conversion.failure" ,
238
- tags = {"error_type" : type (e ).__name__ }
239
- )
240
-
241
- # Log error
242
- error_msg = f"Failed to convert API response to DataFrame: { str (e )} "
243
- telemetry .logs ().new_log (
244
- msg = error_msg ,
245
- tags = {
246
- "error" : str (e ),
247
- "error_type" : type (e ).__name__ ,
248
- "component" : "ClientBuilder" ,
249
- "method" : "api_to_dataframe"
250
- },
251
- level = 40 # ERROR level
252
- )
253
-
254
- # Re-raise the exception
255
- raise
256
- finally :
257
- span .end ()
95
+ return GetData .to_dataframe (response )
0 commit comments