mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 39aaf95d09 | |||
| 5e0edd5a1c | |||
| d180f5a759 | |||
| f163264a82 | |||
| 5e7bc590d2 | |||
| 08df35946b | |||
| c4ebf289fa | |||
| 1fc6010f9a | |||
| 1d91331275 | |||
| 77e62ad772 | |||
| 696a1e6a4d | |||
| f41bbd7361 |
Generated
+2
@@ -3305,6 +3305,8 @@ dependencies = [
|
|||||||
"prost",
|
"prost",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
|
"tokio",
|
||||||
|
"tonic",
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -426,7 +426,7 @@ features = ["rt-tokio"]
|
|||||||
|
|
||||||
[workspace.dependencies.opentelemetry-otlp]
|
[workspace.dependencies.opentelemetry-otlp]
|
||||||
version = "0.31.0"
|
version = "0.31.0"
|
||||||
features = ["http", "trace", "logs", "metrics"]
|
features = ["http", "grpc-tonic", "trace", "logs", "metrics"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Enabled the OLTP exporter in default builds, and allow configuring the exporter protocol. (@Jade).
|
||||||
+10
-4
@@ -26,8 +26,8 @@
|
|||||||
# Also see the `[global.well_known]` config section at the very bottom.
|
# Also see the `[global.well_known]` config section at the very bottom.
|
||||||
#
|
#
|
||||||
# Examples of delegation:
|
# Examples of delegation:
|
||||||
# - https://puppygock.gay/.well-known/matrix/server
|
# - https://continuwuity.org/.well-known/matrix/server
|
||||||
# - https://puppygock.gay/.well-known/matrix/client
|
# - https://continuwuity.org/.well-known/matrix/client
|
||||||
#
|
#
|
||||||
# YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
# YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
||||||
# WIPE.
|
# WIPE.
|
||||||
@@ -608,6 +608,11 @@
|
|||||||
#
|
#
|
||||||
#otlp_filter = "info"
|
#otlp_filter = "info"
|
||||||
|
|
||||||
|
# Protocol to use for OTLP tracing export. Options are "http" or "grpc".
|
||||||
|
# The HTTP protocol uses port 4318 by default, while gRPC uses port 4317.
|
||||||
|
#
|
||||||
|
#otlp_protocol = "http"
|
||||||
|
|
||||||
# If the 'perf_measurements' compile-time feature is enabled, enables
|
# If the 'perf_measurements' compile-time feature is enabled, enables
|
||||||
# collecting folded stack trace profile of tracing spans using
|
# collecting folded stack trace profile of tracing spans using
|
||||||
# tracing_flame. The resulting profile can be visualized with inferno[1],
|
# tracing_flame. The resulting profile can be visualized with inferno[1],
|
||||||
@@ -1533,7 +1538,7 @@
|
|||||||
# a normal continuwuity admin command. The reply will be publicly visible
|
# a normal continuwuity admin command. The reply will be publicly visible
|
||||||
# to the room, originating from the sender.
|
# to the room, originating from the sender.
|
||||||
#
|
#
|
||||||
# example: \\!admin debug ping puppygock.gay
|
# example: \\!admin debug ping continuwuity.org
|
||||||
#
|
#
|
||||||
#admin_escape_commands = true
|
#admin_escape_commands = true
|
||||||
|
|
||||||
@@ -1551,7 +1556,8 @@
|
|||||||
# For example: `./continuwuity --execute "server admin-notice continuwuity
|
# For example: `./continuwuity --execute "server admin-notice continuwuity
|
||||||
# has started up at $(date)"`
|
# has started up at $(date)"`
|
||||||
#
|
#
|
||||||
# example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
# example: admin_execute = ["debug ping continuwuity.org", "debug echo
|
||||||
|
# hi"]`
|
||||||
#
|
#
|
||||||
#admin_execute = []
|
#admin_execute = []
|
||||||
|
|
||||||
|
|||||||
@@ -149,11 +149,12 @@ of it, especially when the CI completed successfully and everything so it
|
|||||||
*looks* done.
|
*looks* done.
|
||||||
|
|
||||||
Before submitting a pull request, please ensure:
|
Before submitting a pull request, please ensure:
|
||||||
1. Your code passes all CI checks (formatting, linting, typo detection, etc.)
|
1. Your code passes all CI checks (formatting, linting, typo detection, etc.). Run pre-commit for this.
|
||||||
2. Your code follows the [code style guide](./code_style)
|
2. Your code follows the [code style guide](./code_style)
|
||||||
3. Your commit messages follow the conventional commits format
|
3. Your commit messages follow the conventional commits format
|
||||||
4. Tests are added for new functionality
|
4. Tests are added for new functionality
|
||||||
5. Documentation is updated if needed
|
5. Documentation is updated if needed
|
||||||
|
6. You have written a [news fragment](#writing-news-fragments) for your changes
|
||||||
|
|
||||||
Direct all PRs/MRs to the `main` branch.
|
Direct all PRs/MRs to the `main` branch.
|
||||||
|
|
||||||
@@ -171,3 +172,32 @@ continuwuity Matrix rooms for Code of Conduct violations.
|
|||||||
[sytest]: https://github.com/matrix-org/sytest/
|
[sytest]: https://github.com/matrix-org/sytest/
|
||||||
[mdbook]: https://rust-lang.github.io/mdBook/
|
[mdbook]: https://rust-lang.github.io/mdBook/
|
||||||
[documentation.yml]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/.forgejo/workflows/documentation.yml
|
[documentation.yml]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/.forgejo/workflows/documentation.yml
|
||||||
|
|
||||||
|
#### Writing news fragments
|
||||||
|
|
||||||
|
In order to make writing our changelogs easier, we make use of [Towncrier]. Towncrier builds changelogs based on
|
||||||
|
"news fragments", which are little markdown files in the `changelog.d/` directory that describe individual changes.
|
||||||
|
|
||||||
|
When you make a pull request that changes functionality, fixes a bug, or adds documentation, please add a news fragment
|
||||||
|
describing your change. The file name *MUST* be in the format of `{pull_request_number}.{type}`, where `{type}` is one
|
||||||
|
of the following:
|
||||||
|
|
||||||
|
- `feature` - for new features
|
||||||
|
- `bugfix` - for bug fixes
|
||||||
|
- `doc` - for documentation changes
|
||||||
|
- `misc` - for other changes that don't fit the above categories
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ echo "Fixed the quantum flux stabiliser. Contributed by @alice." > changelog.d/42.bugfix
|
||||||
|
```
|
||||||
|
|
||||||
|
(Note: If you want to credit yourself, you should reference your forgejo handle, however links to other platforms are also acceptable.)
|
||||||
|
|
||||||
|
When the next release is made, Towncrier will automatically include your news fragment in the changelog.
|
||||||
|
|
||||||
|
You can read more about writing news fragments in the [Towncrier tutorial][tt].
|
||||||
|
|
||||||
|
[Towncrier]: https://towncrier.readthedocs.io/
|
||||||
|
[tt]: https://towncrier.readthedocs.io/en/stable/tutorial.html#creating-news-fragments
|
||||||
|
|||||||
+14
-4
@@ -69,8 +69,8 @@ pub struct Config {
|
|||||||
/// Also see the `[global.well_known]` config section at the very bottom.
|
/// Also see the `[global.well_known]` config section at the very bottom.
|
||||||
///
|
///
|
||||||
/// Examples of delegation:
|
/// Examples of delegation:
|
||||||
/// - https://puppygock.gay/.well-known/matrix/server
|
/// - https://continuwuity.org/.well-known/matrix/server
|
||||||
/// - https://puppygock.gay/.well-known/matrix/client
|
/// - https://continuwuity.org/.well-known/matrix/client
|
||||||
///
|
///
|
||||||
/// YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
/// YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
||||||
/// WIPE.
|
/// WIPE.
|
||||||
@@ -737,6 +737,13 @@ pub struct Config {
|
|||||||
#[serde(default = "default_otlp_filter", alias = "jaeger_filter")]
|
#[serde(default = "default_otlp_filter", alias = "jaeger_filter")]
|
||||||
pub otlp_filter: String,
|
pub otlp_filter: String,
|
||||||
|
|
||||||
|
/// Protocol to use for OTLP tracing export. Options are "http" or "grpc".
|
||||||
|
/// The HTTP protocol uses port 4318 by default, while gRPC uses port 4317.
|
||||||
|
///
|
||||||
|
/// default: "http"
|
||||||
|
#[serde(default = "default_otlp_protocol")]
|
||||||
|
pub otlp_protocol: String,
|
||||||
|
|
||||||
/// If the 'perf_measurements' compile-time feature is enabled, enables
|
/// If the 'perf_measurements' compile-time feature is enabled, enables
|
||||||
/// collecting folded stack trace profile of tracing spans using
|
/// collecting folded stack trace profile of tracing spans using
|
||||||
/// tracing_flame. The resulting profile can be visualized with inferno[1],
|
/// tracing_flame. The resulting profile can be visualized with inferno[1],
|
||||||
@@ -1752,7 +1759,7 @@ pub struct Config {
|
|||||||
/// a normal continuwuity admin command. The reply will be publicly visible
|
/// a normal continuwuity admin command. The reply will be publicly visible
|
||||||
/// to the room, originating from the sender.
|
/// to the room, originating from the sender.
|
||||||
///
|
///
|
||||||
/// example: \\!admin debug ping puppygock.gay
|
/// example: \\!admin debug ping continuwuity.org
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub admin_escape_commands: bool,
|
pub admin_escape_commands: bool,
|
||||||
|
|
||||||
@@ -1770,7 +1777,8 @@ pub struct Config {
|
|||||||
/// For example: `./continuwuity --execute "server admin-notice continuwuity
|
/// For example: `./continuwuity --execute "server admin-notice continuwuity
|
||||||
/// has started up at $(date)"`
|
/// has started up at $(date)"`
|
||||||
///
|
///
|
||||||
/// example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
/// example: admin_execute = ["debug ping continuwuity.org", "debug echo
|
||||||
|
/// hi"]`
|
||||||
///
|
///
|
||||||
/// default: []
|
/// default: []
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
@@ -2418,6 +2426,8 @@ fn default_otlp_filter() -> String {
|
|||||||
.to_owned()
|
.to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn default_otlp_protocol() -> String { "http".to_owned() }
|
||||||
|
|
||||||
fn default_tracing_flame_output_path() -> String { "./tracing.folded".to_owned() }
|
fn default_tracing_flame_output_path() -> String { "./tracing.folded".to_owned() }
|
||||||
|
|
||||||
fn default_trusted_servers() -> Vec<OwnedServerName> {
|
fn default_trusted_servers() -> Vec<OwnedServerName> {
|
||||||
|
|||||||
+7
-3
@@ -63,7 +63,8 @@ standard = [
|
|||||||
"systemd",
|
"systemd",
|
||||||
"url_preview",
|
"url_preview",
|
||||||
"zstd_compression",
|
"zstd_compression",
|
||||||
"sentry_telemetry"
|
"sentry_telemetry",
|
||||||
|
"otlp_telemetry"
|
||||||
]
|
]
|
||||||
full = [
|
full = [
|
||||||
"standard",
|
"standard",
|
||||||
@@ -124,12 +125,15 @@ ldap = [
|
|||||||
media_thumbnail = [
|
media_thumbnail = [
|
||||||
"conduwuit-service/media_thumbnail",
|
"conduwuit-service/media_thumbnail",
|
||||||
]
|
]
|
||||||
perf_measurements = [
|
otlp_telemetry = [
|
||||||
"dep:opentelemetry",
|
"dep:opentelemetry",
|
||||||
"dep:tracing-flame",
|
|
||||||
"dep:tracing-opentelemetry",
|
"dep:tracing-opentelemetry",
|
||||||
"dep:opentelemetry_sdk",
|
"dep:opentelemetry_sdk",
|
||||||
"dep:opentelemetry-otlp",
|
"dep:opentelemetry-otlp",
|
||||||
|
]
|
||||||
|
perf_measurements = [
|
||||||
|
"dep:tracing-flame",
|
||||||
|
"otlp_telemetry",
|
||||||
"conduwuit-core/perf_measurements",
|
"conduwuit-core/perf_measurements",
|
||||||
"conduwuit-core/sentry_telemetry",
|
"conduwuit-core/sentry_telemetry",
|
||||||
]
|
]
|
||||||
|
|||||||
+55
-30
@@ -7,8 +7,10 @@ use conduwuit_core::{
|
|||||||
log::{ConsoleFormat, ConsoleWriter, LogLevelReloadHandles, capture, fmt_span},
|
log::{ConsoleFormat, ConsoleWriter, LogLevelReloadHandles, capture, fmt_span},
|
||||||
result::UnwrapOrErr,
|
result::UnwrapOrErr,
|
||||||
};
|
};
|
||||||
#[cfg(feature = "perf_measurements")]
|
#[cfg(feature = "otlp_telemetry")]
|
||||||
use opentelemetry::trace::TracerProvider;
|
use opentelemetry::trace::TracerProvider;
|
||||||
|
#[cfg(feature = "otlp_telemetry")]
|
||||||
|
use opentelemetry_otlp::WithExportConfig;
|
||||||
use tracing_subscriber::{EnvFilter, Layer, Registry, fmt, layer::SubscriberExt, reload};
|
use tracing_subscriber::{EnvFilter, Layer, Registry, fmt, layer::SubscriberExt, reload};
|
||||||
|
|
||||||
#[cfg(feature = "perf_measurements")]
|
#[cfg(feature = "perf_measurements")]
|
||||||
@@ -70,6 +72,57 @@ pub(crate) fn init(
|
|||||||
subscriber.with(sentry_layer.with_filter(sentry_reload_filter))
|
subscriber.with(sentry_layer.with_filter(sentry_reload_filter))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(feature = "otlp_telemetry")]
|
||||||
|
let subscriber = {
|
||||||
|
let otlp_filter = EnvFilter::try_new(&config.otlp_filter)
|
||||||
|
.map_err(|e| err!(Config("otlp_filter", "{e}.")))?;
|
||||||
|
|
||||||
|
let otlp_layer = config.allow_otlp.then(|| {
|
||||||
|
opentelemetry::global::set_text_map_propagator(
|
||||||
|
opentelemetry_sdk::propagation::TraceContextPropagator::new(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let exporter = match config.otlp_protocol.as_str() {
|
||||||
|
| "grpc" => opentelemetry_otlp::SpanExporter::builder()
|
||||||
|
.with_tonic()
|
||||||
|
.with_protocol(opentelemetry_otlp::Protocol::Grpc)
|
||||||
|
.build()
|
||||||
|
.expect("Failed to create OTLP gRPC exporter"),
|
||||||
|
| "http" => opentelemetry_otlp::SpanExporter::builder()
|
||||||
|
.with_http()
|
||||||
|
.build()
|
||||||
|
.expect("Failed to create OTLP HTTP exporter"),
|
||||||
|
| protocol => {
|
||||||
|
debug_warn!(
|
||||||
|
"Invalid OTLP protocol '{}', falling back to HTTP. Valid options are \
|
||||||
|
'http' or 'grpc'.",
|
||||||
|
protocol
|
||||||
|
);
|
||||||
|
opentelemetry_otlp::SpanExporter::builder()
|
||||||
|
.with_http()
|
||||||
|
.build()
|
||||||
|
.expect("Failed to create OTLP HTTP exporter")
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
|
||||||
|
.with_batch_exporter(exporter)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let tracer = provider.tracer(conduwuit_core::name());
|
||||||
|
|
||||||
|
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
|
||||||
|
|
||||||
|
let (otlp_reload_filter, otlp_reload_handle) =
|
||||||
|
reload::Layer::new(otlp_filter.clone());
|
||||||
|
reload_handles.add("otlp", Box::new(otlp_reload_handle));
|
||||||
|
|
||||||
|
Some(telemetry.with_filter(otlp_reload_filter))
|
||||||
|
});
|
||||||
|
|
||||||
|
subscriber.with(otlp_layer)
|
||||||
|
};
|
||||||
|
|
||||||
#[cfg(feature = "perf_measurements")]
|
#[cfg(feature = "perf_measurements")]
|
||||||
let (subscriber, flame_guard) = {
|
let (subscriber, flame_guard) = {
|
||||||
let (flame_layer, flame_guard) = if config.tracing_flame {
|
let (flame_layer, flame_guard) = if config.tracing_flame {
|
||||||
@@ -89,35 +142,7 @@ pub(crate) fn init(
|
|||||||
(None, None)
|
(None, None)
|
||||||
};
|
};
|
||||||
|
|
||||||
let otlp_filter = EnvFilter::try_new(&config.otlp_filter)
|
let subscriber = subscriber.with(flame_layer);
|
||||||
.map_err(|e| err!(Config("otlp_filter", "{e}.")))?;
|
|
||||||
|
|
||||||
let otlp_layer = config.allow_otlp.then(|| {
|
|
||||||
opentelemetry::global::set_text_map_propagator(
|
|
||||||
opentelemetry_sdk::propagation::TraceContextPropagator::new(),
|
|
||||||
);
|
|
||||||
|
|
||||||
let exporter = opentelemetry_otlp::SpanExporter::builder()
|
|
||||||
.with_http()
|
|
||||||
.build()
|
|
||||||
.expect("Failed to create OTLP exporter");
|
|
||||||
|
|
||||||
let provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
|
|
||||||
.with_batch_exporter(exporter)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
let tracer = provider.tracer(conduwuit_core::name());
|
|
||||||
|
|
||||||
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
|
|
||||||
|
|
||||||
let (otlp_reload_filter, otlp_reload_handle) =
|
|
||||||
reload::Layer::new(otlp_filter.clone());
|
|
||||||
reload_handles.add("otlp", Box::new(otlp_reload_handle));
|
|
||||||
|
|
||||||
Some(telemetry.with_filter(otlp_reload_filter))
|
|
||||||
});
|
|
||||||
|
|
||||||
let subscriber = subscriber.with(flame_layer).with(otlp_layer);
|
|
||||||
(subscriber, flame_guard)
|
(subscriber, flame_guard)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
[tool.towncrier]
|
||||||
|
name = "Continuwuity"
|
||||||
|
directory = "changelog.d"
|
||||||
|
filename = "CHANGELOG.md"
|
||||||
Reference in New Issue
Block a user