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:
authored and GitHub committed 2023-05-24 15:52:34 -04:00
1 parent d5ad1f078a
commit ace2def49d
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;