mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 39aaf95d09 | |||
| 5e0edd5a1c | |||
| d180f5a759 | |||
| f163264a82 | |||
| 5e7bc590d2 | |||
| 08df35946b | |||
| c4ebf289fa | |||
| 1fc6010f9a | |||
| 1d91331275 | |||
| 77e62ad772 | |||
| 696a1e6a4d | |||
| f41bbd7361 | |||
| 7350266c80 | |||
| 322c0900c6 | |||
| 1237e60aaf |
@@ -0,0 +1,82 @@
|
|||||||
|
---
|
||||||
|
name: 'New pull request'
|
||||||
|
about: 'Open a new pull request to contribute to continuwuity'
|
||||||
|
ref: 'main'
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
In order to help reviewers know what your pull request does at a glance, you should ensure that
|
||||||
|
|
||||||
|
1. Your PR title is a short, single sentence describing what you changed
|
||||||
|
2. You have described in more detail what you have changed, why you have changed it, what the
|
||||||
|
intended effect is, and why you think this will be beneficial to the project.
|
||||||
|
|
||||||
|
If you have made any potentially strange/questionable design choices, but didn't feel they'd benefit
|
||||||
|
from code comments, please don't mention them here - after opening your pull request,
|
||||||
|
go to "files changed", and click on the "+" symbol in the line number gutter,
|
||||||
|
and attach comments to the lines that you think would benefit from some clarification.
|
||||||
|
-->
|
||||||
|
|
||||||
|
This pull request...
|
||||||
|
|
||||||
|
<!-- Example:
|
||||||
|
This pull request allows us to warp through time and space ten times faster than before by
|
||||||
|
double-inverting the warp drive with hyperheated jump fluid, both making the drive faster and more
|
||||||
|
efficient. This resolves the common issue where we have to wait more than 10 milliseconds to
|
||||||
|
engage, use, and disengage the warp drive when travelling between galaxies.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Closes: #... -->
|
||||||
|
<!-- Fixes: #... -->
|
||||||
|
<!-- Uncomment the above line(s) if your pull request fixes an issue or closes another pull request
|
||||||
|
by superseding it. Replace `#...` with the issue/pr number, such as `#123`. -->
|
||||||
|
|
||||||
|
**Pull request checklist:**
|
||||||
|
|
||||||
|
<!-- You need to complete these before your PR can be considered.
|
||||||
|
If you aren't sure about some, feel free to ask for clarification in #dev:continuwuity.org. -->
|
||||||
|
- [ ] This pull request targets the `main` branch, and the branch is named something other than
|
||||||
|
`main`.
|
||||||
|
- [ ] I have written an appropriate pull request title and my description is clear.
|
||||||
|
- [ ] I understand I am responsible for the contents of this pull request.
|
||||||
|
- I have followed the [contributing guidelines][c1]:
|
||||||
|
- [ ] My contribution follows the [code style][c2], if applicable.
|
||||||
|
- [ ] I ran [pre-commit checks][c1pc] before opening/drafting this pull request.
|
||||||
|
- [ ] I have [tested my contribution][c1t] (or proof-read it for documentation-only changes)
|
||||||
|
myself, if applicable. This includes ensuring code compiles.
|
||||||
|
- [ ] My commit messages follow the [commit message format][c1cm] and are descriptive.
|
||||||
|
- [ ] I have written a [news fragment][n1] for this PR, if applicable<!--(can be done after hitting open!)-->.
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Notes on these requirements:
|
||||||
|
|
||||||
|
- While not required, we encourage you to sign your commits with GPG or SSH to attest the
|
||||||
|
authenticity of your changes.
|
||||||
|
- While we allow LLM-assisted contributions, we do not appreciate contributions that are
|
||||||
|
low quality, which is typical of machine-generated contributions that have not had a lot of love
|
||||||
|
and care from a human. Please do not open a PR if all you have done is asked ChatGPT to tidy up
|
||||||
|
the codebase with a +-100,000 diff.
|
||||||
|
- In the case of code style violations, reviewers may leave review comments/change requests
|
||||||
|
indicating what the ideal change would look like. For example, a reviewer may suggest you lower
|
||||||
|
a log level, or use `match` instead of `if/else` etc.
|
||||||
|
- In the case of code style violations, pre-commit check failures, minor things like typos/spelling
|
||||||
|
errors, and in some cases commit format violations, reviewers may modify your branch directly,
|
||||||
|
typically by making changes and adding a commit. Particularly in the latter case, a reviewer may
|
||||||
|
rebase your commits to squash "spammy" ones (like "fix", "fix", "actually fix"), and reword
|
||||||
|
commit messages that don't satisfy the format.
|
||||||
|
- Pull requests MUST pass the `Checks` CI workflows to be capable of being merged. This can only be
|
||||||
|
bypassed in exceptional circumstances.
|
||||||
|
If your CI flakes, let us know in matrix:r/dev:continuwuity.org.
|
||||||
|
- Pull requests have to be based on the latest `main` commit before being merged. If the main branch
|
||||||
|
changes while you're making your changes, you should make sure you rebase on main before
|
||||||
|
opening a PR. Your branch will be rebased on main before it is merged if it has fallen behind.
|
||||||
|
- We typically only do fast-forward merges, so your entire commit log will be included. Once in
|
||||||
|
main, it's difficult to get out cleanly, so put on your best dress, smile for the cameras!
|
||||||
|
-->
|
||||||
|
|
||||||
|
[c1]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md
|
||||||
|
[c2]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/docs/development/code_style.mdx
|
||||||
|
[c1pc]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#pre-commit-checks
|
||||||
|
[c1t]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#running-tests-locally
|
||||||
|
[c1cm]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#commit-messages
|
||||||
|
[n1]: https://towncrier.readthedocs.io/en/stable/tutorial.html#creating-news-fragments
|
||||||
@@ -18,12 +18,6 @@ on:
|
|||||||
- "v*.*.*"
|
- "v*.*.*"
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
|
||||||
commit:
|
|
||||||
description: 'Commit SHA to build (default: latest commit on the branch)'
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
type: string
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BUILTIN_REGISTRY: forgejo.ellis.link
|
BUILTIN_REGISTRY: forgejo.ellis.link
|
||||||
@@ -48,14 +42,10 @@ jobs:
|
|||||||
slug: "linux-arm64"
|
slug: "linux-arm64"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Pick checkout ref
|
|
||||||
run:
|
|
||||||
echo "COMMIT_REF=${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.commit != '' && github.event.inputs.commit || github.sha) || github.sha }}" >> $GITHUB_ENV
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
ref: ${{ env.COMMIT_REF }}
|
|
||||||
- name: Prepare Docker build environment
|
- name: Prepare Docker build environment
|
||||||
id: prepare
|
id: prepare
|
||||||
uses: ./.forgejo/actions/prepare-docker-build
|
uses: ./.forgejo/actions/prepare-docker-build
|
||||||
|
|||||||
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 = []
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,10 @@ services:
|
|||||||
TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_HTTPCHALLENGE_ENTRYPOINT: web
|
TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_HTTPCHALLENGE_ENTRYPOINT: web
|
||||||
TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_STORAGE: "/etc/traefik/acme/acme.json"
|
TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_STORAGE: "/etc/traefik/acme/acme.json"
|
||||||
|
|
||||||
|
# Since Traefik 3.6.3, paths with certain "encoded characters" are now blocked by default; we need a couple, or else things *will* break
|
||||||
|
TRAEFIK_ENTRYPOINTS_WEBSECURE_HTTP_ENCODEDCHARACTERS_ALLOWENCODEDSLASH: true
|
||||||
|
TRAEFIK_ENTRYPOINTS_WEBSECURE_HTTP_ENCODEDCHARACTERS_ALLOWENCODEDHASH: true
|
||||||
|
|
||||||
TRAEFIK_PROVIDERS_DOCKER: true
|
TRAEFIK_PROVIDERS_DOCKER: true
|
||||||
TRAEFIK_PROVIDERS_DOCKER_ENDPOINT: "unix:///var/run/docker.sock"
|
TRAEFIK_PROVIDERS_DOCKER_ENDPOINT: "unix:///var/run/docker.sock"
|
||||||
TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT: false
|
TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT: false
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -68,6 +68,12 @@ pub(crate) async fn upgrade_room_route(
|
|||||||
return Err!(Request(UserSuspended("You cannot perform this action while suspended.")));
|
return Err!(Request(UserSuspended("You cannot perform this action while suspended.")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure this isn't the admin room
|
||||||
|
// Admin room upgrades are hacky and should be done manually instead.
|
||||||
|
if services.admin.is_admin_room(&body.room_id).await {
|
||||||
|
return Err!(Request(Forbidden("Upgrading the admin room this way is not allowed.")));
|
||||||
|
}
|
||||||
|
|
||||||
// First, check if the user has permission to upgrade the room (send tombstone
|
// First, check if the user has permission to upgrade the room (send tombstone
|
||||||
// event)
|
// event)
|
||||||
let old_room_state_lock = services.rooms.state.mutex.lock(&body.room_id).await;
|
let old_room_state_lock = services.rooms.state.mutex.lock(&body.room_id).await;
|
||||||
@@ -266,7 +272,7 @@ pub(crate) async fn upgrade_room_route(
|
|||||||
.room_state_keys(&body.room_id, event_type)
|
.room_state_keys(&body.room_id, event_type)
|
||||||
.await?;
|
.await?;
|
||||||
for state_key in state_keys {
|
for state_key in state_keys {
|
||||||
let event_content = match services
|
let mut event_content = match services
|
||||||
.rooms
|
.rooms
|
||||||
.state_accessor
|
.state_accessor
|
||||||
.room_state_get(&body.room_id, event_type, &state_key)
|
.room_state_get(&body.room_id, event_type, &state_key)
|
||||||
@@ -279,6 +285,21 @@ pub(crate) async fn upgrade_room_route(
|
|||||||
// If the event content is empty, we skip it
|
// If the event content is empty, we skip it
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// If this is a power levels event, and the new room version has creators,
|
||||||
|
// we need to make sure they dont appear in the users block of power levels.
|
||||||
|
if *event_type == StateEventType::RoomPowerLevels {
|
||||||
|
// TODO(v12): additional creators
|
||||||
|
let creators = vec![sender_user];
|
||||||
|
let mut power_levels_event_content: RoomPowerLevelsEventContent =
|
||||||
|
serde_json::from_str(event_content.get()).map_err(|_| {
|
||||||
|
err!(Request(BadJson("Power levels event content is not valid")))
|
||||||
|
})?;
|
||||||
|
for creator in creators {
|
||||||
|
power_levels_event_content.users.remove(creator);
|
||||||
|
}
|
||||||
|
event_content = to_raw_value(&power_levels_event_content)
|
||||||
|
.expect("event is valid, we just deserialized and modified it");
|
||||||
|
}
|
||||||
|
|
||||||
services
|
services
|
||||||
.rooms
|
.rooms
|
||||||
|
|||||||
+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