Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: redo to not expose enum in api endpoints #527

Merged
merged 2 commits into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions src/declarations/orbiter/orbiter.did.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,6 @@ export interface SetTrackEvent {
satellite_id: Principal;
user_agent: [] | [string];
}
export type StoredPageView = { Unbounded: PageView } | { Bounded: PageView };
export type StoredTrackEvent = { Unbounded: TrackEvent } | { Bounded: TrackEvent };
export interface TrackEvent {
updated_at: bigint;
session_id: string;
Expand All @@ -139,11 +137,11 @@ export interface _SERVICE {
del_controllers: ActorMethod<[DeleteControllersArgs], Array<[Principal, Controller]>>;
del_satellite_config: ActorMethod<[Principal, DelSatelliteConfig], undefined>;
deposit_cycles: ActorMethod<[DepositCyclesArgs], undefined>;
get_page_views: ActorMethod<[GetAnalytics], Array<[AnalyticKey, StoredPageView]>>;
get_page_views: ActorMethod<[GetAnalytics], Array<[AnalyticKey, PageView]>>;
get_page_views_analytics_clients: ActorMethod<[GetAnalytics], AnalyticsClientsPageViews>;
get_page_views_analytics_metrics: ActorMethod<[GetAnalytics], AnalyticsMetricsPageViews>;
get_page_views_analytics_top_10: ActorMethod<[GetAnalytics], AnalyticsTop10PageViews>;
get_track_events: ActorMethod<[GetAnalytics], Array<[AnalyticKey, StoredTrackEvent]>>;
get_track_events: ActorMethod<[GetAnalytics], Array<[AnalyticKey, TrackEvent]>>;
get_track_events_analytics: ActorMethod<[GetAnalytics], AnalyticsTrackEvents>;
list_controllers: ActorMethod<[], Array<[Principal, Controller]>>;
list_satellite_configs: ActorMethod<[], Array<[Principal, OrbiterSatelliteConfig]>>;
Expand Down
12 changes: 2 additions & 10 deletions src/declarations/orbiter/orbiter.factory.did.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@ export const idlFactory = ({ IDL }) => {
device: PageViewDevice,
user_agent: IDL.Opt(IDL.Text)
});
const StoredPageView = IDL.Variant({
Unbounded: PageView,
Bounded: PageView
});
const AnalyticsBrowsersPageViews = IDL.Record({
safari: IDL.Float64,
opera: IDL.Float64,
Expand Down Expand Up @@ -89,10 +85,6 @@ export const idlFactory = ({ IDL }) => {
created_at: IDL.Nat64,
satellite_id: IDL.Principal
});
const StoredTrackEvent = IDL.Variant({
Unbounded: TrackEvent,
Bounded: TrackEvent
});
const AnalyticsTrackEvents = IDL.Record({
total: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Nat32))
});
Expand Down Expand Up @@ -150,7 +142,7 @@ export const idlFactory = ({ IDL }) => {
deposit_cycles: IDL.Func([DepositCyclesArgs], [], []),
get_page_views: IDL.Func(
[GetAnalytics],
[IDL.Vec(IDL.Tuple(AnalyticKey, StoredPageView))],
[IDL.Vec(IDL.Tuple(AnalyticKey, PageView))],
['query']
),
get_page_views_analytics_clients: IDL.Func(
Expand All @@ -166,7 +158,7 @@ export const idlFactory = ({ IDL }) => {
get_page_views_analytics_top_10: IDL.Func([GetAnalytics], [AnalyticsTop10PageViews], ['query']),
get_track_events: IDL.Func(
[GetAnalytics],
[IDL.Vec(IDL.Tuple(AnalyticKey, StoredTrackEvent))],
[IDL.Vec(IDL.Tuple(AnalyticKey, TrackEvent))],
['query']
),
get_track_events_analytics: IDL.Func([GetAnalytics], [AnalyticsTrackEvents], ['query']),
Expand Down
12 changes: 2 additions & 10 deletions src/declarations/orbiter/orbiter.factory.did.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@ export const idlFactory = ({ IDL }) => {
device: PageViewDevice,
user_agent: IDL.Opt(IDL.Text)
});
const StoredPageView = IDL.Variant({
Unbounded: PageView,
Bounded: PageView
});
const AnalyticsBrowsersPageViews = IDL.Record({
safari: IDL.Float64,
opera: IDL.Float64,
Expand Down Expand Up @@ -89,10 +85,6 @@ export const idlFactory = ({ IDL }) => {
created_at: IDL.Nat64,
satellite_id: IDL.Principal
});
const StoredTrackEvent = IDL.Variant({
Unbounded: TrackEvent,
Bounded: TrackEvent
});
const AnalyticsTrackEvents = IDL.Record({
total: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Nat32))
});
Expand Down Expand Up @@ -150,7 +142,7 @@ export const idlFactory = ({ IDL }) => {
deposit_cycles: IDL.Func([DepositCyclesArgs], [], []),
get_page_views: IDL.Func(
[GetAnalytics],
[IDL.Vec(IDL.Tuple(AnalyticKey, StoredPageView))],
[IDL.Vec(IDL.Tuple(AnalyticKey, PageView))],
['query']
),
get_page_views_analytics_clients: IDL.Func(
Expand All @@ -166,7 +158,7 @@ export const idlFactory = ({ IDL }) => {
get_page_views_analytics_top_10: IDL.Func([GetAnalytics], [AnalyticsTop10PageViews], ['query']),
get_track_events: IDL.Func(
[GetAnalytics],
[IDL.Vec(IDL.Tuple(AnalyticKey, StoredTrackEvent))],
[IDL.Vec(IDL.Tuple(AnalyticKey, TrackEvent))],
['query']
),
get_track_events_analytics: IDL.Func([GetAnalytics], [AnalyticsTrackEvents], ['query']),
Expand Down
9 changes: 2 additions & 7 deletions src/orbiter/orbiter.did
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,6 @@ type SetTrackEvent = record {
satellite_id : principal;
user_agent : opt text;
};
type StoredPageView = variant { Unbounded : PageView; Bounded : PageView };
type StoredTrackEvent = variant {
Unbounded : TrackEvent;
Bounded : TrackEvent;
};
type TrackEvent = record {
updated_at : nat64;
session_id : text;
Expand All @@ -116,7 +111,7 @@ service : () -> {
del_satellite_config : (principal, DelSatelliteConfig) -> ();
deposit_cycles : (DepositCyclesArgs) -> ();
get_page_views : (GetAnalytics) -> (
vec record { AnalyticKey; StoredPageView },
vec record { AnalyticKey; PageView },
) query;
get_page_views_analytics_clients : (GetAnalytics) -> (
AnalyticsClientsPageViews,
Expand All @@ -128,7 +123,7 @@ service : () -> {
AnalyticsTop10PageViews,
) query;
get_track_events : (GetAnalytics) -> (
vec record { AnalyticKey; StoredTrackEvent },
vec record { AnalyticKey; TrackEvent },
) query;
get_track_events_analytics : (GetAnalytics) -> (AnalyticsTrackEvents) query;
list_controllers : () -> (vec record { principal; Controller }) query;
Expand Down
29 changes: 10 additions & 19 deletions src/orbiter/src/analytics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use crate::types::interface::{
AnalyticsBrowsersPageViews, AnalyticsClientsPageViews, AnalyticsDevicesPageViews,
AnalyticsMetricsPageViews, AnalyticsTop10PageViews, AnalyticsTrackEvents,
};
use crate::types::memory::{StoredPageView, StoredTrackEvent};
use crate::types::state::{AnalyticKey, PageView, TrackEvent};
use junobuild_shared::day::calendar_date;
use junobuild_shared::types::utils::CalendarDate;
Expand Down Expand Up @@ -38,7 +37,7 @@ struct BrowsersRegex {
}

pub fn analytics_page_views_metrics(
page_views: &Vec<(AnalyticKey, StoredPageView)>,
page_views: &Vec<(AnalyticKey, PageView)>,
) -> AnalyticsMetricsPageViews {
let mut daily_total_page_views: HashMap<CalendarDate, u32> = HashMap::new();
let mut unique_sessions = HashSet::new();
Expand All @@ -50,13 +49,11 @@ pub fn analytics_page_views_metrics(
collected_at,
key: _,
},
page_view,
PageView {
session_id, href, ..
},
) in page_views
{
let PageView {
session_id, href, ..
} = page_view.inner();

analytics_metrics(
collected_at,
session_id,
Expand Down Expand Up @@ -98,14 +95,12 @@ pub fn analytics_page_views_metrics(
}

pub fn analytics_page_views_top_10(
page_views: &Vec<(AnalyticKey, StoredPageView)>,
page_views: &Vec<(AnalyticKey, PageView)>,
) -> AnalyticsTop10PageViews {
let mut referrers: HashMap<String, u32> = HashMap::new();
let mut pages: HashMap<String, u32> = HashMap::new();

for (_, page_view) in page_views {
let PageView { referrer, href, .. } = page_view.inner();

for (_, PageView { referrer, href, .. }) in page_views {
analytics_referrers(referrer, &mut referrers);
analytics_pages(href, &mut pages);
}
Expand All @@ -123,7 +118,7 @@ pub fn analytics_page_views_top_10(
}

pub fn analytics_page_views_clients(
page_views: &Vec<(AnalyticKey, StoredPageView)>,
page_views: &Vec<(AnalyticKey, PageView)>,
) -> AnalyticsClientsPageViews {
let mut total_devices = Devices {
mobile: 0,
Expand Down Expand Up @@ -152,9 +147,7 @@ pub fn analytics_page_views_clients(
safari: Regex::new(r"(?i)safari").unwrap(),
};

for (_, page_view) in page_views {
let PageView { user_agent, .. } = page_view.inner();

for (_, PageView { user_agent, .. }) in page_views {
analytics_devices(user_agent, &devices_regex, &mut total_devices);
analytics_browsers(user_agent, &browsers_regex, &mut total_browsers);
}
Expand Down Expand Up @@ -211,13 +204,11 @@ pub fn analytics_page_views_clients(
}

pub fn analytics_track_events(
track_events: &Vec<(AnalyticKey, StoredTrackEvent)>,
track_events: &Vec<(AnalyticKey, TrackEvent)>,
) -> AnalyticsTrackEvents {
let mut total_track_events: HashMap<String, u32> = HashMap::new();

for (_, track_event) in track_events {
let TrackEvent { name, .. } = track_event.inner();

for (_, TrackEvent { name, .. }) in track_events {
let count = total_track_events.entry(name.clone()).or_insert(0);
*count += 1;
}
Expand Down
4 changes: 2 additions & 2 deletions src/orbiter/src/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ impl Storable for StoredPageView {
}

impl StoredPageView {
pub fn inner(&self) -> &PageView {
pub fn inner(self) -> PageView {
match self {
StoredPageView::Unbounded(page_view) | StoredPageView::Bounded(page_view) => page_view,
}
Expand Down Expand Up @@ -76,7 +76,7 @@ impl Storable for StoredTrackEvent {
}

impl StoredTrackEvent {
pub fn inner(&self) -> &TrackEvent {
pub fn inner(self) -> TrackEvent {
match self {
StoredTrackEvent::Unbounded(track_event) | StoredTrackEvent::Bounded(track_event) => {
track_event
Expand Down
6 changes: 3 additions & 3 deletions src/orbiter/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ use crate::types::interface::{
AnalyticsTrackEvents, DelSatelliteConfig, GetAnalytics, SetPageView, SetSatelliteConfig,
SetTrackEvent,
};
use crate::types::memory::{Memory, StoredPageView, StoredTrackEvent};
use crate::types::memory::Memory;
use crate::types::state::{AnalyticKey, HeapState, PageView, SatelliteConfigs, State, TrackEvent};
use ciborium::{from_reader, into_writer};
use ic_cdk::api::call::arg_data;
Expand Down Expand Up @@ -154,7 +154,7 @@ fn set_page_views(
}

#[query(guard = "caller_is_controller")]
fn get_page_views(filter: GetAnalytics) -> Vec<(AnalyticKey, StoredPageView)> {
fn get_page_views(filter: GetAnalytics) -> Vec<(AnalyticKey, PageView)> {
get_page_views_store(&filter)
}

Expand Down Expand Up @@ -213,7 +213,7 @@ fn set_track_events(
}

#[query(guard = "caller_is_controller")]
fn get_track_events(filter: GetAnalytics) -> Vec<(AnalyticKey, StoredTrackEvent)> {
fn get_track_events(filter: GetAnalytics) -> Vec<(AnalyticKey, TrackEvent)> {
get_track_events_store(&filter)
}

Expand Down
42 changes: 28 additions & 14 deletions src/orbiter/src/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,10 @@ fn insert_track_event_impl(
match current_track_event.clone() {
None => (),
Some(current_track_event) => {
match assert_timestamp(track_event.updated_at, current_track_event.inner().updated_at) {
match assert_timestamp(
track_event.updated_at,
current_track_event.inner().updated_at,
) {
Ok(_) => (),
Err(e) => {
return Err(e);
Expand All @@ -132,15 +135,21 @@ fn insert_track_event_impl(
match current_track_event.clone() {
None => (),
Some(current_track_event) => {
assert_session_id(&track_event.session_id, &current_track_event.inner().session_id)?;
assert_session_id(
&track_event.session_id,
&current_track_event.inner().session_id,
)?;
}
}

// Validate satellite id
match current_track_event.clone() {
None => (),
Some(current_track_event) => {
assert_satellite_id(track_event.satellite_id, current_track_event.inner().satellite_id)?;
assert_satellite_id(
track_event.satellite_id,
current_track_event.inner().satellite_id,
)?;
}
}

Expand Down Expand Up @@ -186,16 +195,17 @@ fn insert_track_event_impl(
Ok(new_track_event.clone())
}

pub fn get_page_views(filter: &GetAnalytics) -> Vec<(AnalyticKey, StoredPageView)> {
pub fn get_page_views(filter: &GetAnalytics) -> Vec<(AnalyticKey, PageView)> {
STATE.with(|state| get_page_views_impl(filter, &state.borrow_mut().stable))
}

fn get_page_views_impl(
filter: &GetAnalytics,
state: &StableState,
) -> Vec<(AnalyticKey, StoredPageView)> {
fn get_page_views_impl(filter: &GetAnalytics, state: &StableState) -> Vec<(AnalyticKey, PageView)> {
match filter.satellite_id {
None => state.page_views.range(filter_analytics(filter)).collect(),
None => state
.page_views
.range(filter_analytics(filter))
.map(|(key, page_view)| (key, page_view.inner()))
.collect(),
Some(satellite_id) => {
let satellites_keys: Vec<(AnalyticSatelliteKey, AnalyticKey)> = state
.satellites_page_views
Expand All @@ -205,23 +215,27 @@ fn get_page_views_impl(
.iter()
.filter_map(|(_, key)| {
let page_view = state.page_views.get(key);
page_view.map(|page_view| (key.clone(), page_view))
page_view.map(|page_view| (key.clone(), page_view.inner()))
})
.collect()
}
}
}

pub fn get_track_events(filter: &GetAnalytics) -> Vec<(AnalyticKey, StoredTrackEvent)> {
pub fn get_track_events(filter: &GetAnalytics) -> Vec<(AnalyticKey, TrackEvent)> {
STATE.with(|state| get_track_events_impl(filter, &state.borrow_mut().stable))
}

fn get_track_events_impl(
filter: &GetAnalytics,
state: &StableState,
) -> Vec<(AnalyticKey, StoredTrackEvent)> {
) -> Vec<(AnalyticKey, TrackEvent)> {
match filter.satellite_id {
None => state.track_events.range(filter_analytics(filter)).collect(),
None => state
.track_events
.range(filter_analytics(filter))
.map(|(key, track_event)| (key.clone(), track_event.inner()))
.collect(),
Some(satellite_id) => {
let satellites_keys: Vec<(AnalyticSatelliteKey, AnalyticKey)> = state
.satellites_track_events
Expand All @@ -231,7 +245,7 @@ fn get_track_events_impl(
.iter()
.filter_map(|(_, key)| {
let track_event = state.track_events.get(key);
track_event.map(|track_event| (key.clone(), track_event))
track_event.map(|track_event| (key.clone(), track_event.inner()))
})
.collect()
}
Expand Down
Loading