quasardb 3.14.2.dev5__cp312-cp312-macosx_11_0_arm64.whl → 3.14.2.dev7__cp312-cp312-macosx_11_0_arm64.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.
Potentially problematic release.
This version of quasardb might be problematic. Click here for more details.
- quasardb/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
- quasardb/Makefile +11 -11
- quasardb/__init__.py +8 -5
- quasardb/__init__.pyi +72 -0
- quasardb/cmake_install.cmake +1 -1
- quasardb/date/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
- quasardb/date/CMakeFiles/Export/a52b05f964b070ee926bcad51d3288af/dateTargets.cmake +1 -1
- quasardb/date/Makefile +11 -11
- quasardb/date/cmake_install.cmake +1 -1
- quasardb/date/dateTargets.cmake +1 -1
- quasardb/libqdb_api.dylib +0 -0
- quasardb/numpy/__init__.py +126 -43
- quasardb/pandas/__init__.py +55 -20
- quasardb/pool.py +6 -0
- quasardb/pybind11/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
- quasardb/pybind11/Makefile +11 -11
- quasardb/pybind11/cmake_install.cmake +1 -1
- quasardb/quasardb/__init__.pyi +97 -0
- quasardb/quasardb/_batch_column.pyi +5 -0
- quasardb/quasardb/_batch_inserter.pyi +30 -0
- quasardb/quasardb/_blob.pyi +16 -0
- quasardb/quasardb/_cluster.pyi +100 -0
- quasardb/quasardb/_continuous.pyi +16 -0
- quasardb/quasardb/_double.pyi +7 -0
- quasardb/quasardb/_entry.pyi +60 -0
- quasardb/quasardb/_error.pyi +15 -0
- quasardb/quasardb/_integer.pyi +7 -0
- quasardb/quasardb/_node.pyi +26 -0
- quasardb/quasardb/_options.pyi +105 -0
- quasardb/quasardb/_perf.pyi +5 -0
- quasardb/quasardb/_properties.pyi +5 -0
- quasardb/quasardb/_query.pyi +2 -0
- quasardb/quasardb/_reader.pyi +9 -0
- quasardb/quasardb/_retry.pyi +16 -0
- quasardb/quasardb/_string.pyi +12 -0
- quasardb/quasardb/_table.pyi +125 -0
- quasardb/quasardb/_tag.pyi +5 -0
- quasardb/quasardb/_timestamp.pyi +9 -0
- quasardb/quasardb/_writer.pyi +111 -0
- quasardb/quasardb/metrics/__init__.pyi +20 -0
- quasardb/quasardb.cpython-312-darwin.so +0 -0
- quasardb/range-v3/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
- quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake +1 -1
- quasardb/range-v3/CMakeFiles/range.v3.headers.dir/build.make +3 -3
- quasardb/range-v3/Makefile +11 -11
- quasardb/range-v3/cmake_install.cmake +1 -1
- quasardb/range-v3/range-v3-config.cmake +1 -1
- quasardb/stats.py +223 -110
- {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/METADATA +3 -2
- quasardb-3.14.2.dev7.dist-info/RECORD +69 -0
- {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/WHEEL +1 -1
- quasardb-3.14.2.dev5.dist-info/RECORD +0 -45
- {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info/licenses}/LICENSE.md +0 -0
- {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/top_level.txt +0 -0
quasardb/stats.py
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import re
|
|
2
|
+
|
|
2
3
|
import quasardb
|
|
3
4
|
import logging
|
|
5
|
+
from collections import defaultdict
|
|
4
6
|
from datetime import datetime
|
|
7
|
+
from enum import Enum
|
|
5
8
|
|
|
6
9
|
logger = logging.getLogger("quasardb.stats")
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
MAX_KEYS = 4 * 1024 * 1024 # 4 million max keys
|
|
9
12
|
stats_prefix = "$qdb.statistics."
|
|
13
|
+
|
|
14
|
+
# Compile these regexes once for speed
|
|
10
15
|
user_pattern = re.compile(r"\$qdb.statistics.(.*).uid_([0-9]+)$")
|
|
11
16
|
total_pattern = re.compile(r"\$qdb.statistics.(.*)$")
|
|
17
|
+
user_clean_pattern = re.compile(r"\.uid_\d+")
|
|
12
18
|
|
|
13
19
|
|
|
14
20
|
def is_user_stat(s):
|
|
@@ -50,49 +56,29 @@ def of_node(dconn):
|
|
|
50
56
|
"""
|
|
51
57
|
|
|
52
58
|
start = datetime.now()
|
|
53
|
-
raw = {k: _get_stat(dconn, k) for k in dconn.prefix_get(stats_prefix, 1000)}
|
|
54
59
|
|
|
55
|
-
|
|
60
|
+
ks = _get_all_keys(dconn)
|
|
61
|
+
idx = _index_keys(dconn, ks)
|
|
62
|
+
raw = {k: _get_stat_value(dconn, k) for k in ks}
|
|
63
|
+
|
|
64
|
+
ret = {"by_uid": _by_uid(raw, idx), "cumulative": _cumulative(raw, idx)}
|
|
56
65
|
|
|
57
66
|
check_duration = datetime.now() - start
|
|
58
67
|
|
|
59
|
-
ret["cumulative"]["check.online"] =
|
|
60
|
-
|
|
68
|
+
ret["cumulative"]["check.online"] = {
|
|
69
|
+
"value": 1,
|
|
70
|
+
"type": Type.ACCUMULATOR,
|
|
71
|
+
"unit": Unit.NONE,
|
|
72
|
+
}
|
|
73
|
+
ret["cumulative"]["check.duration_ms"] = {
|
|
74
|
+
"value": int(check_duration.total_seconds() * 1000),
|
|
75
|
+
"type": Type.ACCUMULATOR,
|
|
76
|
+
"unit": Unit.MILLISECONDS,
|
|
77
|
+
}
|
|
61
78
|
|
|
62
79
|
return ret
|
|
63
80
|
|
|
64
81
|
|
|
65
|
-
_stat_types = {
|
|
66
|
-
"node_id": ("constant", None),
|
|
67
|
-
"operating_system": ("constant", None),
|
|
68
|
-
"partitions_count": ("constant", "count"),
|
|
69
|
-
"cpu.system": ("counter", "ns"),
|
|
70
|
-
"cpu.user": ("counter", "ns"),
|
|
71
|
-
"cpu.idle": ("counter", "ns"),
|
|
72
|
-
"startup": ("constant", None),
|
|
73
|
-
"startup_time": ("constant", None),
|
|
74
|
-
"shutdown_time": ("constant", None),
|
|
75
|
-
"network.current_users_count": ("gauge", "count"),
|
|
76
|
-
"hardware_concurrency": ("gauge", "count"),
|
|
77
|
-
"check.online": ("gauge", "count"),
|
|
78
|
-
"check.duration_ms": ("constant", "ms"),
|
|
79
|
-
"requests.bytes_in": ("counter", "bytes"),
|
|
80
|
-
"requests.bytes_out": ("counter", "bytes"),
|
|
81
|
-
"requests.errors_count": ("counter", "count"),
|
|
82
|
-
"requests.successes_count": ("counter", "count"),
|
|
83
|
-
"requests.total_count": ("counter", "count"),
|
|
84
|
-
"async_pipelines.merge.bucket_count": ("counter", "count"),
|
|
85
|
-
"async_pipelines.merge.duration_us": ("counter", "us"),
|
|
86
|
-
"async_pipelines.write.successes_count": ("counter", "count"),
|
|
87
|
-
"async_pipelines.write.failures_count": ("counter", "count"),
|
|
88
|
-
"async_pipelines.write.time_us": ("counter", "us"),
|
|
89
|
-
"async_pipelines.merge.max_bucket_count": ("gauge", "count"),
|
|
90
|
-
"async_pipelines.merge.max_depth_count": ("gauge", "count"),
|
|
91
|
-
"async_pipelines.merge.requests_count": ("counter", "count"),
|
|
92
|
-
"evicted.count": ("counter", "count"),
|
|
93
|
-
"pageins.count": ("counter", "count"),
|
|
94
|
-
}
|
|
95
|
-
|
|
96
82
|
async_pipeline_bytes_pattern = re.compile(
|
|
97
83
|
r"async_pipelines.pipe_[0-9]+.merge_map.bytes"
|
|
98
84
|
)
|
|
@@ -101,39 +87,6 @@ async_pipeline_count_pattern = re.compile(
|
|
|
101
87
|
)
|
|
102
88
|
|
|
103
89
|
|
|
104
|
-
def _stat_type(stat_id):
|
|
105
|
-
if stat_id in _stat_types:
|
|
106
|
-
return _stat_types[stat_id]
|
|
107
|
-
elif stat_id.endswith("total_ns"):
|
|
108
|
-
return ("counter", "ns")
|
|
109
|
-
elif stat_id.endswith("total_bytes"):
|
|
110
|
-
return ("counter", "bytes")
|
|
111
|
-
elif stat_id.endswith("read_bytes"):
|
|
112
|
-
return ("counter", "bytes")
|
|
113
|
-
elif stat_id.endswith("written_bytes"):
|
|
114
|
-
return ("counter", "bytes")
|
|
115
|
-
elif stat_id.endswith("total_count"):
|
|
116
|
-
return ("counter", "count")
|
|
117
|
-
elif stat_id.startswith("network.sessions."):
|
|
118
|
-
return ("gauge", "count")
|
|
119
|
-
elif stat_id.startswith("memory."):
|
|
120
|
-
# memory statistics are all gauges i think, describes how much memory currently allocated where
|
|
121
|
-
return ("gauge", "bytes")
|
|
122
|
-
elif stat_id.startswith("persistence.") or stat_id.startswith("disk"):
|
|
123
|
-
# persistence are also all gauges, describes mostly how much is currently available/used on storage
|
|
124
|
-
return ("gauge", "bytes")
|
|
125
|
-
elif stat_id.startswith("license."):
|
|
126
|
-
return ("gauge", None)
|
|
127
|
-
elif stat_id.startswith("engine_"):
|
|
128
|
-
return ("constant", None)
|
|
129
|
-
elif async_pipeline_bytes_pattern.match(stat_id):
|
|
130
|
-
return ("gauge", "bytes")
|
|
131
|
-
elif async_pipeline_count_pattern.match(stat_id):
|
|
132
|
-
return ("gauge", "count")
|
|
133
|
-
else:
|
|
134
|
-
return None
|
|
135
|
-
|
|
136
|
-
|
|
137
90
|
def stat_type(stat_id):
|
|
138
91
|
"""
|
|
139
92
|
Returns the statistic type by a stat id. Returns one of:
|
|
@@ -144,66 +97,193 @@ def stat_type(stat_id):
|
|
|
144
97
|
|
|
145
98
|
This is useful for determining which value should be reported in a dashboard.
|
|
146
99
|
"""
|
|
147
|
-
|
|
148
|
-
|
|
100
|
+
import warnings
|
|
149
101
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
"
|
|
153
|
-
|
|
154
|
-
|
|
102
|
+
warnings.warn(
|
|
103
|
+
"The 'stat_type' method is deprecated and will be removed in a future release."
|
|
104
|
+
"The stat type and unit are now part of the return value of invocations to the 'of_node' and 'by_node' methods.",
|
|
105
|
+
DeprecationWarning,
|
|
106
|
+
stacklevel=2,
|
|
155
107
|
)
|
|
156
108
|
|
|
157
|
-
|
|
158
|
-
if stat_type == "counter":
|
|
159
|
-
return cur - prev
|
|
160
|
-
elif stat_type == "gauge":
|
|
161
|
-
return cur
|
|
162
|
-
else:
|
|
163
|
-
return None
|
|
109
|
+
return None
|
|
164
110
|
|
|
165
111
|
|
|
166
|
-
def
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
try:
|
|
170
|
-
prev_stat = cur_stats[stat_id]
|
|
171
|
-
cur_stat = cur_stats[stat_id]
|
|
112
|
+
def _get_all_keys(dconn, n=1024):
|
|
113
|
+
"""
|
|
114
|
+
Returns all keys from a single node.
|
|
172
115
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
116
|
+
Parameters:
|
|
117
|
+
dconn: quasardb.Node
|
|
118
|
+
Direct node connection to the node we wish to connect to.
|
|
176
119
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
120
|
+
n: int
|
|
121
|
+
Number of keys to retrieve.
|
|
122
|
+
"""
|
|
123
|
+
xs = None
|
|
124
|
+
increase_rate = 8
|
|
125
|
+
# keep getting keys while number of results exceeds the given "n"
|
|
126
|
+
while xs is None or len(xs) >= n:
|
|
127
|
+
if xs is not None:
|
|
128
|
+
n = n * increase_rate
|
|
129
|
+
if n >= MAX_KEYS:
|
|
130
|
+
raise Exception(f"ERROR: Cannot fetch more than {MAX_KEYS} keys.")
|
|
131
|
+
xs = dconn.prefix_get(stats_prefix, n)
|
|
180
132
|
|
|
181
|
-
return
|
|
133
|
+
return xs
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class Type(Enum):
|
|
137
|
+
ACCUMULATOR = 1
|
|
138
|
+
GAUGE = 2
|
|
139
|
+
LABEL = 3
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class Unit(Enum):
|
|
143
|
+
NONE = 0
|
|
144
|
+
COUNT = 1
|
|
145
|
+
|
|
146
|
+
# Size units
|
|
147
|
+
BYTES = 32
|
|
148
|
+
|
|
149
|
+
# Time/duration units
|
|
150
|
+
EPOCH = 64
|
|
151
|
+
NANOSECONDS = 65
|
|
152
|
+
MICROSECONDS = 66
|
|
153
|
+
MILLISECONDS = 67
|
|
154
|
+
SECONDS = 68
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
_type_string_to_enum = {
|
|
158
|
+
"accumulator": Type.ACCUMULATOR,
|
|
159
|
+
"gauge": Type.GAUGE,
|
|
160
|
+
"label": Type.LABEL,
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
_unit_string_to_enum = {
|
|
164
|
+
"none": Unit.NONE,
|
|
165
|
+
"count": Unit.COUNT,
|
|
166
|
+
"bytes": Unit.BYTES,
|
|
167
|
+
"epoch": Unit.EPOCH,
|
|
168
|
+
"nanoseconds": Unit.NANOSECONDS,
|
|
169
|
+
"microseconds": Unit.MICROSECONDS,
|
|
170
|
+
"milliseconds": Unit.MILLISECONDS,
|
|
171
|
+
"seconds": Unit.SECONDS,
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def _lookup_enum(dconn, k, m):
|
|
176
|
+
"""
|
|
177
|
+
Utility function to avoid code duplication: automatically looks up a key's value
|
|
178
|
+
from QuasarDB and looks it up in provided dict.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
x = dconn.blob(k).get()
|
|
182
|
+
x = _clean_blob(x)
|
|
183
|
+
|
|
184
|
+
if x not in m:
|
|
185
|
+
raise Exception(f"Unrecognized unit/type {x} from key {k}")
|
|
186
|
+
|
|
187
|
+
return m[x]
|
|
182
188
|
|
|
183
189
|
|
|
184
|
-
def
|
|
190
|
+
def _lookup_type(dconn, k):
|
|
185
191
|
"""
|
|
186
|
-
|
|
192
|
+
Looks up and parses/validates the metric type.
|
|
187
193
|
"""
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
194
|
+
assert k.endswith(".type")
|
|
195
|
+
|
|
196
|
+
return _lookup_enum(dconn, k, _type_string_to_enum)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def _lookup_unit(dconn, k):
|
|
200
|
+
"""
|
|
201
|
+
Looks up and parses/validates the metric type.
|
|
202
|
+
"""
|
|
203
|
+
assert k.endswith(".unit")
|
|
204
|
+
|
|
205
|
+
return _lookup_enum(dconn, k, _unit_string_to_enum)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def _index_keys(dconn, ks):
|
|
209
|
+
"""
|
|
210
|
+
Takes all statistics keys that are retrieved, and "indexes" them in such a way
|
|
211
|
+
that we end up with a dict of all statistic keys, their type and their unit.
|
|
212
|
+
"""
|
|
213
|
+
|
|
214
|
+
###
|
|
215
|
+
# The keys generally look like this, for example:
|
|
216
|
+
#
|
|
217
|
+
# $qdb.statistics.requests.out_bytes
|
|
218
|
+
# $qdb.statistics.requests.out_bytes.type
|
|
219
|
+
# $qdb.statistics.requests.out_bytes.uid_1
|
|
220
|
+
# $qdb.statistics.requests.out_bytes.uid_1.type
|
|
221
|
+
# $qdb.statistics.requests.out_bytes.uid_1.unit
|
|
222
|
+
# $qdb.statistics.requests.out_bytes.unit
|
|
223
|
+
#
|
|
224
|
+
# For this purpose, we simply get rid of the "uid" part, as the per-uid metrics are guaranteed
|
|
225
|
+
# to be of the exact same type as all the others. So after trimming those, the keys will look
|
|
226
|
+
# like this:
|
|
227
|
+
#
|
|
228
|
+
# $qdb.statistics.requests.out_bytes
|
|
229
|
+
# $qdb.statistics.requests.out_bytes.type
|
|
230
|
+
# $qdb.statistics.requests.out_bytes
|
|
231
|
+
# $qdb.statistics.requests.out_bytes.type
|
|
232
|
+
# $qdb.statistics.requests.out_bytes.unit
|
|
233
|
+
# $qdb.statistics.requests.out_bytes.unit
|
|
234
|
+
#
|
|
235
|
+
# And after deduplication like this:
|
|
236
|
+
#
|
|
237
|
+
# $qdb.statistics.requests.out_bytes
|
|
238
|
+
# $qdb.statistics.requests.out_bytes.type
|
|
239
|
+
# $qdb.statistics.requests.out_bytes.unit
|
|
240
|
+
#
|
|
241
|
+
# In which case we'll store `requests.out_bytes` as the statistic type, and look up the type
|
|
242
|
+
# and unit for those metrics and add a placeholder value.
|
|
243
|
+
|
|
244
|
+
ret = defaultdict(lambda: {"value": None, "type": None, "unit": None})
|
|
245
|
+
|
|
246
|
+
for k in ks:
|
|
247
|
+
# Remove any 'uid_[0-9]+' part from the string
|
|
248
|
+
k_ = user_clean_pattern.sub("", k)
|
|
249
|
+
|
|
250
|
+
matches = total_pattern.match(k_)
|
|
251
|
+
|
|
252
|
+
parts = matches.groups()[0].rsplit(".", 1)
|
|
253
|
+
metric_id = parts[0]
|
|
254
|
+
|
|
255
|
+
if len(parts) > 1 and parts[1] == "type":
|
|
256
|
+
if ret[metric_id]["type"] == None:
|
|
257
|
+
# We haven't seen this particular statistic yet
|
|
258
|
+
ret[metric_id]["type"] = _lookup_type(dconn, k)
|
|
259
|
+
elif len(parts) > 1 and parts[1] == "unit":
|
|
260
|
+
if ret[metric_id]["unit"] == None:
|
|
261
|
+
# We haven't seen this particular statistic yet
|
|
262
|
+
ret[metric_id]["unit"] = _lookup_unit(dconn, k)
|
|
263
|
+
else:
|
|
264
|
+
# It's a value, we look those up later
|
|
265
|
+
pass
|
|
193
266
|
|
|
194
267
|
return ret
|
|
195
268
|
|
|
196
269
|
|
|
197
270
|
def _clean_blob(x):
|
|
271
|
+
"""
|
|
272
|
+
Utility function that decodes a blob as an UTF-8 string, as the direct node C API
|
|
273
|
+
does not yet support 'string' types and as such all statistics are stored as blobs.
|
|
274
|
+
"""
|
|
198
275
|
x_ = x.decode("utf-8", "replace")
|
|
199
276
|
|
|
200
277
|
# remove trailing zero-terminator
|
|
201
278
|
return "".join(c for c in x_ if ord(c) != 0)
|
|
202
279
|
|
|
203
280
|
|
|
204
|
-
def
|
|
281
|
+
def _get_stat_value(dconn, k):
|
|
205
282
|
# Ugly, but works: try to retrieve as integer, if not an int, retrieve as
|
|
206
283
|
# blob
|
|
284
|
+
#
|
|
285
|
+
# XXX(leon): we could use the index we built to get a much stronger hint
|
|
286
|
+
# on what the type is.
|
|
207
287
|
try:
|
|
208
288
|
return dconn.integer(k).get()
|
|
209
289
|
|
|
@@ -216,30 +296,63 @@ def _get_stat(dconn, k):
|
|
|
216
296
|
return _clean_blob(dconn.blob(k).get())
|
|
217
297
|
|
|
218
298
|
|
|
219
|
-
def _by_uid(stats):
|
|
299
|
+
def _by_uid(stats, idx):
|
|
220
300
|
xs = {}
|
|
221
301
|
for k, v in stats.items():
|
|
222
302
|
matches = user_pattern.match(k)
|
|
223
303
|
if is_user_stat(k) and matches:
|
|
224
304
|
(metric, uid_str) = matches.groups()
|
|
305
|
+
|
|
306
|
+
if metric.split(".")[-1] in ["type", "unit"]:
|
|
307
|
+
# We already indexed the type and unit in our idx, this is not interesting
|
|
308
|
+
continue
|
|
309
|
+
|
|
310
|
+
if metric.startswith("serialized"):
|
|
311
|
+
# Internal stuff we don't care about nor cannot do anything with
|
|
312
|
+
continue
|
|
313
|
+
|
|
314
|
+
if not metric in idx:
|
|
315
|
+
raise Exception(f"Metric not in internal index: {metric}")
|
|
316
|
+
|
|
317
|
+
# Parse user id
|
|
225
318
|
uid = int(uid_str)
|
|
319
|
+
|
|
320
|
+
# Prepare our metric dict
|
|
321
|
+
x = idx[metric].copy()
|
|
322
|
+
x["value"] = v
|
|
323
|
+
|
|
226
324
|
if uid not in xs:
|
|
227
325
|
xs[uid] = {}
|
|
228
326
|
|
|
229
|
-
|
|
230
|
-
xs[uid][metric] = v
|
|
327
|
+
xs[uid][metric] = x
|
|
231
328
|
|
|
232
329
|
return xs
|
|
233
330
|
|
|
234
331
|
|
|
235
|
-
def _cumulative(stats):
|
|
332
|
+
def _cumulative(stats, idx):
|
|
236
333
|
xs = {}
|
|
237
334
|
|
|
238
335
|
for k, v in stats.items():
|
|
239
336
|
matches = total_pattern.match(k)
|
|
240
337
|
if is_cumulative_stat(k) and matches:
|
|
241
338
|
metric = matches.groups()[0]
|
|
242
|
-
|
|
243
|
-
|
|
339
|
+
|
|
340
|
+
if metric.split(".")[-1] in ["type", "unit"]:
|
|
341
|
+
# We already indexed the type and unit in our idx, this is not interesting
|
|
342
|
+
continue
|
|
343
|
+
|
|
344
|
+
if metric.startswith("serialized"):
|
|
345
|
+
# Internal stuff we don't care about nor cannot do anything with
|
|
346
|
+
continue
|
|
347
|
+
|
|
348
|
+
if not metric in idx:
|
|
349
|
+
raise Exception(f"Metric not in internal index: {metric}")
|
|
350
|
+
|
|
351
|
+
x = idx[metric].copy()
|
|
352
|
+
x["value"] = v
|
|
353
|
+
xs[metric] = x
|
|
244
354
|
|
|
245
355
|
return xs
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
# async_pipelines.buffer.total_bytes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: quasardb
|
|
3
|
-
Version: 3.14.2.
|
|
3
|
+
Version: 3.14.2.dev7
|
|
4
4
|
Summary: Python API for quasardb
|
|
5
5
|
Home-page: https://www.quasardb.net/
|
|
6
6
|
Author: quasardb SAS
|
|
@@ -35,6 +35,7 @@ Dynamic: classifier
|
|
|
35
35
|
Dynamic: home-page
|
|
36
36
|
Dynamic: keywords
|
|
37
37
|
Dynamic: license
|
|
38
|
+
Dynamic: license-file
|
|
38
39
|
Dynamic: provides-extra
|
|
39
40
|
Dynamic: requires-dist
|
|
40
41
|
Dynamic: summary
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
quasardb/Makefile,sha256=UvrG4j3FfNsg7wyNarTR7gVILA0sP1TNkf2iJMCruD0,8316
|
|
2
|
+
quasardb/__init__.py,sha256=AVL-vz_zSEr6uoShycqB6r-1g5FXofTgQ_Yf1_l5Epg,4729
|
|
3
|
+
quasardb/__init__.pyi,sha256=O1gBZNZd3BYdSOZ_WaItU7lO10Jjj1I-yYimnDbU67s,1438
|
|
4
|
+
quasardb/cmake_install.cmake,sha256=B64SvirVzbgfXQRX3rVk56T1ScAIAD0T1VpG-yaT_H8,1980
|
|
5
|
+
quasardb/firehose.py,sha256=_kSHuu2rTDHij1RpPLfsnbaiX_rSw-hurhBw54VNS2w,3350
|
|
6
|
+
quasardb/libqdb_api.dylib,sha256=v7cuLm3eJZZMJtGPrDnvPqv9i6v0tV1V5AmsxaYRNco,47685088
|
|
7
|
+
quasardb/pool.py,sha256=A3SZzlSLgEJXhBeIgKJYK8yBVR9cMyC8lxU1wLhKo_Y,8598
|
|
8
|
+
quasardb/quasardb.cpython-312-darwin.so,sha256=FLyX4W37PEXhMEnmVWBVlnha9vlnAky-agLlMtLsRtY,918160
|
|
9
|
+
quasardb/stats.py,sha256=XfMBSQoFbTNAFeyElhAXQRVFueHscmf5cg4zKSWnY2I,9750
|
|
10
|
+
quasardb/table_cache.py,sha256=gYX4wqx4v4uKUE-GE24g-ZOi-OtE67IVDdUcNCIik-w,1511
|
|
11
|
+
quasardb/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=mzBd6L4PKV9G5L0Q-4U4f7nPNXfbembryiq1Wlv0mEQ,731
|
|
12
|
+
quasardb/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
13
|
+
quasardb/date/Makefile,sha256=sdWDjTlA-Prs7ZUO9tOtE_EjL8HJR2noyTWEvRNFvJw,8341
|
|
14
|
+
quasardb/date/cmake_install.cmake,sha256=-knDrT42JvuOmGW8Dfbb5Pr00Da3hLFuskt5GtAvKvk,3561
|
|
15
|
+
quasardb/date/dateConfigVersion.cmake,sha256=rL5Cp_r_23Yu8HmjowwKIH04sxxMwdBZ7no3tr4cx14,2762
|
|
16
|
+
quasardb/date/dateTargets.cmake,sha256=andjNgVitf008amH6Qwyq2NLlVeyVGl7hJMQH6t772U,2869
|
|
17
|
+
quasardb/date/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=mzBd6L4PKV9G5L0Q-4U4f7nPNXfbembryiq1Wlv0mEQ,731
|
|
18
|
+
quasardb/date/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
19
|
+
quasardb/date/CMakeFiles/Export/a52b05f964b070ee926bcad51d3288af/dateTargets.cmake,sha256=QHGjawFaQWDEnJp-O3j5mkytsHjSQurPEpGddDLa_5s,4211
|
|
20
|
+
quasardb/extensions/__init__.py,sha256=FUHR0i62qt5NkOXn7eiMZrzWXo9mQNr1xVz3VSCa9QU,112
|
|
21
|
+
quasardb/extensions/writer.py,sha256=uRL4fVkucd7vwdFySnPLpH4DuNK4bVtXCSRxQk4YJ-g,5567
|
|
22
|
+
quasardb/numpy/__init__.py,sha256=9sS2XyQcmbZxtcTesc2BBlBCJNtCubqgXOCuJAxAx2E,34420
|
|
23
|
+
quasardb/pandas/__init__.py,sha256=GtwhNrDkfiyibfv6PxR3LzVa2vMn7cpxvzuXkPrZesU,17433
|
|
24
|
+
quasardb/pybind11/Makefile,sha256=zxJ_DZyRyJVZp0TbvSXh4Zqe3v9fZWNbkwMNRbJ1Opo,8361
|
|
25
|
+
quasardb/pybind11/cmake_install.cmake,sha256=XefBgP1FJ8tKvEEub_5CQBUYN65rpQIXbHZGyWD4_RE,1485
|
|
26
|
+
quasardb/pybind11/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=mzBd6L4PKV9G5L0Q-4U4f7nPNXfbembryiq1Wlv0mEQ,731
|
|
27
|
+
quasardb/pybind11/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
28
|
+
quasardb/quasardb/__init__.pyi,sha256=GE1wGHJFQDODwHzsjbH6JqUXJllz6e6WeonXDqapR6k,2160
|
|
29
|
+
quasardb/quasardb/_batch_column.pyi,sha256=BVfOELOFlGvkG79KCW_9MuV5KQukaWBKCLpeyUddez0,173
|
|
30
|
+
quasardb/quasardb/_batch_inserter.pyi,sha256=l4wuspVydft0SJWBL_bGKnjGtCf2cDOZIrG78IfEeKw,1081
|
|
31
|
+
quasardb/quasardb/_blob.pyi,sha256=fVpF69GoOlgY20PDPL3m0YVIVDdwyCbYElFwApfU5R8,524
|
|
32
|
+
quasardb/quasardb/_cluster.pyi,sha256=Ozc0fb7wA5Gn1B6rLg7PSNRimeCm3C_QpnDiQmAKlHg,3864
|
|
33
|
+
quasardb/quasardb/_continuous.pyi,sha256=iSju01ayM66fsGlcQjDNNb-pftSdAIovWj0l9HrcIRg,486
|
|
34
|
+
quasardb/quasardb/_double.pyi,sha256=RRCygCQByWD20yrEXIYt0AcmZiKytxflDEthWv8Ykf8,240
|
|
35
|
+
quasardb/quasardb/_entry.pyi,sha256=WgxhDqssNQqPWlIiiMNsVSXTSq2ni5kGKDTzWSH8IRQ,2531
|
|
36
|
+
quasardb/quasardb/_error.pyi,sha256=DVMLFtN7m-tRHVx2AhZm2WPjKn5ZeJd6PDKUeXwp-b4,564
|
|
37
|
+
quasardb/quasardb/_integer.pyi,sha256=3zMfrdJZ6fZj9RMpwe9mWFCoAoccOuASi3yMaq83gSc,233
|
|
38
|
+
quasardb/quasardb/_node.pyi,sha256=tYSQeNoKEkFlbj-8GpCRtwlPALAyzSVTuWjS07e08GQ,835
|
|
39
|
+
quasardb/quasardb/_options.pyi,sha256=zosb_CZqLvuKLp43UQ0H2uC4q2R7btLDC2uID6NgiXo,4657
|
|
40
|
+
quasardb/quasardb/_perf.pyi,sha256=3ryBZXFuRd29258HHZz6euXT6P-i6G8yBgs6vQge0ug,187
|
|
41
|
+
quasardb/quasardb/_properties.pyi,sha256=Im03-ildL2w5VhcuNmDAWnkKY8BTkm9mQlL4rg15MhU,195
|
|
42
|
+
quasardb/quasardb/_query.pyi,sha256=cFTvl0SQvtGd4lAofcBlOoP2E0ZmWymGI4JSvVXpA8A,53
|
|
43
|
+
quasardb/quasardb/_reader.pyi,sha256=Yb6Mew9Y43DH2k5I4kdGz5G00e5ltA6Zr22m9m3xqNU,300
|
|
44
|
+
quasardb/quasardb/_retry.pyi,sha256=Arb964aoqf4rk6YY5_R0dpa-rU7RsCjp6Cn1C2A2xsM,375
|
|
45
|
+
quasardb/quasardb/_string.pyi,sha256=NK9JBMtR1bQNel3T5kjNhTiJuYh-tJhC8rrG-2VUtgM,456
|
|
46
|
+
quasardb/quasardb/_table.pyi,sha256=in6LVORrkbed1NRzdjpiFN6juViTuHEtsPue5eUoVY8,4735
|
|
47
|
+
quasardb/quasardb/_tag.pyi,sha256=E-9aYCtv_PI83YHfE9Lt1dnGqoMTg7MHhDKbTlMfFU8,121
|
|
48
|
+
quasardb/quasardb/_timestamp.pyi,sha256=vCjArhHfBvpeNlnxF6cSgSixgbDG2qJPeS7ECJzUV5E,326
|
|
49
|
+
quasardb/quasardb/_writer.pyi,sha256=N_qMi3-v3Rem0bShp9Nz3BNAnRhe1lyEgnKvlXNrVts,3495
|
|
50
|
+
quasardb/quasardb/metrics/__init__.pyi,sha256=IJpl9woTGczp0cgBZxHe1DDf_dnTPphUECVhazQ8Crg,476
|
|
51
|
+
quasardb/range-v3/Makefile,sha256=HaF__RUqgN0RZehgepvfQa0a5E6pJz_ePmJ14_i8Y8U,9730
|
|
52
|
+
quasardb/range-v3/cmake_install.cmake,sha256=s2uUQ4u0adRBYqm7zBmtYaRytr6T4ECWjWblh24LzoA,4531
|
|
53
|
+
quasardb/range-v3/range-v3-config-version.cmake,sha256=xGi8nCg5dIl5VmCOtTEVVa-dwABxKxLEd1Mx-bUvLLM,3249
|
|
54
|
+
quasardb/range-v3/range-v3-config.cmake,sha256=3AFIzkaCzdFLuLpvQzhxlzBA-du_66jisQkIIlf6nuU,3423
|
|
55
|
+
quasardb/range-v3/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=mzBd6L4PKV9G5L0Q-4U4f7nPNXfbembryiq1Wlv0mEQ,731
|
|
56
|
+
quasardb/range-v3/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
57
|
+
quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake,sha256=vUOVk2QA2ZyV4o7G3ws9ebAACryLJXa7lrE24yvVP14,5265
|
|
58
|
+
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/DependInfo.cmake,sha256=ssojOAtcndfwexIOMvsRoVek3vdNgBmUVZscjIj5L1U,585
|
|
59
|
+
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/build.make,sha256=iTqNL375Xw1FWjsPKFKC7cJ-6qarDG5h93NLatRKFJ4,4458
|
|
60
|
+
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/cmake_clean.cmake,sha256=3b0pZoiofoRzAiY1l7OLw203ZXp-mm1FUlQHob6i7aU,160
|
|
61
|
+
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.make,sha256=Oge9eptzOB-hllw_Tye4o5wiXsIsdq1xm1GGCe0oGFM,126
|
|
62
|
+
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.ts,sha256=orKrKpvHulgFBjBgzdeRvCpv0fV7cTffTdaHNqijFJg,120
|
|
63
|
+
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/progress.make,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
64
|
+
quasardb/range-v3/include/range/v3/version.hpp,sha256=d-ToEdR3GnC_p_0RAeS77xL-SVx6EKHgTlWJ9PUQlSQ,586
|
|
65
|
+
quasardb-3.14.2.dev7.dist-info/licenses/LICENSE.md,sha256=_drOadIrIX8mzUZcnTJBTpUQih5gwdRAGK8ZKanYD6k,1467
|
|
66
|
+
quasardb-3.14.2.dev7.dist-info/METADATA,sha256=EMtC_EMGBOedaQVmq1xXQpxk5p-E7jyOFiJkHxiBE2g,1465
|
|
67
|
+
quasardb-3.14.2.dev7.dist-info/WHEEL,sha256=CltXN3lQvXbHxKDtiDwW0RNzF8s2WyBuPbOAX_ZeQlA,109
|
|
68
|
+
quasardb-3.14.2.dev7.dist-info/top_level.txt,sha256=wlprix4hCywuF1PkgKWYdZeJKq_kgJOqkAvukm_sZQ8,9
|
|
69
|
+
quasardb-3.14.2.dev7.dist-info/RECORD,,
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
quasardb/Makefile,sha256=z0jHleOFRuXHzNk7_SoONq2p_ca5Ctb-GCRVfTJdt7Q,8317
|
|
2
|
-
quasardb/__init__.py,sha256=x_gazIFMlZ35Op_6Dh0YuKhslM9GlVH2UfjluLsMwf4,4614
|
|
3
|
-
quasardb/cmake_install.cmake,sha256=fkQjfkIl7S5Gaa0-xog7On6pi5jzDBH-ju-osA9Rh9g,1999
|
|
4
|
-
quasardb/firehose.py,sha256=_kSHuu2rTDHij1RpPLfsnbaiX_rSw-hurhBw54VNS2w,3350
|
|
5
|
-
quasardb/libqdb_api.dylib,sha256=8ThPKhWDokAYMHIeLEe0cXKIBOIiq3tkYtrJf-HrFx4,36197568
|
|
6
|
-
quasardb/pool.py,sha256=ph4gxwaOcvQ0QqrTO9oVu5Vqy-7t1CweakrgfsmvprM,8474
|
|
7
|
-
quasardb/quasardb.cpython-312-darwin.so,sha256=iS8mozFsZDoAVhQFgaCNS9LBi3BFiP-UHZ8lsbKWF4Q,933936
|
|
8
|
-
quasardb/stats.py,sha256=SoLZzsD2sw4vdHSfqK4dyrGxDzjlVzbboKCpDeYOXbc,7294
|
|
9
|
-
quasardb/table_cache.py,sha256=gYX4wqx4v4uKUE-GE24g-ZOi-OtE67IVDdUcNCIik-w,1511
|
|
10
|
-
quasardb/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=Ii0MBDCebQcQN_dyZDLtBVFD0o7TMSKZjzqlCu8P2a8,732
|
|
11
|
-
quasardb/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
12
|
-
quasardb/date/Makefile,sha256=sIL3b-tg9pF4ij0_TLsqkfiXq4SZ4G39Xn0pr-j3Tcc,8342
|
|
13
|
-
quasardb/date/cmake_install.cmake,sha256=MK-rA2yVCLFOSFHw4OVrHajVidn_Rr8DGnpq2P8NkSI,3580
|
|
14
|
-
quasardb/date/dateConfigVersion.cmake,sha256=rL5Cp_r_23Yu8HmjowwKIH04sxxMwdBZ7no3tr4cx14,2762
|
|
15
|
-
quasardb/date/dateTargets.cmake,sha256=UTTH7zSPDb_tkscV25dahdEEX0Bw_t2SozDUBKy7mHI,2869
|
|
16
|
-
quasardb/date/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=Ii0MBDCebQcQN_dyZDLtBVFD0o7TMSKZjzqlCu8P2a8,732
|
|
17
|
-
quasardb/date/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
18
|
-
quasardb/date/CMakeFiles/Export/a52b05f964b070ee926bcad51d3288af/dateTargets.cmake,sha256=rWNkRmrNRa8_x5hIZdFw8rJ_aLoigP5fUoRmXaKSyys,4211
|
|
19
|
-
quasardb/extensions/__init__.py,sha256=FUHR0i62qt5NkOXn7eiMZrzWXo9mQNr1xVz3VSCa9QU,112
|
|
20
|
-
quasardb/extensions/writer.py,sha256=uRL4fVkucd7vwdFySnPLpH4DuNK4bVtXCSRxQk4YJ-g,5567
|
|
21
|
-
quasardb/numpy/__init__.py,sha256=N-RIdmUPVUsxTe_Og3v1jv2tO3nCjyP2yUC9bKU2Iag,30581
|
|
22
|
-
quasardb/pandas/__init__.py,sha256=HXzFKT-nmkG65jcA850GgB8Toc9ArVwtAF4LQA5iW_M,15989
|
|
23
|
-
quasardb/pybind11/Makefile,sha256=7s9bY7Jct87ORecqUHc_ttgkyCxMun5yIV25rkuxlGI,8362
|
|
24
|
-
quasardb/pybind11/cmake_install.cmake,sha256=HI6maBUszVTzycySVNwEevyUbUhpP1VmNBkL2zjtckw,1504
|
|
25
|
-
quasardb/pybind11/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=Ii0MBDCebQcQN_dyZDLtBVFD0o7TMSKZjzqlCu8P2a8,732
|
|
26
|
-
quasardb/pybind11/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
27
|
-
quasardb/range-v3/Makefile,sha256=8Up8uXb0Nsf0pha8QWZRbXN0RUBUmkXfDzfx4-gKU_U,9731
|
|
28
|
-
quasardb/range-v3/cmake_install.cmake,sha256=KmiGz0jUAP1CqwEgkYod-pboQDZsMqx9EP6VkyMGDyA,4550
|
|
29
|
-
quasardb/range-v3/range-v3-config-version.cmake,sha256=xGi8nCg5dIl5VmCOtTEVVa-dwABxKxLEd1Mx-bUvLLM,3249
|
|
30
|
-
quasardb/range-v3/range-v3-config.cmake,sha256=iiZBJD9yisikJNYDR84f3siZY7xRddr6z48_0R5jj7c,3423
|
|
31
|
-
quasardb/range-v3/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=Ii0MBDCebQcQN_dyZDLtBVFD0o7TMSKZjzqlCu8P2a8,732
|
|
32
|
-
quasardb/range-v3/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
|
|
33
|
-
quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake,sha256=V-vcw4htrvk0Sf8A5IKO2_meFGd26tUGbt-Y2R8kZk4,5265
|
|
34
|
-
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/DependInfo.cmake,sha256=ssojOAtcndfwexIOMvsRoVek3vdNgBmUVZscjIj5L1U,585
|
|
35
|
-
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/build.make,sha256=kO9ZHjIJoTMYCAyrJxpdW-igFmeFna86afwUgjsobNo,4459
|
|
36
|
-
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/cmake_clean.cmake,sha256=3b0pZoiofoRzAiY1l7OLw203ZXp-mm1FUlQHob6i7aU,160
|
|
37
|
-
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.make,sha256=Oge9eptzOB-hllw_Tye4o5wiXsIsdq1xm1GGCe0oGFM,126
|
|
38
|
-
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.ts,sha256=orKrKpvHulgFBjBgzdeRvCpv0fV7cTffTdaHNqijFJg,120
|
|
39
|
-
quasardb/range-v3/CMakeFiles/range.v3.headers.dir/progress.make,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
40
|
-
quasardb/range-v3/include/range/v3/version.hpp,sha256=d-ToEdR3GnC_p_0RAeS77xL-SVx6EKHgTlWJ9PUQlSQ,586
|
|
41
|
-
quasardb-3.14.2.dev5.dist-info/LICENSE.md,sha256=_drOadIrIX8mzUZcnTJBTpUQih5gwdRAGK8ZKanYD6k,1467
|
|
42
|
-
quasardb-3.14.2.dev5.dist-info/METADATA,sha256=zRtHEBSC3to6u7sCd2cZoSyf4XLlDr7KE1_2cVlTd2U,1443
|
|
43
|
-
quasardb-3.14.2.dev5.dist-info/WHEEL,sha256=VujM3ypTCyUW6hcTDdK2ej0ARVMxlU1Djlh_zWnDgqk,109
|
|
44
|
-
quasardb-3.14.2.dev5.dist-info/top_level.txt,sha256=wlprix4hCywuF1PkgKWYdZeJKq_kgJOqkAvukm_sZQ8,9
|
|
45
|
-
quasardb-3.14.2.dev5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|