1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//! Micromegas is a unified and scalable observability stack.
//! It can help you collect and query logs, metrics and traces.
//!
//! # Very high level architecture
//!
//!
//! ```text
//! ┌─────────────────┐
//! │ rust application│──────▶
//! └─────────────────┘ ┌─────────┐ ┌───────┐ ┌─────────┐ ┌──────────┐
//! │ingestion│────▶│pg & S3│◀────│analytics│◀────│python API│
//! ┌─────────────────┐ └─────────┘ └───────┘ └─────────┘ └──────────┘
//! │ unreal engine │──────▶
//! └─────────────────┘
//!
//! ```
//! ## Rust Instrumentation
//! For rust applications, use micromegas::tracing for minimal overhead. Interoperability with tokio tracing's logs is also enabled by default.
//!
//! ## Unreal instrumentation
//! `MicromegasTracing` should be added to Unreal's Core module and `MicromegasTelemetrySink` can be added to a game or to a high level plugin. See <https://github.com/madesroches/micromegas/tree/main/unreal> for implementation. It has been tested in editor, client and server builds on multiple platforms.
//!
//! ## Telemetry ingestion server
//! <https://github.com/madesroches/micromegas/blob/main/rust/telemetry-ingestion-srv/src/main.rs>
//!
//! ## FlightSQL server
//! <https://github.com/madesroches/micromegas/blob/main/rust/flight-sql-srv/src/flight_sql_srv.rs>
//!
//! ## Lakehouse daemon
//! <https://github.com/madesroches/micromegas/blob/main/rust/telemetry-admin-cli/src/telemetry_admin.rs> (with `crond` argument)
//!
//! ## Python API
//! <https://pypi.org/project/micromegas/>
//!
//!
//! # Local developer configuration
//!
//! For testing purposes, you can run the entire stack on your local workstation.
//!
//! ## Environment variables
//!
//! - `MICROMEGAS_DB_USERNAME` and `MICROMEGAS_DB_PASSWD`: used by the database configuration script
//! - `export MICROMEGAS_TELEMETRY_URL=http://localhost:9000`
//! - `export MICROMEGAS_SQL_CONNECTION_STRING=postgres://{uname}:{passwd}@localhost:5432`
//! - `export MICROMEGAS_OBJECT_STORE_URI=file:///some/local/path`
//!
//! 1. Clone the github repository
//! ```text
//! > git clone https://github.com/madesroches/micromegas.git
//! ```
//!
//! 2. Start a local instance of postgresql (requires docker and python)
//!
//! ```text
//! > cd micromegas/local_test_env/db
//! > ./run.py
//! ```
//!
//! 3. In a new shell, start the ingestion server
//! ```text
//! > cd micromegas/rust
//! > cargo run -p telemetry-ingestion-srv -- --listen-endpoint-http 127.0.0.1:9000
//! ```
//!
//!
//! 4. In a new shell, start the flightsql server
//! ```text
//! > cd micromegas/rust
//! > cargo run -p flight-sql-srv -- --disable-auth
//! ```
//!
//! 5. In a new shell, start the daemon
//! ```text
//! > cd micromegas/rust
//! > cargo run -p telemetry-admin -- crond
//! ```
//!
//! 6. In a python interpreter, query the analytics service
//! ```python
//! # local connection test
//! import datetime
//! import micromegas
//! client = micromegas.connect() #connects to localhost by default
//! now = datetime.datetime.now(datetime.timezone.utc)
//! begin = now - datetime.timedelta(days=1)
//! end = now
//! sql = """
//! SELECT *
//! FROM log_entries
//! ORDER BY time DESC
//! LIMIT 10
//! ;"""
//! df = client.query(sql, begin, end)
//! df #dataframe containing the result of the query
//! ```
//!
pub use arrow_flight;
pub use axum;
pub use chrono;
pub use datafusion;
pub use object_store;
pub use prost;
pub use sqlx;
pub use tonic;
pub use uuid;
/// telemetry protocol
/// publication of the recorded events using http
/// low level tracing - has minimal dependencies
/// records telemetry in data lake
/// makes the telemetry data lake accessible and useful
/// perfetto protobufs
/// Embedable ingestion, analytics and maintenance services.
/// The user is expected to provide their own authentication.
/// rust analytics client