diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 2204a0319c..5567472d65 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -329,7 +329,7 @@ impl Server { { let mut store = this.store_mut().await; - store.add_connection(connection_id, user_id); + store.add_connection(connection_id, user_id, user.admin); this.peer.send(connection_id, store.build_initial_contacts_update(contacts))?; if let Some((code, count)) = invite_code { diff --git a/crates/collab/src/rpc/store.rs b/crates/collab/src/rpc/store.rs index d929078dc5..88b4cc8067 100644 --- a/crates/collab/src/rpc/store.rs +++ b/crates/collab/src/rpc/store.rs @@ -25,6 +25,7 @@ pub struct Store { #[derive(Serialize)] struct ConnectionState { user_id: UserId, + admin: bool, projects: HashSet, requested_projects: HashSet, channels: HashSet, @@ -88,13 +89,17 @@ pub struct Metrics { impl Store { pub fn metrics(&self) -> Metrics { - let connections = self.connections.len(); + let connections = self.connections.values().filter(|c| !c.admin).count(); let mut registered_projects = 0; let mut shared_projects = 0; for project in self.projects.values() { - registered_projects += 1; - if !project.guests.is_empty() { - shared_projects += 1; + if let Some(connection) = self.connections.get(&project.host_connection_id) { + if !connection.admin { + registered_projects += 1; + if !project.guests.is_empty() { + shared_projects += 1; + } + } } } @@ -106,11 +111,12 @@ impl Store { } #[instrument(skip(self))] - pub fn add_connection(&mut self, connection_id: ConnectionId, user_id: UserId) { + pub fn add_connection(&mut self, connection_id: ConnectionId, user_id: UserId, admin: bool) { self.connections.insert( connection_id, ConnectionState { user_id, + admin, projects: Default::default(), requested_projects: Default::default(), channels: Default::default(),