MCPcopy Create free account
hub / github.com/cosdata/cosdata / QPSTracker

Class QPSTracker

tests/test_hybrid.py:147–199  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

145
146
147class QPSTracker:
148 def __init__(self):
149 self.query_times = []
150 self.total_queries = 0
151 self.failed_queries = 0
152 self.start_time = None
153 self.end_time = None
154 self.lock = threading.Lock()
155
156 def start_tracking(self):
157 self.start_time = time.time()
158 self.query_times = []
159 self.total_queries = 0
160 self.failed_queries = 0
161
162 def record_query_batch(self, batch_size, batch_duration, failed_count=0):
163 with self.lock:
164 self.total_queries += batch_size
165 self.failed_queries += failed_count
166 avg_query_time = batch_duration / batch_size if batch_size > 0 else 0
167 self.query_times.extend([avg_query_time] * (batch_size - failed_count))
168
169 def stop_tracking(self):
170 self.end_time = time.time()
171 return self.get_metrics()
172
173 def get_metrics(self):
174 if self.start_time is None or self.end_time is None:
175 return {
176 "qps": 0.0,
177 "avg_query_time": 0.0,
178 "total_queries": 0,
179 "successful_queries": 0,
180 "failed_queries": 0,
181 "total_duration": 0.0,
182 }
183
184 total_duration = self.end_time - self.start_time
185 successful_queries = self.total_queries - self.failed_queries
186
187 qps = successful_queries / total_duration if total_duration > 0 else 0
188 avg_query_time = (
189 sum(self.query_times) / len(self.query_times) if self.query_times else 0
190 )
191
192 return {
193 "qps": qps,
194 "avg_query_time": avg_query_time * 1000,
195 "total_queries": self.total_queries,
196 "successful_queries": successful_queries,
197 "failed_queries": self.failed_queries,
198 "total_duration": total_duration,
199 }
200
201DEFAULT_HOST = os.getenv("COSDATA_HOST", "http://127.0.0.1:8443")
202DEFAULT_USER = os.getenv("COSDATA_USERNAME", "admin")

Callers 1

Calls

no outgoing calls

Tested by 1