Add daily sessions pending view and accompanying snapshot table (#3217)
* feat: add a new daily billing view * update views and table based on early feedback * address review comments * update CTE to be an accurate result of what we expect * remove 'with time zone' from daily range * remove timezone * Update internal/db/schema/migrations/oss/postgres/70/01_hcp_billing_daily.up.sql Co-authored-by: Michael Gaffney <mgaffney@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Timothy Messier <tim.messier@gmail.com> * go mod updates * fix tests --------- Co-authored-by: Michael Gaffney <mgaffney@users.noreply.github.com> Co-authored-by: Timothy Messier <tim.messier@gmail.com>
This commit is contained in:
4 files changed
+237
No files matched your search
@@ -0,0 +1,64 @@
|
||||
-- Copyright (c) HashiCorp, Inc.
|
||||
-- SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
begin;
|
||||
create table sessions_pending_daily_snapshot (
|
||||
snapshot_date date primary key,
|
||||
sessions_pending_count bigint not null
|
||||
);
|
||||
|
||||
create view hcp_billing_daily_sessions_yesterday as
|
||||
with
|
||||
daily_counts (day, sessions_pending_count) as (
|
||||
select date_trunc('day', session_pending_time), count(*)
|
||||
from wh_session_accumulating_fact
|
||||
where session_pending_time >= date_trunc('day', timestamp 'yesterday')
|
||||
and session_pending_time < date_trunc('day', timestamp 'today')
|
||||
group by date_trunc('day', session_pending_time)
|
||||
),
|
||||
daily_range (day) as (
|
||||
select date_trunc('day', timestamp 'yesterday')
|
||||
),
|
||||
final (day, sessions_pending_count) as (
|
||||
select daily_range.day, coalesce(daily_counts.sessions_pending_count, 0)
|
||||
from daily_range
|
||||
left join daily_counts on daily_range.day = daily_counts.day
|
||||
)
|
||||
select day, sessions_pending_count
|
||||
from final
|
||||
order by day desc;
|
||||
comment on view hcp_billing_daily_sessions_yesterday is
|
||||
'hcp_billing_daily_sessions_yesterday is a view that contains '
|
||||
'the sum of pending sessions '
|
||||
'from the beginning of the previous day '
|
||||
'until the start of the current day (exclusive).';
|
||||
|
||||
create view hcp_billing_daily_sessions_all as
|
||||
with
|
||||
daily_counts (day, sessions_pending_count) as (
|
||||
select date_trunc('day', session_pending_time), count(*)
|
||||
from wh_session_accumulating_fact
|
||||
where session_pending_time < date_trunc('day', timestamp 'today')
|
||||
group by date_trunc('day', session_pending_time)
|
||||
),
|
||||
daily_range (day) as (
|
||||
select bucket
|
||||
from generate_series(
|
||||
date_trunc('day', (select min(session_pending_time) from wh_session_accumulating_fact)),
|
||||
timestamp 'yesterday',
|
||||
'1 day'::interval
|
||||
) as bucket
|
||||
),
|
||||
final (day, sessions_pending_count) as (
|
||||
select daily_range.day::timestamp,
|
||||
coalesce(daily_counts.sessions_pending_count, 0)
|
||||
from daily_range
|
||||
left join daily_counts on daily_range.day = daily_counts.day
|
||||
)
|
||||
select day, sessions_pending_count
|
||||
from final
|
||||
order by day desc;
|
||||
comment on view hcp_billing_daily_sessions_all is
|
||||
'hcp_billing_daily_sessions_all is a view that contains '
|
||||
'the sum of pending sessions for yesterday and all previous days.';
|
||||
commit;
|
||||
Reference in new issue
Block a user