mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a291a2a106 | |||
| b340516610 | |||
| f7891a3c6b | |||
| 9ce64a7697 | |||
| 07163510fa | |||
| 5f9eb0f505 |
Generated
-2
@@ -3305,8 +3305,6 @@ 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", "grpc-tonic", "trace", "logs", "metrics"]
|
features = ["http", "trace", "logs", "metrics"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
Enabled the OLTP exporter in default builds, and allow configuring the exporter protocol. (@Jade).
|
|
||||||
+4
-10
@@ -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://continuwuity.org/.well-known/matrix/server
|
# - https://puppygock.gay/.well-known/matrix/server
|
||||||
# - https://continuwuity.org/.well-known/matrix/client
|
# - https://puppygock.gay/.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,11 +608,6 @@
|
|||||||
#
|
#
|
||||||
#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],
|
||||||
@@ -1538,7 +1533,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 continuwuity.org
|
# example: \\!admin debug ping puppygock.gay
|
||||||
#
|
#
|
||||||
#admin_escape_commands = true
|
#admin_escape_commands = true
|
||||||
|
|
||||||
@@ -1556,8 +1551,7 @@
|
|||||||
# 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 continuwuity.org", "debug echo
|
# example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
||||||
# hi"]`
|
|
||||||
#
|
#
|
||||||
#admin_execute = []
|
#admin_execute = []
|
||||||
|
|
||||||
|
|||||||
@@ -149,12 +149,11 @@ 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.). Run pre-commit for this.
|
1. Your code passes all CI checks (formatting, linting, typo detection, etc.)
|
||||||
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.
|
||||||
|
|
||||||
@@ -172,32 +171,3 @@ 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
|
|
||||||
|
|||||||
+4
-14
@@ -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://continuwuity.org/.well-known/matrix/server
|
/// - https://puppygock.gay/.well-known/matrix/server
|
||||||
/// - https://continuwuity.org/.well-known/matrix/client
|
/// - https://puppygock.gay/.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,13 +737,6 @@ 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],
|
||||||
@@ -1759,7 +1752,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 continuwuity.org
|
/// example: \\!admin debug ping puppygock.gay
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub admin_escape_commands: bool,
|
pub admin_escape_commands: bool,
|
||||||
|
|
||||||
@@ -1777,8 +1770,7 @@ 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 continuwuity.org", "debug echo
|
/// example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
||||||
/// hi"]`
|
|
||||||
///
|
///
|
||||||
/// default: []
|
/// default: []
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
@@ -2426,8 +2418,6 @@ 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> {
|
||||||
|
|||||||
+3
-7
@@ -63,8 +63,7 @@ standard = [
|
|||||||
"systemd",
|
"systemd",
|
||||||
"url_preview",
|
"url_preview",
|
||||||
"zstd_compression",
|
"zstd_compression",
|
||||||
"sentry_telemetry",
|
"sentry_telemetry"
|
||||||
"otlp_telemetry"
|
|
||||||
]
|
]
|
||||||
full = [
|
full = [
|
||||||
"standard",
|
"standard",
|
||||||
@@ -125,15 +124,12 @@ ldap = [
|
|||||||
media_thumbnail = [
|
media_thumbnail = [
|
||||||
"conduwuit-service/media_thumbnail",
|
"conduwuit-service/media_thumbnail",
|
||||||
]
|
]
|
||||||
otlp_telemetry = [
|
perf_measurements = [
|
||||||
"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",
|
||||||
]
|
]
|
||||||
|
|||||||
+30
-55
@@ -7,10 +7,8 @@ use conduwuit_core::{
|
|||||||
log::{ConsoleFormat, ConsoleWriter, LogLevelReloadHandles, capture, fmt_span},
|
log::{ConsoleFormat, ConsoleWriter, LogLevelReloadHandles, capture, fmt_span},
|
||||||
result::UnwrapOrErr,
|
result::UnwrapOrErr,
|
||||||
};
|
};
|
||||||
#[cfg(feature = "otlp_telemetry")]
|
#[cfg(feature = "perf_measurements")]
|
||||||
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")]
|
||||||
@@ -72,57 +70,6 @@ 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 {
|
||||||
@@ -142,7 +89,35 @@ pub(crate) fn init(
|
|||||||
(None, None)
|
(None, None)
|
||||||
};
|
};
|
||||||
|
|
||||||
let subscriber = subscriber.with(flame_layer);
|
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 = 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)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
[tool.towncrier]
|
|
||||||
name = "Continuwuity"
|
|
||||||
directory = "changelog.d"
|
|
||||||
filename = "CHANGELOG.md"
|
|
||||||
Reference in New Issue
Block a user