Compare commits

...
3 Commits
Author SHA1 Message Date
Fedor KorotkovandNikolay Edigaryev e71b32a8dd Populate Sentry Release (#17)
* Populate Sentry Release

* Reverted new line

* Update src/main.rs

Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>

Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
2022-12-14 17:17:34 -05:00
Nikolay Edigaryev 59cd9098e0 Ignore ENOBUFS when writing to VM's socket (#18)
* Ignore ENOBUFS when writing to VM's socket

* Hint the into() target type to the compiler to fix the build error

* Fix Clippy warnings
2022-12-15 00:15:19 +04:00
Nikolay Edigaryev 4ab3cd7e5c Switch back to nightly toolchain (#16) 2022-12-14 23:18:24 +04:00
5 changed files with 35 additions and 12 deletions
+8 -5
View File
@@ -23,12 +23,11 @@ task:
SENTRY_AUTH_TOKEN: ENCRYPTED[!c16a5cf7da5f856b4bc2f21fe8cb7aa2a6c981f851c094ed4d3025fd02ea59a58a86cee8b193a69a1fc20fa217e56ac3!] SENTRY_AUTH_TOKEN: ENCRYPTED[!c16a5cf7da5f856b4bc2f21fe8cb7aa2a6c981f851c094ed4d3025fd02ea59a58a86cee8b193a69a1fc20fa217e56ac3!]
install_rust_script: install_rust_script:
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
install_goreleaser_script: install_script:
- brew install go goreleaser/tap/goreleaser-pro - brew install go goreleaser/tap/goreleaser-pro getsentry/tools/sentry-cli
build_script: build_script:
- cargo build --profile release-with-debug - cargo build --profile release-with-debug
install_sentry_cli_script: release_script: goreleaser
- brew install getsentry/tools/sentry-cli
upload_sentry_debug_files_script: upload_sentry_debug_files_script:
- cd target/release-with-debug/ - cd target/release-with-debug/
# Generate and upload symbols # Generate and upload symbols
@@ -37,4 +36,8 @@ task:
# Bundle and upload sources # Bundle and upload sources
- sentry-cli debug-files bundle-sources softnet.dSYM/ - sentry-cli debug-files bundle-sources softnet.dSYM/
- sentry-cli debug-files upload -o $SENTRY_ORG -p $SENTRY_PROJECT softnet.src.zip - sentry-cli debug-files upload -o $SENTRY_ORG -p $SENTRY_PROJECT softnet.src.zip
release_script: goreleaser create_sentry_release_script:
- export SENTRY_RELEASE="softnet@$CIRRUS_TAG"
- sentry-cli releases new $SENTRY_RELEASE
- sentry-cli releases set-commits $SENTRY_RELEASE --auto
- sentry-cli releases finalize $SENTRY_RELEASE
+8 -2
View File
@@ -52,8 +52,14 @@ impl Poller {
self.poller self.poller
.wait(&mut self.events, Some(Duration::from_millis(100)))?; .wait(&mut self.events, Some(Duration::from_millis(100)))?;
let vm_readable = self.events.iter().any(|ev| ev.key == EventKey::VM.into()); let vm_readable = self
let host_readable = self.events.iter().any(|ev| ev.key == EventKey::Host.into()); .events
.iter()
.any(|ev| ev.key == Into::<usize>::into(EventKey::VM));
let host_readable = self
.events
.iter()
.any(|ev| ev.key == Into::<usize>::into(EventKey::Host));
Ok((vm_readable, host_readable)) Ok((vm_readable, host_readable))
} }
+15 -4
View File
@@ -16,10 +16,21 @@ impl Proxy {
self.snoop(frame); self.snoop(frame);
} }
self.vm match self.vm.write(frame.as_ref()) {
.write(frame.as_ref()) Ok(_) => Ok(()),
.map(|_| ()) Err(err) => {
.context("failed to write to the VM") if let Some(libc::ENOBUFS) = err.raw_os_error() {
sentry::capture_message(
"No buffer space available in VM's socket",
sentry::Level::Warning,
);
return Ok(());
}
Err(err).context("failed to write to the VM")
}
}
} }
fn allowed_from_host(&mut self, frame: &EthernetFrame<&[u8]>) -> Option<()> { fn allowed_from_host(&mut self, frame: &EthernetFrame<&[u8]>) -> Option<()> {
+1
View File
@@ -0,0 +1 @@
nightly
+3 -1
View File
@@ -2,6 +2,7 @@ use anyhow::{anyhow, Context};
use clap::Parser; use clap::Parser;
use privdrop::PrivDrop; use privdrop::PrivDrop;
use softnet::proxy::Proxy; use softnet::proxy::Proxy;
use std::borrow::Cow;
use std::env; use std::env;
use std::os::raw::c_int; use std::os::raw::c_int;
use std::os::unix::io::RawFd; use std::os::unix::io::RawFd;
@@ -54,13 +55,14 @@ fn main() -> ExitCode {
// Initialize Sentry // Initialize Sentry
let _sentry = sentry::init(sentry::ClientOptions { let _sentry = sentry::init(sentry::ClientOptions {
release: option_env!("CIRRUS_TAG").map(|tag| { Cow::from(format!("softnet@{tag}")) }),
..Default::default() ..Default::default()
}); });
// Enrich future events with Cirrus CI-specific tags // Enrich future events with Cirrus CI-specific tags
if let Ok(tags) = env::var("CIRRUS_SENTRY_TAGS") { if let Ok(tags) = env::var("CIRRUS_SENTRY_TAGS") {
sentry::configure_scope(|scope| { sentry::configure_scope(|scope| {
for (key, value) in tags.split(",").map(|tag| tag.split_once("=")).flatten() { for (key, value) in tags.split(',').filter_map(|tag| tag.split_once('=')) {
scope.set_tag(key, value); scope.set_tag(key, value);
} }
}); });