micromegas 0.1.9__py3-none-any.whl → 0.2.0__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.
- micromegas/client.py +6 -63
- micromegas/thirdparty/perfetto/protos/perfetto/config/test_config_pb2.py +38 -0
- micromegas/thirdparty/perfetto/protos/perfetto/trace/test_event_pb2.py +39 -0
- micromegas-0.2.0.dist-info/METADATA +247 -0
- {micromegas-0.1.9.dist-info → micromegas-0.2.0.dist-info}/RECORD +6 -4
- micromegas-0.1.9.dist-info/METADATA +0 -25
- {micromegas-0.1.9.dist-info → micromegas-0.2.0.dist-info}/WHEEL +0 -0
micromegas/client.py
CHANGED
@@ -22,17 +22,6 @@ class Client:
|
|
22
22
|
headers=self.headers,
|
23
23
|
)
|
24
24
|
|
25
|
-
def query_processes(self, begin, end, limit):
|
26
|
-
return request.request(
|
27
|
-
self.analytics_base_url + "query_processes",
|
28
|
-
{
|
29
|
-
"begin": time.format_datetime(begin),
|
30
|
-
"end": time.format_datetime(end),
|
31
|
-
"limit": limit,
|
32
|
-
},
|
33
|
-
headers=self.headers,
|
34
|
-
)
|
35
|
-
|
36
25
|
def query_streams(self, begin, end, limit, process_id=None, tag_filter=None):
|
37
26
|
args = {
|
38
27
|
"begin": time.format_datetime(begin),
|
@@ -62,72 +51,26 @@ class Client:
|
|
62
51
|
headers=self.headers,
|
63
52
|
)
|
64
53
|
|
65
|
-
def
|
66
|
-
return request.request(
|
67
|
-
self.analytics_base_url + "query_spans",
|
68
|
-
{
|
69
|
-
"begin": time.format_datetime(begin),
|
70
|
-
"end": time.format_datetime(end),
|
71
|
-
"limit": limit,
|
72
|
-
"stream_id": stream_id,
|
73
|
-
},
|
74
|
-
headers=self.headers,
|
75
|
-
)
|
76
|
-
|
77
|
-
def query_thread_events(self, begin, end, limit, stream_id):
|
78
|
-
return request.request(
|
79
|
-
self.analytics_base_url + "query_thread_events",
|
80
|
-
{
|
81
|
-
"begin": time.format_datetime(begin),
|
82
|
-
"end": time.format_datetime(end),
|
83
|
-
"limit": limit,
|
84
|
-
"stream_id": stream_id,
|
85
|
-
},
|
86
|
-
headers=self.headers,
|
87
|
-
)
|
88
|
-
|
89
|
-
def query_log_entries(
|
90
|
-
self,
|
91
|
-
begin,
|
92
|
-
end,
|
93
|
-
limit=None, # Necessary if stream_id is specified, ignored otherwise
|
94
|
-
stream_id=None, # If none, query is run on cached lakehouse using query engine
|
95
|
-
sql=None, # Necessary if stream_id is None, ignored otherwise
|
96
|
-
):
|
54
|
+
def query_view(self, view_set_name, view_instance_id, begin, end, sql):
|
97
55
|
return request.request(
|
98
|
-
self.analytics_base_url + "
|
56
|
+
self.analytics_base_url + "query_view",
|
99
57
|
{
|
58
|
+
"view_set_name": view_set_name,
|
59
|
+
"view_instance_id": view_instance_id,
|
100
60
|
"begin": time.format_datetime(begin),
|
101
61
|
"end": time.format_datetime(end),
|
102
|
-
"limit": limit,
|
103
|
-
"stream_id": stream_id,
|
104
62
|
"sql": sql,
|
105
63
|
},
|
106
64
|
headers=self.headers,
|
107
65
|
)
|
108
66
|
|
109
|
-
def
|
67
|
+
def query(self, sql, begin=None, end=None):
|
110
68
|
return request.request(
|
111
|
-
self.analytics_base_url + "
|
69
|
+
self.analytics_base_url + "query",
|
112
70
|
{
|
113
|
-
"begin": time.format_datetime(begin),
|
114
|
-
"end": time.format_datetime(end),
|
115
|
-
"limit": limit,
|
116
|
-
"stream_id": stream_id,
|
117
71
|
"sql": sql,
|
118
|
-
},
|
119
|
-
headers=self.headers,
|
120
|
-
)
|
121
|
-
|
122
|
-
def query_view(self, view_set_name, view_instance_id, begin, end, sql):
|
123
|
-
return request.request(
|
124
|
-
self.analytics_base_url + "query_view",
|
125
|
-
{
|
126
|
-
"view_set_name": view_set_name,
|
127
|
-
"view_instance_id": view_instance_id,
|
128
72
|
"begin": time.format_datetime(begin),
|
129
73
|
"end": time.format_datetime(end),
|
130
|
-
"sql": sql,
|
131
74
|
},
|
132
75
|
headers=self.headers,
|
133
76
|
)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
4
|
+
# source: protos/perfetto/config/test_config.proto
|
5
|
+
# Protobuf Python Version: 5.27.1
|
6
|
+
"""Generated protocol buffer code."""
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
11
|
+
from google.protobuf.internal import builder as _builder
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
14
|
+
5,
|
15
|
+
27,
|
16
|
+
1,
|
17
|
+
'',
|
18
|
+
'protos/perfetto/config/test_config.proto'
|
19
|
+
)
|
20
|
+
# @@protoc_insertion_point(imports)
|
21
|
+
|
22
|
+
_sym_db = _symbol_database.Default()
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(protos/perfetto/config/test_config.proto\x12\x0fperfetto.protos\"\x8d\x04\n\nTestConfig\x12\x15\n\rmessage_count\x18\x01 \x01(\r\x12\x1f\n\x17max_messages_per_second\x18\x02 \x01(\r\x12\x0c\n\x04seed\x18\x03 \x01(\r\x12\x14\n\x0cmessage_size\x18\x04 \x01(\r\x12\x1e\n\x16send_batch_on_register\x18\x05 \x01(\x08\x12=\n\x0c\x64ummy_fields\x18\x06 \x01(\x0b\x32\'.perfetto.protos.TestConfig.DummyFields\x1a\xc3\x02\n\x0b\x44ummyFields\x12\x14\n\x0c\x66ield_uint32\x18\x01 \x01(\r\x12\x13\n\x0b\x66ield_int32\x18\x02 \x01(\x05\x12\x14\n\x0c\x66ield_uint64\x18\x03 \x01(\x04\x12\x13\n\x0b\x66ield_int64\x18\x04 \x01(\x03\x12\x15\n\rfield_fixed64\x18\x05 \x01(\x06\x12\x16\n\x0e\x66ield_sfixed64\x18\x06 \x01(\x10\x12\x15\n\rfield_fixed32\x18\x07 \x01(\x07\x12\x16\n\x0e\x66ield_sfixed32\x18\x08 \x01(\x0f\x12\x14\n\x0c\x66ield_double\x18\t \x01(\x01\x12\x13\n\x0b\x66ield_float\x18\n \x01(\x02\x12\x14\n\x0c\x66ield_sint64\x18\x0b \x01(\x12\x12\x14\n\x0c\x66ield_sint32\x18\x0c \x01(\x11\x12\x14\n\x0c\x66ield_string\x18\r \x01(\t\x12\x13\n\x0b\x66ield_bytes\x18\x0e \x01(\x0c')
|
28
|
+
|
29
|
+
_globals = globals()
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protos.perfetto.config.test_config_pb2', _globals)
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
33
|
+
DESCRIPTOR._loaded_options = None
|
34
|
+
_globals['_TESTCONFIG']._serialized_start=62
|
35
|
+
_globals['_TESTCONFIG']._serialized_end=587
|
36
|
+
_globals['_TESTCONFIG_DUMMYFIELDS']._serialized_start=264
|
37
|
+
_globals['_TESTCONFIG_DUMMYFIELDS']._serialized_end=587
|
38
|
+
# @@protoc_insertion_point(module_scope)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
4
|
+
# source: protos/perfetto/trace/test_event.proto
|
5
|
+
# Protobuf Python Version: 5.27.1
|
6
|
+
"""Generated protocol buffer code."""
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
11
|
+
from google.protobuf.internal import builder as _builder
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
14
|
+
5,
|
15
|
+
27,
|
16
|
+
1,
|
17
|
+
'',
|
18
|
+
'protos/perfetto/trace/test_event.proto'
|
19
|
+
)
|
20
|
+
# @@protoc_insertion_point(imports)
|
21
|
+
|
22
|
+
_sym_db = _symbol_database.Default()
|
23
|
+
|
24
|
+
|
25
|
+
from protos.perfetto.trace.track_event import debug_annotation_pb2 as protos_dot_perfetto_dot_trace_dot_track__event_dot_debug__annotation__pb2
|
26
|
+
|
27
|
+
|
28
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&protos/perfetto/trace/test_event.proto\x12\x0fperfetto.protos\x1a\x38protos/perfetto/trace/track_event/debug_annotation.proto\"\xfb\x02\n\tTestEvent\x12\x0b\n\x03str\x18\x01 \x01(\t\x12\x11\n\tseq_value\x18\x02 \x01(\r\x12\x0f\n\x07\x63ounter\x18\x03 \x01(\x04\x12\x0f\n\x07is_last\x18\x04 \x01(\x08\x12\x37\n\x07payload\x18\x05 \x01(\x0b\x32&.perfetto.protos.TestEvent.TestPayload\x1a\xf2\x01\n\x0bTestPayload\x12\x0b\n\x03str\x18\x01 \x03(\t\x12\x36\n\x06nested\x18\x02 \x03(\x0b\x32&.perfetto.protos.TestEvent.TestPayload\x12\x15\n\rsingle_string\x18\x04 \x01(\t\x12\x12\n\nsingle_int\x18\x05 \x01(\x05\x12\x15\n\rrepeated_ints\x18\x06 \x03(\x05\x12\x1f\n\x17remaining_nesting_depth\x18\x03 \x01(\r\x12;\n\x11\x64\x65\x62ug_annotations\x18\x07 \x03(\x0b\x32 .perfetto.protos.DebugAnnotation')
|
29
|
+
|
30
|
+
_globals = globals()
|
31
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
32
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protos.perfetto.trace.test_event_pb2', _globals)
|
33
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
34
|
+
DESCRIPTOR._loaded_options = None
|
35
|
+
_globals['_TESTEVENT']._serialized_start=118
|
36
|
+
_globals['_TESTEVENT']._serialized_end=497
|
37
|
+
_globals['_TESTEVENT_TESTPAYLOAD']._serialized_start=255
|
38
|
+
_globals['_TESTEVENT_TESTPAYLOAD']._serialized_end=497
|
39
|
+
# @@protoc_insertion_point(module_scope)
|
@@ -0,0 +1,247 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: micromegas
|
3
|
+
Version: 0.2.0
|
4
|
+
Summary: Python analytics client for https://github.com/madesroches/micromegas/
|
5
|
+
Author: Marc-Antoine Desroches
|
6
|
+
Author-email: madesroches@gmail.com
|
7
|
+
Requires-Python: >=3.10,<4.0
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
12
|
+
Requires-Dist: cbor2 (>=5.6.3,<6.0.0)
|
13
|
+
Requires-Dist: crc (>=7.0.0,<8.0.0)
|
14
|
+
Requires-Dist: pandas (>=2.2.2,<3.0.0)
|
15
|
+
Requires-Dist: protobuf (>=5.27.1,<6.0.0)
|
16
|
+
Requires-Dist: pyarrow (>=16.0.0,<17.0.0)
|
17
|
+
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
18
|
+
Requires-Dist: tabulate (>=0.9.0,<0.10.0)
|
19
|
+
Requires-Dist: tqdm (>=4.66.5,<5.0.0)
|
20
|
+
Description-Content-Type: text/markdown
|
21
|
+
|
22
|
+
# Micromegas
|
23
|
+
|
24
|
+
Python analytics client for https://github.com/madesroches/micromegas/
|
25
|
+
|
26
|
+
## Example usage
|
27
|
+
|
28
|
+
Query the most recent 2 log entries from the analytics service
|
29
|
+
|
30
|
+
```python
|
31
|
+
import datetime
|
32
|
+
import pandas as pd
|
33
|
+
import micromegas
|
34
|
+
|
35
|
+
BASE_URL = "http://localhost:8082/"
|
36
|
+
client = micromegas.client.Client(BASE_URL)
|
37
|
+
sql = """
|
38
|
+
SELECT time, process_id, level, target, msg
|
39
|
+
FROM log_entries
|
40
|
+
WHERE level <= 4
|
41
|
+
AND exe LIKE '%analytics%'
|
42
|
+
ORDER BY time DESC
|
43
|
+
LIMIT 2
|
44
|
+
"""
|
45
|
+
|
46
|
+
now = datetime.datetime.now(datetime.timezone.utc)
|
47
|
+
begin = now - datetime.timedelta(minutes=2)
|
48
|
+
end = now
|
49
|
+
client.query(sql, begin, end)
|
50
|
+
```
|
51
|
+
|
52
|
+
| | time | process_id | level | target | msg |
|
53
|
+
|---:|:------------------------------------|:-------------------------------------|--------:|:---------------------------------------|:--------------------------------------------|
|
54
|
+
| 0 | 2024-10-03 18:17:56.087543714+00:00 | 1db06afc-1c88-47d1-81b3-f398c5f93616 | 4 | acme_telemetry::trace_middleware | response status=200 OK uri=/analytics/query |
|
55
|
+
| 1 | 2024-10-03 18:17:53.924037729+00:00 | 1db06afc-1c88-47d1-81b3-f398c5f93616 | 4 | micromegas_analytics::lakehouse::query | query sql= |
|
56
|
+
| | | | | | SELECT time, process_id, level, target, msg |
|
57
|
+
| | | | | | FROM log_entries |
|
58
|
+
| | | | | | WHERE level <= 4 |
|
59
|
+
| | | | | | AND exe LIKE '%analytics%' |
|
60
|
+
| | | | | | ORDER BY time DESC |
|
61
|
+
| | | | | | LIMIT 2 |
|
62
|
+
|
63
|
+
|
64
|
+
Query the 10 slowest top level spans in a trace within a specified time window
|
65
|
+
|
66
|
+
```python
|
67
|
+
sql = """
|
68
|
+
SELECT begin, end, duration, name
|
69
|
+
FROM view_instance('thread_spans', '{stream_id}')
|
70
|
+
WHERE depth=1
|
71
|
+
ORDER BY duration DESC
|
72
|
+
LIMIT 10
|
73
|
+
;""".format(stream_id=stream_id)
|
74
|
+
client.query(sql, begin_spans, end_spans)
|
75
|
+
```
|
76
|
+
|
77
|
+
| | begin | end | duration | name |
|
78
|
+
|---:|:------------------------------------|:------------------------------------|-----------:|:------------------|
|
79
|
+
| 0 | 2024-10-03 18:00:59.308952900+00:00 | 2024-10-03 18:00:59.371890+00:00 | 62937100 | FEngineLoop::Tick |
|
80
|
+
| 1 | 2024-10-03 18:00:58.752476800+00:00 | 2024-10-03 18:00:58.784389+00:00 | 31912200 | FEngineLoop::Tick |
|
81
|
+
| 2 | 2024-10-03 18:00:58.701507300+00:00 | 2024-10-03 18:00:58.731479500+00:00 | 29972200 | FEngineLoop::Tick |
|
82
|
+
| 3 | 2024-10-03 18:00:59.766343100+00:00 | 2024-10-03 18:00:59.792513700+00:00 | 26170600 | FEngineLoop::Tick |
|
83
|
+
| 4 | 2024-10-03 18:00:59.282902100+00:00 | 2024-10-03 18:00:59.308952500+00:00 | 26050400 | FEngineLoop::Tick |
|
84
|
+
| 5 | 2024-10-03 18:00:59.816034500+00:00 | 2024-10-03 18:00:59.841376900+00:00 | 25342400 | FEngineLoop::Tick |
|
85
|
+
| 6 | 2024-10-03 18:00:58.897813100+00:00 | 2024-10-03 18:00:58.922769700+00:00 | 24956600 | FEngineLoop::Tick |
|
86
|
+
| 7 | 2024-10-03 18:00:59.860637+00:00 | 2024-10-03 18:00:59.885523700+00:00 | 24886700 | FEngineLoop::Tick |
|
87
|
+
| 8 | 2024-10-03 18:00:58.630051300+00:00 | 2024-10-03 18:00:58.654871500+00:00 | 24820200 | FEngineLoop::Tick |
|
88
|
+
| 9 | 2024-10-03 18:00:57.952279800+00:00 | 2024-10-03 18:00:57.977024+00:00 | 24744200 | FEngineLoop::Tick |
|
89
|
+
|
90
|
+
## SQL reference
|
91
|
+
|
92
|
+
The Micromegas analytics service is built on Apache DataFusion, please see [Apache DataFusion SQL Reference](https://datafusion.apache.org/user-guide/sql/index.html) for details.
|
93
|
+
|
94
|
+
## View sets
|
95
|
+
|
96
|
+
All view instances in a set have the same schema. Some view instances are global (their view_instance_id is 'global').
|
97
|
+
Global view instances are implicitly accessible to SQL queries. Non-global view instances are accessible using the table function `view_instance`.
|
98
|
+
|
99
|
+
### log_entries
|
100
|
+
|
101
|
+
```python
|
102
|
+
client.query("DESCRIBE log_entries")
|
103
|
+
```
|
104
|
+
| | column_name | data_type | is_nullable |
|
105
|
+
|---:|:--------------|:--------------------------------------|:--------------|
|
106
|
+
| 0 | process_id | Dictionary(Int16, Utf8) | NO |
|
107
|
+
| 1 | exe | Dictionary(Int16, Utf8) | NO |
|
108
|
+
| 2 | username | Dictionary(Int16, Utf8) | NO |
|
109
|
+
| 3 | computer | Dictionary(Int16, Utf8) | NO |
|
110
|
+
| 4 | time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
111
|
+
| 5 | target | Dictionary(Int16, Utf8) | NO |
|
112
|
+
| 6 | level | Int32 | NO |
|
113
|
+
| 7 | msg | Utf8 | NO |
|
114
|
+
|
115
|
+
|
116
|
+
#### log_entries view instances
|
117
|
+
The implicit use of the `log_entries` table corresponds to the 'global' instance, which contains the log entries of all the processes.
|
118
|
+
|
119
|
+
Except the 'global' instance, the instance_id refers to any process_id. `view_instance('log_entries', process_id)` contains that process's log. Process-specific views are materialized just-in-time and can provide much better query performance compared to the global instance.
|
120
|
+
|
121
|
+
### measures
|
122
|
+
|
123
|
+
```python
|
124
|
+
client.query("DESCRIBE measures")
|
125
|
+
```
|
126
|
+
| | column_name | data_type | is_nullable |
|
127
|
+
|---:|:--------------|:--------------------------------------|:--------------|
|
128
|
+
| 0 | process_id | Dictionary(Int16, Utf8) | NO |
|
129
|
+
| 1 | exe | Dictionary(Int16, Utf8) | NO |
|
130
|
+
| 2 | username | Dictionary(Int16, Utf8) | NO |
|
131
|
+
| 3 | computer | Dictionary(Int16, Utf8) | NO |
|
132
|
+
| 4 | time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
133
|
+
| 5 | target | Dictionary(Int16, Utf8) | NO |
|
134
|
+
| 6 | name | Dictionary(Int16, Utf8) | NO |
|
135
|
+
| 7 | unit | Dictionary(Int16, Utf8) | NO |
|
136
|
+
| 8 | value | Float64 | NO |
|
137
|
+
|
138
|
+
|
139
|
+
#### measures view instances
|
140
|
+
|
141
|
+
The implicit use of the `measures` table corresponds to the 'global' instance, which contains the metrics of all the processes.
|
142
|
+
|
143
|
+
Except the 'global' instance, the instance_id refers to any process_id. `view_instance('measures', process_id)` contains that process's metrics. Process-specific views are materialized just-in-time and can provide much better query performance compared to the 'global' instance.
|
144
|
+
|
145
|
+
### thread_spans
|
146
|
+
|
147
|
+
| | column_name | data_type | is_nullable |
|
148
|
+
|---:|:--------------|:--------------------------------------|:--------------|
|
149
|
+
| 0 | id | Int64 | NO |
|
150
|
+
| 1 | parent | Int64 | NO |
|
151
|
+
| 2 | depth | UInt32 | NO |
|
152
|
+
| 3 | hash | Uint32 | NO |
|
153
|
+
| 4 | begin | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
154
|
+
| 5 | end | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
155
|
+
| 6 | duration | Int64 | NO |
|
156
|
+
| 7 | name | Dictionary(Int16, Utf8) | NO |
|
157
|
+
| 8 | target | Dictionary(Int16, Utf8) | NO |
|
158
|
+
| 9 | filename | Dictionary(Int16, Utf8) | NO |
|
159
|
+
| 10| line | UInt32 | NO |
|
160
|
+
|
161
|
+
#### thread_spans view instances
|
162
|
+
|
163
|
+
There is no 'global' instance in the 'thread_spans' view set, there is therefore no implicit thread_spans table availble.
|
164
|
+
Users can call the table function `view_instance('thread_spans', stream_id)` to query the spans in the thread associated with the specified stream_id.
|
165
|
+
|
166
|
+
|
167
|
+
### processes
|
168
|
+
|
169
|
+
```python
|
170
|
+
client.query("DESCRIBE processes")
|
171
|
+
```
|
172
|
+
| | column_name | data_type | is_nullable |
|
173
|
+
|---:|:------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------|
|
174
|
+
| 0 | process_id | Utf8 | NO |
|
175
|
+
| 1 | exe | Utf8 | NO |
|
176
|
+
| 2 | username | Utf8 | NO |
|
177
|
+
| 3 | realname | Utf8 | NO |
|
178
|
+
| 4 | computer | Utf8 | NO |
|
179
|
+
| 5 | distro | Utf8 | NO |
|
180
|
+
| 6 | cpu_brand | Utf8 | NO |
|
181
|
+
| 7 | tsc_frequency | Int64 | NO |
|
182
|
+
| 8 | start_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
183
|
+
| 9 | start_ticks | Int64 | NO |
|
184
|
+
| 10 | insert_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
185
|
+
| 11 | parent_process_id | Utf8 | NO |
|
186
|
+
| 12 | properties | List(Field { name: "Property", data_type: Struct([Field { name: "key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }) | NO |
|
187
|
+
|
188
|
+
|
189
|
+
There is only one instance in this view set and it is implicitly available.
|
190
|
+
|
191
|
+
|
192
|
+
### streams
|
193
|
+
|
194
|
+
```python
|
195
|
+
client.query("DESCRIBE streams")
|
196
|
+
```
|
197
|
+
| | column_name | data_type | is_nullable |
|
198
|
+
|---:|:----------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------|
|
199
|
+
| 0 | stream_id | Utf8 | NO |
|
200
|
+
| 1 | process_id | Utf8 | NO |
|
201
|
+
| 2 | dependencies_metadata | Binary | NO |
|
202
|
+
| 3 | objects_metadata | Binary | NO |
|
203
|
+
| 4 | tags | List(Field { name: "tag", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }) | YES |
|
204
|
+
| 5 | properties | List(Field { name: "Property", data_type: Struct([Field { name: "key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }) | NO |
|
205
|
+
| 6 | insert_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
206
|
+
|
207
|
+
There is only one instance in this view set and it is implicitly available.
|
208
|
+
|
209
|
+
### blocks
|
210
|
+
|
211
|
+
|
212
|
+
```python
|
213
|
+
client.query("DESCRIBE blocks")
|
214
|
+
```
|
215
|
+
|
216
|
+
| | column_name | data_type | is_nullable |
|
217
|
+
|---:|:------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------|
|
218
|
+
| 0 | block_id | Utf8 | NO |
|
219
|
+
| 1 | stream_id | Utf8 | NO |
|
220
|
+
| 2 | process_id | Utf8 | NO |
|
221
|
+
| 3 | begin_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
222
|
+
| 4 | begin_ticks | Int64 | NO |
|
223
|
+
| 5 | end_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
224
|
+
| 6 | end_ticks | Int64 | NO |
|
225
|
+
| 7 | nb_objects | Int32 | NO |
|
226
|
+
| 8 | object_offset | Int64 | NO |
|
227
|
+
| 9 | payload_size | Int64 | NO |
|
228
|
+
| 10 | insert_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
229
|
+
| 11 | streams.dependencies_metadata | Binary | NO |
|
230
|
+
| 12 | streams.objects_metadata | Binary | NO |
|
231
|
+
| 13 | streams.tags | List(Field { name: "tag", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }) | YES |
|
232
|
+
| 14 | streams.properties | List(Field { name: "Property", data_type: Struct([Field { name: "key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }) | NO |
|
233
|
+
| 15 | processes.start_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
234
|
+
| 16 | processes.start_ticks | Int64 | NO |
|
235
|
+
| 17 | processes.tsc_frequency | Int64 | NO |
|
236
|
+
| 18 | processes.exe | Utf8 | NO |
|
237
|
+
| 19 | processes.username | Utf8 | NO |
|
238
|
+
| 20 | processes.realname | Utf8 | NO |
|
239
|
+
| 21 | processes.computer | Utf8 | NO |
|
240
|
+
| 22 | processes.distro | Utf8 | NO |
|
241
|
+
| 23 | processes.cpu_brand | Utf8 | NO |
|
242
|
+
| 24 | processes.insert_time | Timestamp(Nanosecond, Some("+00:00")) | NO |
|
243
|
+
| 25 | processes.parent_process_id | Utf8 | NO |
|
244
|
+
| 26 | processes.properties | List(Field { name: "Property", data_type: Struct([Field { name: "key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }) | NO |
|
245
|
+
|
246
|
+
There is only one instance in this view set and it is implicitly available.
|
247
|
+
|
@@ -1,5 +1,5 @@
|
|
1
1
|
micromegas/__init__.py,sha256=E_j3LFxMk9rSMJunwDCi_90NsRHm1fKwjj_6KGMYCjQ,246
|
2
|
-
micromegas/client.py,sha256=
|
2
|
+
micromegas/client.py,sha256=7d0aah179a5cfjmBRxcaq7jTPvmGg625D_ixzdvtgCw,3670
|
3
3
|
micromegas/perfetto.py,sha256=yuIe5iKvca61aWMBQNziSGM-DHcOEsiobtKx2SsNQ3E,7829
|
4
4
|
micromegas/request.py,sha256=NV0urom5P3_P2q94gX51hxW_Fnrp_DDRorsP3mUb5NM,941
|
5
5
|
micromegas/thirdparty/perfetto/protos/perfetto/common/android_energy_consumer_descriptor_pb2.py,sha256=l8QNXqnB-mJIkuFr2s1YoLQXHm3G-ZcOGp_OW_hQ0TE,1887
|
@@ -42,6 +42,7 @@ micromegas/thirdparty/perfetto/protos/perfetto/config/statsd/atom_ids_pb2.py,sha
|
|
42
42
|
micromegas/thirdparty/perfetto/protos/perfetto/config/statsd/statsd_tracing_config_pb2.py,sha256=R_5SdcZtVBBBJ6PTkYlpVCmuzzftpRR14WTYpCppFnU,2159
|
43
43
|
micromegas/thirdparty/perfetto/protos/perfetto/config/sys_stats/sys_stats_config_pb2.py,sha256=o6erypHQHn0scqZabZwwphxRvL50AtC38UR-Pl79F-A,2561
|
44
44
|
micromegas/thirdparty/perfetto/protos/perfetto/config/system_info/system_info_pb2.py,sha256=vzqFeZbIVX638cyk2Y7PnFBGD3ZF-0kT6K8__UV5H6Y,1397
|
45
|
+
micromegas/thirdparty/perfetto/protos/perfetto/config/test_config_pb2.py,sha256=d5NO3cG-1Gsg5AvpzarJzIDQZTKwkpiAEkw8KKwNghc,2437
|
45
46
|
micromegas/thirdparty/perfetto/protos/perfetto/config/trace_config_pb2.py,sha256=gCbplyGYzbNXbygk0_SWO1L6fP9UO5kMhxE9MDeGNFY,12753
|
46
47
|
micromegas/thirdparty/perfetto/protos/perfetto/config/track_event/track_event_config_pb2.py,sha256=B76vM-h26uHWAmPye5qdX8G-2917FeVUPLTO4dz36tE,1907
|
47
48
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/android/android_game_intervention_list_pb2.py,sha256=o3Og8gaoY85tptvGqbhav4fDmuQu7bdFtSmrC1yaIY0,2437
|
@@ -170,6 +171,7 @@ micromegas/thirdparty/perfetto/protos/perfetto/trace/statsd/statsd_atom_pb2.py,s
|
|
170
171
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/sys_stats/sys_stats_pb2.py,sha256=mT0oYvJtTq3te7tnBWI2lVxEtxyDYZjZOehvdISEbEk,5404
|
171
172
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/system_info/cpu_info_pb2.py,sha256=jN3hh8oZeETAqzSi4wkiUaBVYgBBheYZBpK0x2f_Dis,1621
|
172
173
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/system_info_pb2.py,sha256=A7zU7AVq-9i41uxj8P0mZhoU98cRULkZmE25rRHVfF4,2017
|
174
|
+
micromegas/thirdparty/perfetto/protos/perfetto/trace/test_event_pb2.py,sha256=ovbLi6_TS0MC-P685D_gxJcm4zxeGTyLWK87HW5tGJM,2293
|
173
175
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/trace_packet_defaults_pb2.py,sha256=ENsJNaUGaFIkpUpcZa7t-Ue72GhdH0pJw0FrUnfKMng,2250
|
174
176
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/trace_packet_pb2.py,sha256=5hkSMh_D0J2UCnm7K2CfIQQtDoAtD9yNDoNNiVLQrLA,21973
|
175
177
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/trace_pb2.py,sha256=ZC7Dal05CR77mENj53oy-AXbcfSQL29NT9H4_PgFGG8,1509
|
@@ -206,6 +208,6 @@ micromegas/thirdparty/perfetto/protos/perfetto/trace/translation/translation_tab
|
|
206
208
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/trigger_pb2.py,sha256=We7Yi8o3cEcrSNxY1zLUUO6tEWnD36C2f3O_s8_qv0I,1435
|
207
209
|
micromegas/thirdparty/perfetto/protos/perfetto/trace/ui_state_pb2.py,sha256=Af-SXwhroNhRXMrtw6e2eU1liCImMRxSdmkt_AuSHf8,1752
|
208
210
|
micromegas/time.py,sha256=eD9fWF2UHxaf-92yd1X2SEgUcpKypqPsvjBosLdpnQA,1026
|
209
|
-
micromegas-0.
|
210
|
-
micromegas-0.
|
211
|
-
micromegas-0.
|
211
|
+
micromegas-0.2.0.dist-info/METADATA,sha256=zvwsr7aIJE_1828_dz5g3-vG83kdHnDAq8EONlxmFII,30467
|
212
|
+
micromegas-0.2.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
213
|
+
micromegas-0.2.0.dist-info/RECORD,,
|
@@ -1,25 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: micromegas
|
3
|
-
Version: 0.1.9
|
4
|
-
Summary: Python analytics client for https://github.com/madesroches/micromegas/
|
5
|
-
Author: Marc-Antoine Desroches
|
6
|
-
Author-email: madesroches@gmail.com
|
7
|
-
Requires-Python: >=3.10,<4.0
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
9
|
-
Classifier: Programming Language :: Python :: 3.10
|
10
|
-
Classifier: Programming Language :: Python :: 3.11
|
11
|
-
Classifier: Programming Language :: Python :: 3.12
|
12
|
-
Requires-Dist: cbor2 (>=5.6.3,<6.0.0)
|
13
|
-
Requires-Dist: crc (>=7.0.0,<8.0.0)
|
14
|
-
Requires-Dist: pandas (>=2.2.2,<3.0.0)
|
15
|
-
Requires-Dist: protobuf (>=5.27.1,<6.0.0)
|
16
|
-
Requires-Dist: pyarrow (>=16.0.0,<17.0.0)
|
17
|
-
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
18
|
-
Requires-Dist: tabulate (>=0.9.0,<0.10.0)
|
19
|
-
Requires-Dist: tqdm (>=4.66.5,<5.0.0)
|
20
|
-
Description-Content-Type: text/markdown
|
21
|
-
|
22
|
-
# Micromegas
|
23
|
-
|
24
|
-
Python analytics client for https://github.com/madesroches/micromegas/
|
25
|
-
|
File without changes
|