From bbe9be38593abcc58208d82dd227e230ea98f4dd Mon Sep 17 00:00:00 2001 From: Filipriec Date: Wed, 16 Sep 2026 22:14:41 +0200 Subject: [PATCH] better charts3 --- client-gui2 | 2 +- common/proto/analytics.proto | 19 -------- common/src/proto/descriptor.bin | Bin 310804 -> 309130 bytes common/src/proto/komp_ac.analytics.rs | 62 -------------------------- common/src/reporting.rs | 31 +------------ server | 2 +- 6 files changed, 3 insertions(+), 113 deletions(-) diff --git a/client-gui2 b/client-gui2 index 43a95c35..a66fa8e7 160000 --- a/client-gui2 +++ b/client-gui2 @@ -1 +1 @@ -Subproject commit 43a95c353369d17b5fd235ad67cdedc76026ad71 +Subproject commit a66fa8e746484b53e8ed541832f902a821509129 diff --git a/common/proto/analytics.proto b/common/proto/analytics.proto index 6f7c66dd..05be4530 100644 --- a/common/proto/analytics.proto +++ b/common/proto/analytics.proto @@ -196,15 +196,6 @@ enum ReportNullPolicy { REPORT_NULL_POLICY_ZERO = 2; } -enum ReportCapability { - REPORT_CAPABILITY_UNSPECIFIED = 0; - REPORT_CAPABILITY_VIEW = 1; - REPORT_CAPABILITY_FILTER = 2; - REPORT_CAPABILITY_DRILL = 3; - REPORT_CAPABILITY_EXPORT = 4; - REPORT_CAPABILITY_CUSTOMIZE = 5; -} - enum ReportExecutionPurpose { REPORT_EXECUTION_PURPOSE_UNSPECIFIED = 0; REPORT_EXECUTION_PURPOSE_VIEW = 1; @@ -360,20 +351,11 @@ message ReportPanel { repeated ReportPanelAction actions = 23; } -message ReportGrant { - oneof subject { - string role = 1; - string user_id = 2; - } - repeated ReportCapability capabilities = 3; -} - message ReportDashboardDefinition { string title = 1; string description = 2; repeated ReportDashboardFilter filters = 3; repeated ReportPanel panels = 4; - repeated ReportGrant grants = 5; uint32 refresh_seconds = 6; repeated ReportDatasetVersionRef dataset_versions = 7; ReportPeriod period = 8; @@ -420,7 +402,6 @@ message ReportAssetSummary { uint64 published_version = 6; bool archived = 7; string updated_at = 8; - repeated ReportCapability capabilities = 9; } message ReportAsset { diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 359038c86bba5cdc968c9c8b158a6ce95a259ec3..4f6594ee5510f9c32bf747cc6891605ad9ad9606 100644 GIT binary patch delta 13519 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 Z_, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ReportGrant { - #[prost(enumeration = "ReportCapability", repeated, tag = "3")] - pub capabilities: ::prost::alloc::vec::Vec, - #[prost(oneof = "report_grant::Subject", tags = "1, 2")] - pub subject: ::core::option::Option, -} -/// Nested message and enum types in `ReportGrant`. -pub mod report_grant { - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)] - pub enum Subject { - #[prost(string, tag = "1")] - Role(::prost::alloc::string::String), - #[prost(string, tag = "2")] - UserId(::prost::alloc::string::String), - } -} -#[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ReportDashboardDefinition { #[prost(string, tag = "1")] @@ -418,8 +399,6 @@ pub struct ReportDashboardDefinition { pub filters: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "4")] pub panels: ::prost::alloc::vec::Vec, - #[prost(message, repeated, tag = "5")] - pub grants: ::prost::alloc::vec::Vec, #[prost(uint32, tag = "6")] pub refresh_seconds: u32, #[prost(message, repeated, tag = "7")] @@ -504,8 +483,6 @@ pub struct ReportAssetSummary { pub archived: bool, #[prost(string, tag = "8")] pub updated_at: ::prost::alloc::string::String, - #[prost(enumeration = "ReportCapability", repeated, tag = "9")] - pub capabilities: ::prost::alloc::vec::Vec, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -1069,45 +1046,6 @@ impl ReportNullPolicy { #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] -pub enum ReportCapability { - Unspecified = 0, - View = 1, - Filter = 2, - Drill = 3, - Export = 4, - Customize = 5, -} -impl ReportCapability { - /// String value of the enum field names used in the ProtoBuf definition. - /// - /// The values are not transformed in any way and thus are considered stable - /// (if the ProtoBuf definition does not change) and safe for programmatic use. - pub fn as_str_name(&self) -> &'static str { - match self { - Self::Unspecified => "REPORT_CAPABILITY_UNSPECIFIED", - Self::View => "REPORT_CAPABILITY_VIEW", - Self::Filter => "REPORT_CAPABILITY_FILTER", - Self::Drill => "REPORT_CAPABILITY_DRILL", - Self::Export => "REPORT_CAPABILITY_EXPORT", - Self::Customize => "REPORT_CAPABILITY_CUSTOMIZE", - } - } - /// Creates an enum from field names used in the ProtoBuf definition. - pub fn from_str_name(value: &str) -> ::core::option::Option { - match value { - "REPORT_CAPABILITY_UNSPECIFIED" => Some(Self::Unspecified), - "REPORT_CAPABILITY_VIEW" => Some(Self::View), - "REPORT_CAPABILITY_FILTER" => Some(Self::Filter), - "REPORT_CAPABILITY_DRILL" => Some(Self::Drill), - "REPORT_CAPABILITY_EXPORT" => Some(Self::Export), - "REPORT_CAPABILITY_CUSTOMIZE" => Some(Self::Customize), - _ => None, - } - } -} -#[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] -#[repr(i32)] pub enum ReportExecutionPurpose { Unspecified = 0, View = 1, diff --git a/common/src/reporting.rs b/common/src/reporting.rs index 0783e29d..f14d6107 100644 --- a/common/src/reporting.rs +++ b/common/src/reporting.rs @@ -176,10 +176,6 @@ pub fn validate_draft(definition: &ReportDefinition) -> Result<(), String> { enum_value::(p.null_policy, "null policy")?; for action in &p.actions { action.target.as_ref().ok_or("An action target is required")?; } } - for g in &d.grants { - g.subject.as_ref().ok_or("A grant subject is required")?; - for c in &g.capabilities { enum_value::(*c, "capability")?; } - } if let Some(period) = &d.period { period.selection.as_ref().ok_or("A period selection is required")?; } if let Some(report_period::Selection::DateRange(range)) = d.period.as_ref().and_then(|p| p.selection.as_ref()) { enum_value::(range.end_boundary, "period end boundary")?; @@ -299,10 +295,9 @@ fn validate_dashboard(dashboard: &ReportDashboardDefinition) -> Result<(), Strin if dashboard.filters.len() > 32 || dashboard.panels.is_empty() || dashboard.panels.len() > 32 - || dashboard.grants.len() > 200 { return Err( - "Dashboards allow up to 32 filters, between 1 and 32 panels, and up to 200 grants" + "Dashboards allow up to 32 filters and between 1 and 32 panels" .into(), ); } @@ -421,30 +416,6 @@ fn validate_dashboard(dashboard: &ReportDashboardDefinition) -> Result<(), Strin } } } - let mut subjects = HashSet::new(); - for grant in &dashboard.grants { - let subject = grant - .subject - .as_ref() - .ok_or("A grant subject is required")?; - let value = match subject { - report_grant::Subject::Role(role) => role, - report_grant::Subject::UserId(user) => user, - }; - nonempty(value, "Grant subject", 128)?; - if !subjects.insert(subject) { - return Err("Duplicate report grant subject".into()); - } - let mut capabilities = HashSet::new(); - for capability in &grant.capabilities { - capabilities.insert(enum_value::(*capability, "capability")?); - } - if !capabilities.contains(&ReportCapability::View) - || capabilities.len() != grant.capabilities.len() - { - return Err("Report grants need View and unique capabilities".into()); - } - } Ok(()) } diff --git a/server b/server index 96339d88..07ee9087 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 96339d88c4322cc8957d28524fca757f7e4ba8fa +Subproject commit 07ee9087862d0a467aeccc72c9a69ee9a9f66a51