From ef84ea1cb11c45ff8e9efcbe121678f8d8ec48b6 Mon Sep 17 00:00:00 2001 From: Jan Kvetina Date: Sat, 25 Dec 2021 23:08:42 +0100 Subject: [PATCH] Activity chart --- apex/f770/application/pages/page_00902.sql | 152 ++++++++++++++++++++- views/sessions_chart.sql | 56 ++++++++ 2 files changed, 203 insertions(+), 5 deletions(-) create mode 100644 views/sessions_chart.sql diff --git a/apex/f770/application/pages/page_00902.sql b/apex/f770/application/pages/page_00902.sql index 61a729c..45aecff 100644 --- a/apex/f770/application/pages/page_00902.sql +++ b/apex/f770/application/pages/page_00902.sql @@ -21,8 +21,8 @@ wwv_flow_api.create_page( ,p_group_id=>wwv_flow_api.id(9240371448352386) ,p_page_template_options=>'#DEFAULT#' ,p_required_role=>wwv_flow_api.id(9823062898204869) -,p_last_updated_by=>'DEV_ID' -,p_last_upd_yyyymmddhh24miss=>'20211225134116' +,p_last_updated_by=>'DEV' +,p_last_upd_yyyymmddhh24miss=>'20211225183552' ); wwv_flow_api.create_page_plug( p_id=>wwv_flow_api.id(9264033779429041) @@ -473,9 +473,6 @@ wwv_flow_api.create_ig_report_column( ,p_is_visible=>true ,p_is_frozen=>false ,p_width=>177.297 -,p_sort_order=>1 -,p_sort_direction=>'DESC' -,p_sort_nulls=>'FIRST' ); wwv_flow_api.create_ig_report_column( p_id=>wwv_flow_api.id(10276123871192635) @@ -485,6 +482,9 @@ wwv_flow_api.create_ig_report_column( ,p_is_visible=>true ,p_is_frozen=>false ,p_width=>181.828 +,p_sort_order=>1 +,p_sort_direction=>'DESC' +,p_sort_nulls=>'FIRST' ); wwv_flow_api.create_ig_report_column( p_id=>wwv_flow_api.id(10277027584192637) @@ -517,6 +517,148 @@ wwv_flow_api.create_page_plug( ,p_attribute_01=>'N' ,p_attribute_02=>'HTML' ); +wwv_flow_api.create_page_plug( + p_id=>wwv_flow_api.id(10746895084850208) +,p_plug_name=>'Activity' +,p_region_template_options=>'#DEFAULT#:t-Region--scrollBody' +,p_escape_on_http_output=>'Y' +,p_plug_template=>wwv_flow_api.id(9080157814569926) +,p_plug_display_sequence=>40 +,p_include_in_reg_disp_sel_yn=>'Y' +,p_plug_display_point=>'BODY' +,p_query_type=>'TABLE' +,p_query_table=>'SESSIONS_CHART' +,p_query_order_by=>'CHART_LABEL' +,p_include_rowid_column=>false +,p_plug_source_type=>'NATIVE_JET_CHART' +,p_plug_query_num_rows=>15 +,p_plug_query_options=>'DERIVED_REPORT_COLUMNS' +); +wwv_flow_api.create_jet_chart( + p_id=>wwv_flow_api.id(10746970438850209) +,p_region_id=>wwv_flow_api.id(10746895084850208) +,p_chart_type=>'line' +,p_height=>'400' +,p_animation_on_display=>'none' +,p_animation_on_data_change=>'none' +,p_orientation=>'vertical' +,p_data_cursor=>'auto' +,p_data_cursor_behavior=>'auto' +,p_hover_behavior=>'dim' +,p_stack=>'on' +,p_fill_multi_series_gaps=>false +,p_zoom_and_scroll=>'off' +,p_tooltip_rendered=>'Y' +,p_show_series_name=>true +,p_show_group_name=>true +,p_show_value=>true +,p_legend_rendered=>'off' +); +wwv_flow_api.create_jet_chart_series( + p_id=>wwv_flow_api.id(10747066785850210) +,p_chart_id=>wwv_flow_api.id(10746970438850209) +,p_seq=>10 +,p_name=>'Users' +,p_location=>'REGION_SOURCE' +,p_items_value_column_name=>'COUNT_USERS' +,p_items_label_column_name=>'CHART_LABEL' +,p_line_style=>'solid' +,p_line_type=>'auto' +,p_marker_rendered=>'auto' +,p_marker_shape=>'circle' +,p_assigned_to_y2=>'on' +,p_items_label_rendered=>false +); +wwv_flow_api.create_jet_chart_series( + p_id=>wwv_flow_api.id(10747386473850213) +,p_chart_id=>wwv_flow_api.id(10746970438850209) +,p_seq=>20 +,p_name=>'Pages' +,p_location=>'REGION_SOURCE' +,p_items_value_column_name=>'COUNT_PAGES' +,p_items_label_column_name=>'CHART_LABEL' +,p_line_style=>'solid' +,p_line_type=>'auto' +,p_marker_rendered=>'auto' +,p_marker_shape=>'circle' +,p_assigned_to_y2=>'on' +,p_items_label_rendered=>false +); +wwv_flow_api.create_jet_chart_series( + p_id=>wwv_flow_api.id(10747459332850214) +,p_chart_id=>wwv_flow_api.id(10746970438850209) +,p_seq=>30 +,p_name=>'Requests' +,p_location=>'REGION_SOURCE' +,p_items_value_column_name=>'COUNT_REQUESTS' +,p_items_label_column_name=>'CHART_LABEL' +,p_line_style=>'solid' +,p_line_type=>'auto' +,p_marker_rendered=>'auto' +,p_marker_shape=>'circle' +,p_assigned_to_y2=>'off' +,p_items_label_rendered=>false +); +wwv_flow_api.create_jet_chart_series( + p_id=>wwv_flow_api.id(10747598070850215) +,p_chart_id=>wwv_flow_api.id(10746970438850209) +,p_seq=>40 +,p_name=>'Others' +,p_location=>'REGION_SOURCE' +,p_items_value_column_name=>'COUNT_OTHERS' +,p_items_label_column_name=>'CHART_LABEL' +,p_line_style=>'solid' +,p_line_type=>'auto' +,p_marker_rendered=>'auto' +,p_marker_shape=>'circle' +,p_assigned_to_y2=>'off' +,p_items_label_rendered=>false +); +wwv_flow_api.create_jet_chart_axis( + p_id=>wwv_flow_api.id(10747601184850216) +,p_chart_id=>wwv_flow_api.id(10746970438850209) +,p_axis=>'y2' +,p_is_rendered=>'on' +,p_min=>0 +,p_format_scaling=>'none' +,p_scaling=>'linear' +,p_baseline_scaling=>'zero' +,p_step=>1 +,p_position=>'auto' +,p_major_tick_rendered=>'on' +,p_minor_tick_rendered=>'off' +,p_tick_label_rendered=>'on' +,p_split_dual_y=>'auto' +); +wwv_flow_api.create_jet_chart_axis( + p_id=>wwv_flow_api.id(10747251299850212) +,p_chart_id=>wwv_flow_api.id(10746970438850209) +,p_axis=>'y' +,p_is_rendered=>'on' +,p_format_type=>'decimal' +,p_decimal_places=>0 +,p_format_scaling=>'none' +,p_scaling=>'linear' +,p_baseline_scaling=>'zero' +,p_position=>'auto' +,p_major_tick_rendered=>'on' +,p_minor_tick_rendered=>'off' +,p_tick_label_rendered=>'on' +); +wwv_flow_api.create_jet_chart_axis( + p_id=>wwv_flow_api.id(10747187438850211) +,p_chart_id=>wwv_flow_api.id(10746970438850209) +,p_axis=>'x' +,p_is_rendered=>'on' +,p_format_scaling=>'auto' +,p_scaling=>'linear' +,p_baseline_scaling=>'zero' +,p_major_tick_rendered=>'on' +,p_minor_tick_rendered=>'off' +,p_tick_label_rendered=>'on' +,p_tick_label_rotation=>'auto' +,p_tick_label_position=>'outside' +); wwv_flow_api.create_page_button( p_id=>wwv_flow_api.id(10577836810928805) ,p_button_sequence=>40 diff --git a/views/sessions_chart.sql b/views/sessions_chart.sql new file mode 100644 index 0000000..c254ea1 --- /dev/null +++ b/views/sessions_chart.sql @@ -0,0 +1,56 @@ +CREATE OR REPLACE VIEW sessions_chart AS +WITH t AS ( + SELECT + NVL(d.user_id, LOWER(l.apex_user)) AS user_id, + l.application_id AS app_id, + l.application_name AS app_name, -- NULL for APEX Builder + l.page_id, + l.page_name, + SUBSTR(l.page_view_type, 1, 1) AS request_type, + l.page_view_type, + l.request_value, + l.view_timestamp AS requested_at + FROM apex_workspace_activity_log l + JOIN apex_workspaces w + ON w.workspace_id = l.workspace_id + JOIN apex_applications a + ON a.workspace = w.workspace + AND a.application_id = l.application_id + LEFT JOIN ( + SELECT + UPPER(d.user_name) AS user_name, + LOWER(d.email) AS user_id + FROM apex_workspace_developers d + WHERE d.is_application_developer = 'Yes' + AND d.account_locked = 'No' + ) d + ON d.user_name = l.apex_user + WHERE a.application_id = NVL(app.get_app_id(), a.application_id) + AND l.page_view_type IN ('Rendering', 'Processing', 'Ajax') + AND l.apex_user NOT IN ('nobody') + AND l.view_timestamp >= TRUNC(SYSDATE) - 1 -- G_TODAY +), +z AS ( + SELECT + LEVEL AS bucket_id, + TRUNC(SYSDATE) + NUMTODSINTERVAL((LEVEL - 1) * 10, 'MINUTE') AS start_at, + TRUNC(SYSDATE) + NUMTODSINTERVAL( LEVEL * 10, 'MINUTE') AS end_at + FROM DUAL + CONNECT BY LEVEL <= (1440 / 10) +) +SELECT + z.bucket_id, + TO_CHAR(z.start_at, 'HH24:MI') AS chart_label, + -- + NULLIF(COUNT(DISTINCT t.user_id), 0) AS count_users, + NULLIF(COUNT(DISTINCT t.page_id), 0) AS count_pages, + -- + NULLIF(SUM(CASE WHEN t.app_id = app.get_app_id() THEN 1 ELSE 0 END), 0) AS count_requests, + NULLIF(SUM(CASE WHEN t.app_id IS NOT NULL AND t.app_name IS NULL THEN 1 ELSE 0 END), 0) AS count_others, + -- + NULL AS count_events +FROM z +LEFT JOIN t + ON app.get_time_bucket(t.requested_at, 10) = z.bucket_id +GROUP BY z.bucket_id, TO_CHAR(z.start_at, 'HH24:MI'); +