diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 206a7734c8..a3cdb5cde6 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -3,6 +3,15 @@ Change Log
All notable changes to this project will be documented in this file.
The format is based on `Keep a Changelog `_.
+====================
+2.14.3 - 2020-05-19
+====================
+
+Added
+-----
+* Support for returning the private IP of a private endpoint database in the Database service
+* Support for native JWT validation in the API Gateway service
+
====================
2.14.2 - 2020-05-12
====================
diff --git a/docs/api/apigateway.rst b/docs/api/apigateway.rst
index 070c40b535..e697400c14 100644
--- a/docs/api/apigateway.rst
+++ b/docs/api/apigateway.rst
@@ -48,9 +48,17 @@ Apigateway
oci.apigateway.models.GatewaySummary
oci.apigateway.models.HTTPBackend
oci.apigateway.models.HeaderFieldSpecification
+ oci.apigateway.models.JsonWebKey
+ oci.apigateway.models.JsonWebTokenClaim
+ oci.apigateway.models.JwtAuthenticationPolicy
oci.apigateway.models.OracleFunctionBackend
+ oci.apigateway.models.PemEncodedPublicKey
+ oci.apigateway.models.PublicKeySet
oci.apigateway.models.RateLimitingPolicy
+ oci.apigateway.models.RemoteJsonWebKeySet
oci.apigateway.models.RouteAuthorizationPolicy
+ oci.apigateway.models.StaticPublicKey
+ oci.apigateway.models.StaticPublicKeySet
oci.apigateway.models.StockResponseBackend
oci.apigateway.models.UpdateDeploymentDetails
oci.apigateway.models.UpdateGatewayDetails
diff --git a/docs/api/apigateway/models/oci.apigateway.models.JsonWebKey.rst b/docs/api/apigateway/models/oci.apigateway.models.JsonWebKey.rst
new file mode 100644
index 0000000000..861dcadb5f
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.JsonWebKey.rst
@@ -0,0 +1,11 @@
+JsonWebKey
+==========
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: JsonWebKey
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/docs/api/apigateway/models/oci.apigateway.models.JsonWebTokenClaim.rst b/docs/api/apigateway/models/oci.apigateway.models.JsonWebTokenClaim.rst
new file mode 100644
index 0000000000..f8b955f54d
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.JsonWebTokenClaim.rst
@@ -0,0 +1,11 @@
+JsonWebTokenClaim
+=================
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: JsonWebTokenClaim
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/docs/api/apigateway/models/oci.apigateway.models.JwtAuthenticationPolicy.rst b/docs/api/apigateway/models/oci.apigateway.models.JwtAuthenticationPolicy.rst
new file mode 100644
index 0000000000..0e0dc9d40d
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.JwtAuthenticationPolicy.rst
@@ -0,0 +1,11 @@
+JwtAuthenticationPolicy
+=======================
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: JwtAuthenticationPolicy
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/docs/api/apigateway/models/oci.apigateway.models.PemEncodedPublicKey.rst b/docs/api/apigateway/models/oci.apigateway.models.PemEncodedPublicKey.rst
new file mode 100644
index 0000000000..b955d6a301
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.PemEncodedPublicKey.rst
@@ -0,0 +1,11 @@
+PemEncodedPublicKey
+===================
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: PemEncodedPublicKey
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/docs/api/apigateway/models/oci.apigateway.models.PublicKeySet.rst b/docs/api/apigateway/models/oci.apigateway.models.PublicKeySet.rst
new file mode 100644
index 0000000000..184f2a7cdf
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.PublicKeySet.rst
@@ -0,0 +1,11 @@
+PublicKeySet
+============
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: PublicKeySet
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/docs/api/apigateway/models/oci.apigateway.models.RemoteJsonWebKeySet.rst b/docs/api/apigateway/models/oci.apigateway.models.RemoteJsonWebKeySet.rst
new file mode 100644
index 0000000000..5b8b609170
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.RemoteJsonWebKeySet.rst
@@ -0,0 +1,11 @@
+RemoteJsonWebKeySet
+===================
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: RemoteJsonWebKeySet
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/docs/api/apigateway/models/oci.apigateway.models.StaticPublicKey.rst b/docs/api/apigateway/models/oci.apigateway.models.StaticPublicKey.rst
new file mode 100644
index 0000000000..2febb41d26
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.StaticPublicKey.rst
@@ -0,0 +1,11 @@
+StaticPublicKey
+===============
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: StaticPublicKey
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/docs/api/apigateway/models/oci.apigateway.models.StaticPublicKeySet.rst b/docs/api/apigateway/models/oci.apigateway.models.StaticPublicKeySet.rst
new file mode 100644
index 0000000000..33d0d46441
--- /dev/null
+++ b/docs/api/apigateway/models/oci.apigateway.models.StaticPublicKeySet.rst
@@ -0,0 +1,11 @@
+StaticPublicKeySet
+==================
+
+.. currentmodule:: oci.apigateway.models
+
+.. autoclass:: StaticPublicKeySet
+ :show-inheritance:
+ :special-members: __init__
+ :members:
+ :undoc-members:
+ :inherited-members:
\ No newline at end of file
diff --git a/examples/showoci/CHANGELOG.rst b/examples/showoci/CHANGELOG.rst
index 6509b966c5..9459f9c004 100755
--- a/examples/showoci/CHANGELOG.rst
+++ b/examples/showoci/CHANGELOG.rst
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
The format is based on `Keep a Changelog `_.
+=====================
+20.05.18 - 2020-05-18
+=====================
+* Bug Fixed
+
=====================
20.05.04 - 2020-05-04
=====================
diff --git a/examples/showoci/showoci.py b/examples/showoci/showoci.py
index 8c1957d856..c10457073b 100755
--- a/examples/showoci/showoci.py
+++ b/examples/showoci/showoci.py
@@ -80,7 +80,7 @@
import argparse
import datetime
-version = "20.05.04"
+version = "20.05.18"
##########################################################################
# check OCI version
diff --git a/examples/showoci/showoci_output.py b/examples/showoci/showoci_output.py
index c66b4a635b..7261591c7e 100755
--- a/examples/showoci/showoci_output.py
+++ b/examples/showoci/showoci_output.py
@@ -2444,16 +2444,13 @@ def __csv_identity_users(self, users):
# Check if credential exist
if 'api_keys' in user:
- data['api_keys'] = str(', '.join(x['id'] + " - " + x['lifecycle_state'] for x in user['api_keys']))
-
+ data['api_keys'] = str(', '.join(x['id'] + " - " + x['lifecycle_state'] + " - " + x['time_created'] for x in user['api_keys']))
if 'auth_token' in user:
- data['auth_token'] = str(', '.join(x['id'] + " - " + x['description'] for x in user['auth_token']))
-
+ data['auth_token'] = str(', '.join(x['id'] + " - " + x['description'] + " - " + x['time_created'] for x in user['auth_token']))
if 'secret_key' in user:
- data['secret_key'] = str(', '.join(x['id'] + " - " + x['display_name'] for x in user['secret_key']))
-
+ data['secret_key'] = str(', '.join(x['id'] + " - " + x['display_name'] + " - " + x['time_created'] for x in user['secret_key']))
if 'smtp_cred' in user:
- data['smtp_cred'] = str(', '.join(x['id'] + " - " + x['description'] for x in user['smtp_cred']))
+ data['smtp_cred'] = str(', '.join(x['id'] + " - " + x['description'] + " - " + x['time_created'] for x in user['smtp_cred']))
self.csv_identity_users.append(data)
diff --git a/examples/showoci/showoci_service.py b/examples/showoci/showoci_service.py
index 6d2b80d728..ffc44fe6a7 100755
--- a/examples/showoci/showoci_service.py
+++ b/examples/showoci/showoci_service.py
@@ -4963,9 +4963,9 @@ def __load_object_storage_buckets(self, object_storage, compartments):
raise
if lp:
- for l in lp.items:
- val['object_lifecycle'] += " , LifeCycle: " + str(l.name) + ", " + str(
- l.action) + ", " + str(l.time_amount) + " " + str(l.time_unit)
+ for lc in lp.items:
+ val['object_lifecycle'] += " , LifeCycle: " + str(lc.name) + ", " + str(
+ lc.action) + ", " + str(lc.time_amount) + " " + str(lc.time_unit)
data.append(val)
cnt += 1
@@ -5885,7 +5885,10 @@ def __load_database_dbsystems_home_patches(self, database_client, dbhome_id):
data = []
try:
- dbps = oci.pagination.list_call_get_all_results(database_client.list_db_home_patches, dbhome_id).data
+ dbps = oci.pagination.list_call_get_all_results(
+ database_client.list_db_home_patches,
+ dbhome_id
+ ).data
for dbp in dbps:
data.append({'id': dbp.id, 'description': str(dbp.description), 'version': str(dbp.version), 'time_released': str(dbp.time_released),
@@ -5896,6 +5899,10 @@ def __load_database_dbsystems_home_patches(self, database_client, dbhome_id):
if self.__check_service_error(e.code):
return data
else:
+ # Added in order to avoid internal error which happen often here
+ if 'InternalError' in str(e.code):
+ print('p', end="")
+ return data
raise
except oci.exceptions.RequestException as e:
if self.__check_request_error(e):
diff --git a/examples/stop_untagged_instances.py b/examples/stop_untagged_instances.py
index 52fd21048d..810cdd2dbc 100644
--- a/examples/stop_untagged_instances.py
+++ b/examples/stop_untagged_instances.py
@@ -45,12 +45,12 @@ def stop_resource(instance_id, region):
try:
if base_compute.get_instance(instance_id).data.lifecycle_state in 'RUNNING':
try:
- print('\t\tStopping instance. Stop response code: {1}'
+ print('\t\tStopping instance {0}. Stop response code: {1}'
.format(instance_id, str(base_compute.instance_action(instance_id, 'STOP').status)))
except oci.exceptions.ServiceError as e:
print('\t\tStopping instance failed. {0}' .format(e))
else:
- print('\t\tThe instance was in the incorrect state to stop' .format(instance_id))
+ print('\t\tThe instance {} was in the incorrect state to stop' .format(instance_id))
except oci.exceptions.ServiceError as e:
print('\t\tStopping instance failed. {0}'.format(e))
@@ -158,7 +158,7 @@ def find_resources_wo_tags(instances_to_stop_list, search_string, tenancy_id):
stop_resource(result.identifier, region)
except oci.exceptions.ServiceError as e:
- print('\t\tThe instance ({0}) could not be retrieved. It may be a ghost Search entry.'
+ print('\t\tThe instance ({0}) could not be retrieved. It may be a ghost Search entry. {1}'
.format(result.display_name, e))
# Only find audit events for those compartments with a stopped instance
diff --git a/examples/usage_reports_to_adw/CHANGELOG.rst b/examples/usage_reports_to_adw/CHANGELOG.rst
index c923c4c4ab..bc1027a330 100644
--- a/examples/usage_reports_to_adw/CHANGELOG.rst
+++ b/examples/usage_reports_to_adw/CHANGELOG.rst
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on `Keep a Changelog `_.
+=====================
+20.05.18 - 2020-05-18
+=====================
+* Added Rate Card with OCI_PRICE_LIST and using API to obtain info, Thanks to Fabio for the Idea and the API
+* Added discount and public rate to the cost report
+
=====================
20.05.11 - 2020-05-11
=====================
diff --git a/examples/usage_reports_to_adw/apex_demo_app/usage.demo.apex.sql b/examples/usage_reports_to_adw/apex_demo_app/usage.demo.apex.sql
index b3e3a96b69..17939566a2 100644
--- a/examples/usage_reports_to_adw/apex_demo_app/usage.demo.apex.sql
+++ b/examples/usage_reports_to_adw/apex_demo_app/usage.demo.apex.sql
@@ -28,17 +28,17 @@ prompt APPLICATION 100 - OCI Usage and Cost Report
-- Application Export:
-- Application: 100
-- Name: OCI Usage and Cost Report
--- Date and Time: 14:56 Thursday May 7, 2020
+-- Date and Time: 15:06 Thursday May 14, 2020
-- Exported By: ADIZOHAR
-- Flashback: 0
-- Export Type: Application Export
--- Pages: 8
--- Items: 69
--- Computations: 13
+-- Pages: 9
+-- Items: 70
+-- Computations: 14
-- Processes: 4
--- Regions: 52
+-- Regions: 55
-- Buttons: 5
--- Dynamic Actions: 27
+-- Dynamic Actions: 28
-- Shared Components:
-- Logic:
-- App Settings: 1
@@ -105,7 +105,7 @@ wwv_flow_api.create_flow(
,p_public_user=>'APEX_PUBLIC_USER'
,p_proxy_server=>nvl(wwv_flow_application_install.get_proxy,'')
,p_no_proxy_domains=>nvl(wwv_flow_application_install.get_no_proxy_domains,'')
-,p_flow_version=>'Release 20.05.11'
+,p_flow_version=>'Release 20.05.18'
,p_flow_status=>'AVAILABLE_W_EDIT_LINK'
,p_flow_unavailable_text=>'This application is currently unavailable at this time.'
,p_exact_substitutions_only=>'Y'
@@ -119,7 +119,7 @@ wwv_flow_api.create_flow(
,p_substitution_string_01=>'APP_NAME'
,p_substitution_value_01=>'OCI Usage and Cost Report'
,p_last_updated_by=>'ADIZOHAR'
-,p_last_upd_yyyymmddhh24miss=>'20200507123855'
+,p_last_upd_yyyymmddhh24miss=>'20200514145916'
,p_file_prefix => nvl(wwv_flow_application_install.get_static_app_file_prefix,'')
,p_files_version=>3
,p_ui_type_name => null
@@ -173,11 +173,19 @@ wwv_flow_api.create_list_item(
,p_list_item_current_type=>'COLON_DELIMITED_PAGE_LIST'
,p_list_item_current_for_pages=>'5'
);
+wwv_flow_api.create_list_item(
+ p_id=>wwv_flow_api.id(16371791258522236)
+,p_list_item_display_sequence=>80
+,p_list_item_link_text=>'Rate Card'
+,p_list_item_link_target=>'f?p=&APP_ID.:7:&SESSION.::&DEBUG.'
+,p_list_item_current_type=>'COLON_DELIMITED_PAGE_LIST'
+,p_list_item_current_for_pages=>'7'
+);
wwv_flow_api.create_list_item(
p_id=>wwv_flow_api.id(12630315850041592)
-,p_list_item_display_sequence=>70
+,p_list_item_display_sequence=>90
,p_list_item_link_text=>'Data Statistics'
-,p_list_item_link_target=>'f?p=&APP_ID.:6:&SESSION.::&DEBUG.'
+,p_list_item_link_target=>'f?p=&APP_ID.:6:&SESSION.::&DEBUG.::::'
,p_list_item_current_type=>'COLON_DELIMITED_PAGE_LIST'
,p_list_item_current_for_pages=>'6'
);
@@ -318,6 +326,13 @@ wwv_flow_api.create_plugin_setting(
,p_plugin=>'NATIVE_COLOR_PICKER'
,p_attribute_01=>'modern'
);
+wwv_flow_api.create_plugin_setting(
+ p_id=>wwv_flow_api.id(16424473540395392)
+,p_plugin_type=>'ITEM TYPE'
+,p_plugin=>'NATIVE_STAR_RATING'
+,p_attribute_01=>'fa-star'
+,p_attribute_04=>'#VALUE#'
+);
end;
/
prompt --application/shared_components/security/authorizations/administration_rights
@@ -10290,6 +10305,7 @@ unistr(' ''
DISCLAIMER \2013 This is not an official Oracle applicatio
' );',
'',
'END;'))
+,p_attribute_04=>'N'
);
end;
/
@@ -10579,6 +10595,8 @@ wwv_flow_api.create_jet_chart(
,p_hover_behavior=>'none'
,p_stack=>'on'
,p_stack_label=>'on'
+,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'value-desc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -10586,8 +10604,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(9906502232740516)
@@ -10633,35 +10663,53 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'insideBarEdge'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_style=>'normal'
,p_items_label_font_size=>'8'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
- p_id=>wwv_flow_api.id(9906780581740518)
+ p_id=>wwv_flow_api.id(9906673387740517)
,p_chart_id=>wwv_flow_api.id(9906423826740515)
-,p_axis=>'y'
+,p_axis=>'x'
,p_is_rendered=>'on'
-,p_format_scaling=>'none'
+,p_format_scaling=>'auto'
,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'
+,p_tick_label_rotation=>'auto'
+,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
- p_id=>wwv_flow_api.id(9906673387740517)
+ p_id=>wwv_flow_api.id(9906780581740518)
,p_chart_id=>wwv_flow_api.id(9906423826740515)
-,p_axis=>'x'
+,p_axis=>'y'
,p_is_rendered=>'on'
-,p_format_scaling=>'auto'
+,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'
-,p_tick_label_rotation=>'auto'
-,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(9906821641740519)
@@ -10691,6 +10739,8 @@ wwv_flow_api.create_jet_chart(
,p_hover_behavior=>'none'
,p_stack=>'on'
,p_stack_label=>'on'
+,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'value-desc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -10698,8 +10748,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(9907045247740521)
@@ -10764,9 +10826,11 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'insideBarEdge'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_family=>'Arial'
,p_items_label_font_style=>'normal'
,p_items_label_font_size=>'8'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9907197005740522)
@@ -10781,6 +10845,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9907262849740523)
@@ -10794,6 +10866,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(9909405153740545)
@@ -10821,7 +10901,9 @@ wwv_flow_api.create_jet_chart(
,p_hide_and_show_behavior=>'none'
,p_hover_behavior=>'none'
,p_stack=>'off'
+,p_stack_label=>'off'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -10829,8 +10911,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(9909674684740547)
@@ -10875,7 +10969,9 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'auto'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9909783516740548)
@@ -10890,6 +10986,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9909811381740549)
@@ -10903,6 +11007,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(9923029639716102)
@@ -10929,6 +11041,9 @@ wwv_flow_api.create_jet_chart(
,p_hide_and_show_behavior=>'none'
,p_hover_behavior=>'none'
,p_stack=>'off'
+,p_stack_label=>'off'
+,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -10936,8 +11051,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(9923297286716104)
@@ -10982,6 +11109,8 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'auto'
+,p_items_label_display_as=>'PERCENT'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9923304855716105)
@@ -10996,6 +11125,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9923476916716106)
@@ -11009,6 +11146,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(9923541167716107)
@@ -11036,6 +11181,9 @@ wwv_flow_api.create_jet_chart(
,p_hide_and_show_behavior=>'none'
,p_hover_behavior=>'none'
,p_stack=>'off'
+,p_stack_label=>'off'
+,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -11043,8 +11191,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(9923743722716109)
@@ -11106,7 +11266,12 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'auto'
+,p_items_label_display_as=>'PERCENT'
+,p_threshold_display=>'onIndicator'
);
+end;
+/
+begin
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9923836203716110)
,p_chart_id=>wwv_flow_api.id(9923640328716108)
@@ -11120,6 +11285,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9923915405716111)
@@ -11133,6 +11306,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(10813323429165705)
@@ -11161,7 +11342,9 @@ wwv_flow_api.create_jet_chart(
,p_hide_and_show_behavior=>'none'
,p_hover_behavior=>'none'
,p_stack=>'off'
+,p_stack_label=>'off'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -11169,8 +11352,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(10813589982165707)
@@ -11232,11 +11427,10 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'auto'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
-end;
-/
-begin
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(10813694012165708)
,p_chart_id=>wwv_flow_api.id(10813427444165706)
@@ -11250,6 +11444,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(10813796398165709)
@@ -11263,6 +11465,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(9907890048740529)
@@ -11772,6 +11982,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'on'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -11779,8 +11990,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(9988037120919551)
@@ -11848,6 +12071,8 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'auto'
+,p_items_label_display_as=>'PERCENT'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9987437023919551)
@@ -11920,6 +12145,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'on'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -11927,8 +12153,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(9990659651919553)
@@ -12014,6 +12252,8 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'auto'
+,p_items_label_display_as=>'PERCENT'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(9989436754919552)
@@ -12124,7 +12364,7 @@ wwv_flow_api.create_page_item(
' (:P3_TIMEFRAME = 180 and mod(to_number(to_char(USAGE_INTERVAL_START,''DD'')),6) = 0) and USAGE_INTERVAL_START = trunc(USAGE_INTERVAL_START)',
' or',
' (:P3_TIMEFRAME >= 360 and mod(to_number(to_char(USAGE_INTERVAL_START,''DD'')),12) = 0) and USAGE_INTERVAL_START = trunc(USAGE_INTERVAL_START)',
-' ) '))
+' )'))
,p_source_type=>'QUERY'
,p_display_as=>'NATIVE_DISPLAY_ONLY'
,p_begin_on_new_line=>'N'
@@ -12499,6 +12739,9 @@ wwv_flow_api.create_page_computation(
,p_compute_when=>'P3_TENANT_NAME'
,p_compute_when_type=>'ITEM_IS_NULL'
);
+end;
+/
+begin
wwv_flow_api.create_page_computation(
p_id=>wwv_flow_api.id(13350423906239101)
,p_computation_sequence=>10
@@ -12531,9 +12774,6 @@ wwv_flow_api.create_page_da_action(
,p_affected_elements_type=>'REGION'
,p_affected_region_id=>wwv_flow_api.id(9908767434740538)
);
-end;
-/
-begin
wwv_flow_api.create_page_da_action(
p_id=>wwv_flow_api.id(9909224638740543)
,p_event_id=>wwv_flow_api.id(9908888877740539)
@@ -12581,6 +12821,11 @@ wwv_flow_api.create_page(
' background-color: #efffff;',
'}',
'',
+'.a-IRR-table tr td[headers*="rep_col_pink"]',
+'{',
+' background-color: #ffefff;',
+'}',
+'',
'#P4_COST_DISPLAY {',
' background-color: #F5FBB4; font-weight: bold; font-size: 14px;',
'}',
@@ -12593,7 +12838,7 @@ wwv_flow_api.create_page(
'#P4_REPORT_SELECTOR { background-color: #F5FBB4; font-weight: bold; font-size: 13px;}'))
,p_page_template_options=>'#DEFAULT#'
,p_last_updated_by=>'ADIZOHAR'
-,p_last_upd_yyyymmddhh24miss=>'20200507123102'
+,p_last_upd_yyyymmddhh24miss=>'20200514125539'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(10816553122165737)
@@ -12659,15 +12904,35 @@ wwv_flow_api.create_jet_chart(
,p_data_cursor=>'auto'
,p_data_cursor_behavior=>'auto'
,p_hover_behavior=>'none'
+,p_stack=>'off'
+,p_stack_label=>'off'
+,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_value_format_type=>'decimal'
,p_value_decimal_places=>1
,p_value_format_scaling=>'auto'
+,p_sorting=>'label-asc'
+,p_fill_multi_series_gaps=>true
,p_tooltip_rendered=>'Y'
,p_show_series_name=>true
+,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'off'
+,p_legend_position=>'auto'
+,p_overview_rendered=>'off'
,p_pie_other_threshold=>0
,p_pie_selection_effect=>'highlight'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(10815028626165722)
@@ -12707,6 +12972,7 @@ wwv_flow_api.create_jet_chart_series(
,p_items_label_position=>'insideBarEdge'
,p_items_label_display_as=>'ALL'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(10815862618165730)
@@ -12735,6 +13001,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'on'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'value-desc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -12742,7 +13009,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'off'
+,p_legend_position=>'auto'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(10816022718165732)
@@ -12787,8 +13067,10 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'insideBarEdge'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_style=>'normal'
,p_items_label_font_size=>'8'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(10816181831165733)
@@ -12803,6 +13085,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(10816213077165734)
@@ -12818,6 +13108,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(11931816111191611)
@@ -12843,7 +13141,9 @@ wwv_flow_api.create_jet_chart(
,p_data_cursor_behavior=>'auto'
,p_hover_behavior=>'none'
,p_stack=>'off'
+,p_stack_label=>'off'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -12851,7 +13151,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'off'
+,p_legend_position=>'auto'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(11932020693191613)
@@ -12903,7 +13216,9 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'auto'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(11932199654191614)
@@ -12921,6 +13236,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
,p_tick_label_font_size=>'10'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(11932208487191615)
@@ -12936,6 +13259,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(11932315365191616)
@@ -12960,15 +13291,35 @@ wwv_flow_api.create_jet_chart(
,p_data_cursor=>'auto'
,p_data_cursor_behavior=>'auto'
,p_hover_behavior=>'none'
+,p_stack=>'off'
+,p_stack_label=>'off'
+,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_value_format_type=>'decimal'
,p_value_decimal_places=>1
,p_value_format_scaling=>'auto'
+,p_sorting=>'label-asc'
+,p_fill_multi_series_gaps=>true
,p_tooltip_rendered=>'Y'
,p_show_series_name=>true
+,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'off'
+,p_legend_position=>'auto'
+,p_overview_rendered=>'off'
,p_pie_other_threshold=>0
,p_pie_selection_effect=>'highlight'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(11932548617191618)
@@ -13007,6 +13358,7 @@ wwv_flow_api.create_jet_chart_series(
,p_items_label_position=>'insideBarEdge'
,p_items_label_display_as=>'LBL_VAL'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(12317143055646735)
@@ -13374,7 +13726,9 @@ wwv_flow_api.create_jet_chart(
,p_data_cursor_behavior=>'snap'
,p_hover_behavior=>'none'
,p_stack=>'off'
+,p_stack_label=>'off'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -13382,8 +13736,24 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'off'
+,p_legend_position=>'auto'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
+end;
+/
+begin
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(13974239454041419)
,p_chart_id=>wwv_flow_api.id(13974102550041418)
@@ -13445,11 +13815,10 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'aboveMarker'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
-end;
-/
-begin
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(13974384360041420)
,p_chart_id=>wwv_flow_api.id(13974102550041418)
@@ -13466,6 +13835,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
,p_tick_label_font_size=>'10'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(13974468820041421)
@@ -13482,6 +13859,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'on'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(21606421457513668)
@@ -13493,44 +13878,72 @@ wwv_flow_api.create_page_plug(
,p_plug_display_point=>'BODY'
,p_query_type=>'SQL'
,p_plug_source=>wwv_flow_string.join(wwv_flow_t_varchar2(
+'with data as',
+'(',
+' select ',
+' a.tenant_name,',
+' a.COST_PRODUCT_SKU || '' '' || replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '','''') as PRODUCT,',
+' a.COST_PRODUCT_SKU,',
+' min(COST_BILLING_UNIT) COST_BILLING_UNIT,',
+' max(COST_UNIT_PRICE) RATE,',
+' min(COST_CURRENCY_CODE) CURRENCY,',
+' case when count(distinct USAGE_INTERVAL_START) > 0 then',
+' case ',
+' when min(COST_BILLING_UNIT) like ''%HOURS%'' or min(PRD_DESCRIPTION) like ''%Per Hour%'' then sum(USG_BILLED_QUANTITY)/count(distinct USAGE_INTERVAL_START)',
+' when min(COST_BILLING_UNIT) like ''%GiB%'' then sum(USG_BILLED_QUANTITY)/count(distinct USAGE_INTERVAL_START)*744',
+' when min(COST_BILLING_UNIT) like ''%TiB%'' then sum(USG_BILLED_QUANTITY)/count(distinct USAGE_INTERVAL_START)*744',
+' else null',
+' end',
+' end SINGLE_QUANTITY,',
+' count(distinct USAGE_INTERVAL_START) HOURS_QUANTITY,',
+' sum(USG_BILLED_QUANTITY) TOTAL_QUANTITY,',
+' sum(COST_MY_COST_OVERAGE) OVERAGE_COST,',
+' sum(COST_MY_COST) USAGE_COST,',
+' sum(COST_MY_COST)*(24 * 31 / count(distinct USAGE_INTERVAL_START)) ESTIMATE_MONTH_31,',
+' sum(COST_MY_COST)*(24 * 365 / count(distinct USAGE_INTERVAL_START)) ESTIMATE_YEAR',
+' from oci_cost a',
+' where ',
+' tenant_name=:P4_TENANT_NAME and',
+' (:P4_COMPARTMENT_NAME is null or prd_compartment_name = :P4_COMPARTMENT_NAME) and',
+' (:P4_PRODUCT_SERVICE is null or prd_service = :P4_PRODUCT_SERVICE) and',
+' (:P4_PRODUCT_REGION is null or prd_region = :P4_PRODUCT_REGION) and',
+' (:P4_COMPARTMENT_TOP is null or prd_compartment_path like :P4_COMPARTMENT_TOP ||''%'') and',
+' (:P4_TAG_KEY is null or tags_data like ''%#'' || :P4_TAG_KEY || ''=%'') and',
+' (:P4_TAG_DATA is null or tags_data like ''%#'' || nvl(:P4_TAG_KEY,''%'') || ''=%'' || :P4_TAG_DATA || ''#'') and',
+' (:P4_COST_PRODUCT_SKU is null or a.COST_PRODUCT_SKU = :P4_COST_PRODUCT_SKU) and',
+' USAGE_INTERVAL_START >= to_date(:P4_DATE_FROM,''DD-MON-YYYY HH24:MI'') and USAGE_INTERVAL_START < to_date(:P4_DATE_TO,''DD-MON-YYYY HH24:MI'')',
+' and COST_MY_COST<>0',
+' and :P4_REPORT_SELECTOR = ''Cost Report''',
+' group by ',
+' a.tenant_name,a.COST_PRODUCT_SKU , replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '','''')',
+')',
'select ',
-' COST_PRODUCT_SKU || '' '' || PRD_DESCRIPTION as PRODUCT,',
-' min(COST_BILLING_UNIT) COST_BILLING_UNIT,',
-' max(COST_UNIT_PRICE) RATE,',
-' min(COST_CURRENCY_CODE) CURRENCY,',
-' case when count(distinct USAGE_INTERVAL_START) > 0 then',
-' case ',
-' when min(COST_BILLING_UNIT) like ''%HOURS%'' or min(PRD_DESCRIPTION) like ''%Per Hour%'' then sum(USG_BILLED_QUANTITY)/count(distinct USAGE_INTERVAL_START)',
-' when min(COST_BILLING_UNIT) like ''%GiB%'' then sum(USG_BILLED_QUANTITY)/count(distinct USAGE_INTERVAL_START)*744',
-' when min(COST_BILLING_UNIT) like ''%TiB%'' then sum(USG_BILLED_QUANTITY)/count(distinct USAGE_INTERVAL_START)*744',
-' else null',
-' end',
-' end SINGLE_QUANTITY,',
-' count(distinct USAGE_INTERVAL_START) HOURS_QUANTITY,',
-' sum(USG_BILLED_QUANTITY) TOTAL_QUANTITY,',
-' sum(COST_MY_COST_OVERAGE) OVERAGE_COST,',
-' sum(COST_MY_COST) USAGE_COST,',
-' sum(COST_MY_COST)*(24 * 31 / count(distinct USAGE_INTERVAL_START)) ESTIMATE_MONTH_31,',
-' sum(COST_MY_COST)*(24 * 365 / count(distinct USAGE_INTERVAL_START)) ESTIMATE_YEAR',
-'from oci_cost',
-'where ',
-' tenant_name=:P4_TENANT_NAME and',
-' (:P4_COMPARTMENT_NAME is null or prd_compartment_name = :P4_COMPARTMENT_NAME) and',
-' (:P4_PRODUCT_SERVICE is null or prd_service = :P4_PRODUCT_SERVICE) and',
-' (:P4_PRODUCT_REGION is null or prd_region = :P4_PRODUCT_REGION) and',
-' (:P4_COMPARTMENT_TOP is null or prd_compartment_path like :P4_COMPARTMENT_TOP ||''%'') and',
-' (:P4_TAG_KEY is null or tags_data like ''%#'' || :P4_TAG_KEY || ''=%'') and',
-' (:P4_TAG_DATA is null or tags_data like ''%#'' || nvl(:P4_TAG_KEY,''%'') || ''=%'' || :P4_TAG_DATA || ''#'') and',
-' (:P4_COST_PRODUCT_SKU is null or COST_PRODUCT_SKU = :P4_COST_PRODUCT_SKU) and',
-' USAGE_INTERVAL_START >= to_date(:P4_DATE_FROM,''DD-MON-YYYY HH24:MI'') and USAGE_INTERVAL_START < to_date(:P4_DATE_TO,''DD-MON-YYYY HH24:MI'')',
-' and COST_MY_COST<>0',
-' and :P4_REPORT_SELECTOR = ''Cost Report''',
-'group by ',
-' COST_PRODUCT_SKU , PRD_DESCRIPTION',
-' order by USAGE_COST',
-'',
-'',
-'',
+' PRODUCT,',
+' COST_BILLING_UNIT,',
+' case when RATE_MONTHLY_FLEX_PRICE = 0 then null else RATE_MONTHLY_FLEX_PRICE end PUBLIC_RATE,',
+' CASE WHEN RATE_MONTHLY_FLEX_PRICE > 0 AND RATE_MONTHLY_FLEX_PRICE IS NOT NULL and RATE>0 THEN',
+' ROUND((RATE_MONTHLY_FLEX_PRICE - RATE )/RATE_MONTHLY_FLEX_PRICE * 100,1)',
+' ELSE NULL END PCT_MONTH,',
+' case when RATE_PAYGO_PRICE = 0 then null else RATE_PAYGO_PRICE end PUBLIC_PAYGO_RATE,',
+' CASE WHEN RATE_PAYGO_PRICE > 0 AND RATE_PAYGO_PRICE IS NOT NULL and RATE>0 THEN',
+' ROUND((RATE_PAYGO_PRICE - RATE )/RATE_PAYGO_PRICE * 100,1)',
+' ELSE NULL END PCT_PAYGO,',
+' RATE,',
+' CURRENCY,',
+' SINGLE_QUANTITY,',
+' HOURS_QUANTITY,',
+' TOTAL_QUANTITY,',
+' OVERAGE_COST,',
+' USAGE_COST,',
+' ESTIMATE_MONTH_31,',
+' ESTIMATE_YEAR',
+'from',
+' data a,',
+' oci_price_list b',
+'where ',
+' a.tenant_name = b.tenant_name (+) and',
+' a.COST_PRODUCT_SKU = b.COST_PRODUCT_SKU (+)',
+'order by USAGE_COST',
'',
''))
,p_plug_source_type=>'NATIVE_IR'
@@ -13596,28 +14009,49 @@ wwv_flow_api.create_worksheet_column(
,p_column_type=>'STRING'
);
wwv_flow_api.create_worksheet_column(
- p_id=>wwv_flow_api.id(11934736538191640)
-,p_db_column_name=>'RATE'
+ p_id=>wwv_flow_api.id(14188271974270023)
+,p_db_column_name=>'PUBLIC_RATE'
,p_display_order=>30
-,p_column_identifier=>'C'
-,p_column_label=>'Rate'
+,p_column_identifier=>'L'
+,p_column_label=>'Public Rate'
,p_column_type=>'NUMBER'
,p_column_alignment=>'RIGHT'
,p_format_mask=>'999G999G999G999G990D000'
);
wwv_flow_api.create_worksheet_column(
- p_id=>wwv_flow_api.id(12552301614313321)
-,p_db_column_name=>'CURRENCY'
+ p_id=>wwv_flow_api.id(14188353163270024)
+,p_db_column_name=>'PCT_MONTH'
,p_display_order=>40
-,p_column_identifier=>'K'
-,p_column_label=>'Cur'
-,p_column_type=>'STRING'
-,p_column_alignment=>'CENTER'
-);
-wwv_flow_api.create_worksheet_column(
- p_id=>wwv_flow_api.id(11934801837191641)
-,p_db_column_name=>'SINGLE_QUANTITY'
+,p_column_identifier=>'M'
+,p_column_label=>'% Discount MonFlex'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D0'
+,p_static_id=>'rep_col_pink'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(11934736538191640)
+,p_db_column_name=>'RATE'
,p_display_order=>50
+,p_column_identifier=>'C'
+,p_column_label=>'Customer Rate'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D000'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(12552301614313321)
+,p_db_column_name=>'CURRENCY'
+,p_display_order=>60
+,p_column_identifier=>'K'
+,p_column_label=>'Cur'
+,p_column_type=>'STRING'
+,p_column_alignment=>'CENTER'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(11934801837191641)
+,p_db_column_name=>'SINGLE_QUANTITY'
+,p_display_order=>70
,p_column_identifier=>'D'
,p_column_label=>'Single Quantity'
,p_column_type=>'NUMBER'
@@ -13627,7 +14061,7 @@ wwv_flow_api.create_worksheet_column(
wwv_flow_api.create_worksheet_column(
p_id=>wwv_flow_api.id(11934932235191642)
,p_db_column_name=>'HOURS_QUANTITY'
-,p_display_order=>60
+,p_display_order=>80
,p_column_identifier=>'E'
,p_column_label=>'Hours Quantity'
,p_column_type=>'NUMBER'
@@ -13637,7 +14071,7 @@ wwv_flow_api.create_worksheet_column(
wwv_flow_api.create_worksheet_column(
p_id=>wwv_flow_api.id(11935047811191643)
,p_db_column_name=>'TOTAL_QUANTITY'
-,p_display_order=>70
+,p_display_order=>90
,p_column_identifier=>'F'
,p_column_label=>'Total Quantity'
,p_column_type=>'NUMBER'
@@ -13647,7 +14081,7 @@ wwv_flow_api.create_worksheet_column(
wwv_flow_api.create_worksheet_column(
p_id=>wwv_flow_api.id(11935139954191644)
,p_db_column_name=>'OVERAGE_COST'
-,p_display_order=>80
+,p_display_order=>100
,p_column_identifier=>'G'
,p_column_label=>'Overage Cost'
,p_column_type=>'NUMBER'
@@ -13657,7 +14091,7 @@ wwv_flow_api.create_worksheet_column(
wwv_flow_api.create_worksheet_column(
p_id=>wwv_flow_api.id(11935274061191645)
,p_db_column_name=>'USAGE_COST'
-,p_display_order=>90
+,p_display_order=>110
,p_column_identifier=>'H'
,p_column_label=>'Usage Cost'
,p_column_type=>'NUMBER'
@@ -13668,7 +14102,7 @@ wwv_flow_api.create_worksheet_column(
wwv_flow_api.create_worksheet_column(
p_id=>wwv_flow_api.id(11935309095191646)
,p_db_column_name=>'ESTIMATE_MONTH_31'
-,p_display_order=>100
+,p_display_order=>120
,p_column_identifier=>'I'
,p_column_label=>'Estimate Month 31'
,p_column_type=>'NUMBER'
@@ -13678,13 +14112,33 @@ wwv_flow_api.create_worksheet_column(
wwv_flow_api.create_worksheet_column(
p_id=>wwv_flow_api.id(11935491613191647)
,p_db_column_name=>'ESTIMATE_YEAR'
-,p_display_order=>110
+,p_display_order=>130
,p_column_identifier=>'J'
,p_column_label=>'Estimate Year'
,p_column_type=>'NUMBER'
,p_column_alignment=>'RIGHT'
,p_format_mask=>'999G999G999G999G990D00'
);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(14188462327270025)
+,p_db_column_name=>'PUBLIC_PAYGO_RATE'
+,p_display_order=>140
+,p_column_identifier=>'N'
+,p_column_label=>'Public PayGo Rate'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D0000'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(14188587079270026)
+,p_db_column_name=>'PCT_PAYGO'
+,p_display_order=>150
+,p_column_identifier=>'O'
+,p_column_label=>'% DIscount Vs Paygo'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D0'
+);
wwv_flow_api.create_worksheet_rpt(
p_id=>wwv_flow_api.id(12264955888332662)
,p_application_user=>'APXWS_DEFAULT'
@@ -13692,7 +14146,18 @@ wwv_flow_api.create_worksheet_rpt(
,p_report_alias=>'122650'
,p_status=>'PUBLIC'
,p_is_default=>'Y'
-,p_report_columns=>'PRODUCT:CURRENCY:COST_BILLING_UNIT:RATE:SINGLE_QUANTITY:HOURS_QUANTITY:TOTAL_QUANTITY:OVERAGE_COST:USAGE_COST:ESTIMATE_MONTH_31:ESTIMATE_YEAR:'
+,p_report_columns=>'PRODUCT:COST_BILLING_UNIT:CURRENCY:PUBLIC_RATE:PCT_MONTH:RATE:SINGLE_QUANTITY:OVERAGE_COST:USAGE_COST:ESTIMATE_MONTH_31:ESTIMATE_YEAR:'
+,p_sum_columns_on_break=>'OVERAGE_COST:USAGE_COST:ESTIMATE_MONTH_31:ESTIMATE_YEAR'
+);
+wwv_flow_api.create_worksheet_rpt(
+ p_id=>wwv_flow_api.id(16442242263079381)
+,p_application_user=>'APXWS_ALTERNATIVE'
+,p_name=>'Compact'
+,p_report_seq=>10
+,p_report_alias=>'164423'
+,p_status=>'PUBLIC'
+,p_is_default=>'Y'
+,p_report_columns=>'PRODUCT:CURRENCY:PCT_MONTH:RATE:SINGLE_QUANTITY:OVERAGE_COST:USAGE_COST:ESTIMATE_MONTH_31:ESTIMATE_YEAR:'
,p_sum_columns_on_break=>'OVERAGE_COST:USAGE_COST:ESTIMATE_MONTH_31:ESTIMATE_YEAR'
);
wwv_flow_api.create_page_plug(
@@ -13722,6 +14187,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'on'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'value-desc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -13729,7 +14195,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'off'
+,p_legend_position=>'auto'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(11711871269773205)
@@ -13766,8 +14245,10 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'insideBarEdge'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_style=>'normal'
,p_items_label_font_size=>'8'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(11711229189773204)
@@ -13805,6 +14286,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(21624153346489267)
@@ -13830,15 +14319,35 @@ wwv_flow_api.create_jet_chart(
,p_data_cursor=>'auto'
,p_data_cursor_behavior=>'auto'
,p_hover_behavior=>'dim'
+,p_stack=>'off'
+,p_stack_label=>'off'
+,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_value_format_type=>'decimal'
,p_value_decimal_places=>1
,p_value_format_scaling=>'auto'
+,p_sorting=>'label-asc'
+,p_fill_multi_series_gaps=>true
,p_tooltip_rendered=>'Y'
,p_show_series_name=>true
+,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'off'
+,p_legend_position=>'auto'
+,p_overview_rendered=>'off'
,p_pie_other_threshold=>0
,p_pie_selection_effect=>'highlight'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(11717080104773209)
@@ -13876,6 +14385,7 @@ wwv_flow_api.create_jet_chart_series(
,p_items_label_rendered=>true
,p_items_label_position=>'aboveMarker'
,p_items_label_display_as=>'ALL'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(21609013755513694)
@@ -14172,6 +14682,9 @@ wwv_flow_api.create_page_item(
,p_attribute_01=>'NONE'
,p_attribute_02=>'N'
);
+end;
+/
+begin
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(11706169664773195)
,p_name=>'P4_TAG_DATA'
@@ -14356,9 +14869,6 @@ wwv_flow_api.create_page_item(
,p_attribute_01=>'NONE'
,p_attribute_02=>'N'
);
-end;
-/
-begin
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(12552627388313324)
,p_name=>'P4_INFO'
@@ -14832,7 +15342,7 @@ wwv_flow_api.create_page(
'#P5_REPORT_SELECTOR { background-color: #F5FBB4; font-weight: bold; font-size: 13px;}'))
,p_page_template_options=>'#DEFAULT#'
,p_last_updated_by=>'ADIZOHAR'
-,p_last_upd_yyyymmddhh24miss=>'20200507123855'
+,p_last_upd_yyyymmddhh24miss=>'20200514145916'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(22846551592241693)
@@ -14887,7 +15397,7 @@ wwv_flow_api.create_report_region(
,p_source=>wwv_flow_string.join(wwv_flow_t_varchar2(
'SELECT ',
' case ',
-' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
' when :P5_REPORT_GROUP = ''Region'' then prd_region',
' when :P5_REPORT_GROUP = ''Top Compartment'' then ',
' case ',
@@ -14926,7 +15436,7 @@ wwv_flow_api.create_report_region(
' :P5_REPORT_SELECTOR = ''Monthly Cost Report''',
'GROUP BY ',
' case ',
-' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
' when :P5_REPORT_GROUP = ''Region'' then prd_region',
' when :P5_REPORT_GROUP = ''Top Compartment'' then ',
' case ',
@@ -15204,7 +15714,7 @@ wwv_flow_api.create_report_region(
,p_source=>wwv_flow_string.join(wwv_flow_t_varchar2(
'SELECT ',
' case ',
-' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
' when :P5_REPORT_GROUP = ''Region'' then prd_region',
' when :P5_REPORT_GROUP = ''Top Compartment'' then ',
' case ',
@@ -15263,7 +15773,7 @@ wwv_flow_api.create_report_region(
'',
'GROUP BY ',
' case ',
-' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
' when :P5_REPORT_GROUP = ''Region'' then prd_region',
' when :P5_REPORT_GROUP = ''Top Compartment'' then ',
' case ',
@@ -15828,7 +16338,7 @@ wwv_flow_api.create_report_region(
,p_source=>wwv_flow_string.join(wwv_flow_t_varchar2(
' SELECT ',
' case ',
-' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
' when :P5_REPORT_GROUP = ''Region'' then prd_region',
' when :P5_REPORT_GROUP = ''Top Compartment'' then ',
' case ',
@@ -15907,7 +16417,7 @@ wwv_flow_api.create_report_region(
' :P5_REPORT_SELECTOR = ''Weekly Cost Report''',
'GROUP BY ',
' case ',
-' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' when :P5_REPORT_GROUP = ''Product'' or :P5_REPORT_GROUP is null then COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
' when :P5_REPORT_GROUP = ''Region'' then prd_region',
' when :P5_REPORT_GROUP = ''Top Compartment'' then ',
' case ',
@@ -16717,7 +17227,7 @@ wwv_flow_api.create_report_region(
'FROM ',
'(',
' SELECT ',
-' COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'') PRODUCT_NAME,',
+' COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'') PRODUCT_NAME,',
' USAGE_INTERVAL_START,',
' case ',
' when COST_BILLING_UNIT like ''%HOURS%'' or PRD_DESCRIPTION like ''%Per Hour%'' then USG_BILLED_QUANTITY/24',
@@ -17260,6 +17770,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'off'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -17267,8 +17778,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(13976866910041445)
@@ -17334,7 +17857,9 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'center'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(13977108905041448)
@@ -17350,6 +17875,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(13977078966041447)
@@ -17366,6 +17899,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(14186462781270005)
@@ -17395,6 +17936,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'on'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -17402,8 +17944,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'end'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(14186672156270007)
@@ -17446,7 +18000,9 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'center'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(14186775683270008)
@@ -17462,6 +18018,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(14186828501270009)
@@ -17478,6 +18042,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(15050972044989901)
@@ -17505,7 +18077,9 @@ wwv_flow_api.create_jet_chart(
,p_hide_and_show_behavior=>'none'
,p_hover_behavior=>'none'
,p_stack=>'on'
+,p_stack_label=>'off'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -17513,9 +18087,24 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'end'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
+end;
+/
+begin
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(15051132224989903)
,p_chart_id=>wwv_flow_api.id(15051010405989902)
@@ -17561,11 +18150,10 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'center'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
-end;
-/
-begin
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(15051263494989904)
,p_chart_id=>wwv_flow_api.id(15051010405989902)
@@ -17580,6 +18168,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(15051343629989905)
@@ -17596,6 +18192,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(15051727286989909)
@@ -17614,7 +18218,7 @@ wwv_flow_api.create_jet_chart(
p_id=>wwv_flow_api.id(15051899660989910)
,p_region_id=>wwv_flow_api.id(15051727286989909)
,p_chart_type=>'bar'
-,p_height=>'450'
+,p_height=>'600'
,p_animation_on_display=>'auto'
,p_animation_on_data_change=>'auto'
,p_orientation=>'vertical'
@@ -17676,7 +18280,9 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'center'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(15052096900989912)
@@ -17692,6 +18298,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(15052126213989913)
@@ -17708,6 +18322,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(15052505519989917)
@@ -17737,6 +18359,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'on'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -17744,8 +18367,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'end'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(15052776181989919)
@@ -17788,7 +18423,9 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'center'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(15052897038989920)
@@ -17804,6 +18441,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(15052900863989921)
@@ -17820,6 +18465,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_report_region(
p_id=>wwv_flow_api.id(15053388277989925)
@@ -17869,7 +18522,7 @@ wwv_flow_api.create_report_region(
'FROM ',
'(',
' SELECT ',
-' COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'') PRODUCT_NAME,',
+' COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'') PRODUCT_NAME,',
' USAGE_INTERVAL_START,',
' USG_BILLED_QUANTITY',
' FROM',
@@ -18352,6 +19005,9 @@ wwv_flow_api.create_report_columns(
,p_derived_column=>'N'
,p_include_in_export=>'Y'
);
+end;
+/
+begin
wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15083179032497506)
,p_query_column_id=>31
@@ -18393,7 +19049,7 @@ wwv_flow_api.create_report_region(
,p_query_type=>'SQL'
,p_source=>wwv_flow_string.join(wwv_flow_t_varchar2(
' SELECT ',
-' COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'') as product_name,',
+' COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'') as product_name,',
' sum(case when to_char(USAGE_INTERVAL_START,''WW'') = ''01'' then USG_BILLED_QUANTITY else null end) W01,',
' sum(case when to_char(USAGE_INTERVAL_START,''WW'') = ''02'' then USG_BILLED_QUANTITY else null end) W02,',
' sum(case when to_char(USAGE_INTERVAL_START,''WW'') = ''03'' then USG_BILLED_QUANTITY else null end) W03,',
@@ -18461,7 +19117,7 @@ wwv_flow_api.create_report_region(
' (:P5_TAG_DATA is null or tags_data like ''%#'' || nvl(:P5_TAG_KEY,''%'') || ''=%'' || :P5_TAG_DATA || ''#'') and',
' :P5_REPORT_SELECTOR = ''Weekly Product Unit Report''',
'GROUP BY ',
-' COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
'having sum(USG_BILLED_QUANTITY)>0;'))
,p_ajax_enabled=>'Y'
,p_query_row_template=>wwv_flow_api.id(9790776953688052)
@@ -18507,14 +19163,11 @@ wwv_flow_api.create_report_region(
,p_sort_null=>'L'
,p_plug_query_strip_html=>'N'
);
-end;
-/
-begin
wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15083882458497513)
,p_query_column_id=>1
,p_column_alias=>'PRODUCT_NAME'
-,p_column_display_sequence=>2
+,p_column_display_sequence=>1
,p_column_heading=>'&P5_REPORT_GROUP.'
,p_use_as_row_header=>'N'
,p_column_html_expression=>'#PRODUCT_NAME#'
@@ -18526,7 +19179,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084020372497515)
,p_query_column_id=>2
,p_column_alias=>'W01'
-,p_column_display_sequence=>3
+,p_column_display_sequence=>2
,p_column_heading=>'W01'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18540,7 +19193,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084196664497516)
,p_query_column_id=>3
,p_column_alias=>'W02'
-,p_column_display_sequence=>4
+,p_column_display_sequence=>3
,p_column_heading=>'W02'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18554,7 +19207,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084234533497517)
,p_query_column_id=>4
,p_column_alias=>'W03'
-,p_column_display_sequence=>5
+,p_column_display_sequence=>4
,p_column_heading=>'W03'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18568,7 +19221,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084309261497518)
,p_query_column_id=>5
,p_column_alias=>'W04'
-,p_column_display_sequence=>6
+,p_column_display_sequence=>5
,p_column_heading=>'W04'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18582,7 +19235,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084429391497519)
,p_query_column_id=>6
,p_column_alias=>'W05'
-,p_column_display_sequence=>7
+,p_column_display_sequence=>6
,p_column_heading=>'W05'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18596,7 +19249,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084526180497520)
,p_query_column_id=>7
,p_column_alias=>'W06'
-,p_column_display_sequence=>8
+,p_column_display_sequence=>7
,p_column_heading=>'W06'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18610,7 +19263,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084637150497521)
,p_query_column_id=>8
,p_column_alias=>'W07'
-,p_column_display_sequence=>9
+,p_column_display_sequence=>8
,p_column_heading=>'W07'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18624,7 +19277,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084797622497522)
,p_query_column_id=>9
,p_column_alias=>'W08'
-,p_column_display_sequence=>10
+,p_column_display_sequence=>9
,p_column_heading=>'W08'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18638,7 +19291,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084836140497523)
,p_query_column_id=>10
,p_column_alias=>'W09'
-,p_column_display_sequence=>11
+,p_column_display_sequence=>10
,p_column_heading=>'W09'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18652,7 +19305,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15084995246497524)
,p_query_column_id=>11
,p_column_alias=>'W10'
-,p_column_display_sequence=>12
+,p_column_display_sequence=>11
,p_column_heading=>'W10'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18666,7 +19319,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085033317497525)
,p_query_column_id=>12
,p_column_alias=>'W11'
-,p_column_display_sequence=>13
+,p_column_display_sequence=>12
,p_column_heading=>'W11'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18680,7 +19333,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085177774497526)
,p_query_column_id=>13
,p_column_alias=>'W12'
-,p_column_display_sequence=>14
+,p_column_display_sequence=>13
,p_column_heading=>'W12'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18694,7 +19347,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085250160497527)
,p_query_column_id=>14
,p_column_alias=>'W13'
-,p_column_display_sequence=>15
+,p_column_display_sequence=>14
,p_column_heading=>'W13'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18708,7 +19361,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085385329497528)
,p_query_column_id=>15
,p_column_alias=>'W14'
-,p_column_display_sequence=>16
+,p_column_display_sequence=>15
,p_column_heading=>'W14'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18722,7 +19375,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085480365497529)
,p_query_column_id=>16
,p_column_alias=>'W15'
-,p_column_display_sequence=>17
+,p_column_display_sequence=>16
,p_column_heading=>'W15'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18736,7 +19389,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085576532497530)
,p_query_column_id=>17
,p_column_alias=>'W16'
-,p_column_display_sequence=>18
+,p_column_display_sequence=>17
,p_column_heading=>'W16'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18750,7 +19403,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085669628497531)
,p_query_column_id=>18
,p_column_alias=>'W17'
-,p_column_display_sequence=>19
+,p_column_display_sequence=>18
,p_column_heading=>'W17'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18764,7 +19417,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085797503497532)
,p_query_column_id=>19
,p_column_alias=>'W18'
-,p_column_display_sequence=>20
+,p_column_display_sequence=>19
,p_column_heading=>'W18'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18778,7 +19431,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085831898497533)
,p_query_column_id=>20
,p_column_alias=>'W19'
-,p_column_display_sequence=>21
+,p_column_display_sequence=>20
,p_column_heading=>'W19'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18792,7 +19445,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15085995417497534)
,p_query_column_id=>21
,p_column_alias=>'W20'
-,p_column_display_sequence=>22
+,p_column_display_sequence=>21
,p_column_heading=>'W20'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18806,7 +19459,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086033795497535)
,p_query_column_id=>22
,p_column_alias=>'W21'
-,p_column_display_sequence=>23
+,p_column_display_sequence=>22
,p_column_heading=>'W21'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18820,7 +19473,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086169388497536)
,p_query_column_id=>23
,p_column_alias=>'W22'
-,p_column_display_sequence=>24
+,p_column_display_sequence=>23
,p_column_heading=>'W22'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18834,7 +19487,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086256237497537)
,p_query_column_id=>24
,p_column_alias=>'W23'
-,p_column_display_sequence=>25
+,p_column_display_sequence=>24
,p_column_heading=>'W23'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18848,7 +19501,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086305029497538)
,p_query_column_id=>25
,p_column_alias=>'W24'
-,p_column_display_sequence=>26
+,p_column_display_sequence=>25
,p_column_heading=>'W24'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18862,7 +19515,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086424118497539)
,p_query_column_id=>26
,p_column_alias=>'W25'
-,p_column_display_sequence=>27
+,p_column_display_sequence=>26
,p_column_heading=>'W25'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18876,7 +19529,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086575044497540)
,p_query_column_id=>27
,p_column_alias=>'W26'
-,p_column_display_sequence=>28
+,p_column_display_sequence=>27
,p_column_heading=>'W26'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18890,7 +19543,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086644472497541)
,p_query_column_id=>28
,p_column_alias=>'W27'
-,p_column_display_sequence=>29
+,p_column_display_sequence=>28
,p_column_heading=>'W27'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18904,7 +19557,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086736459497542)
,p_query_column_id=>29
,p_column_alias=>'W28'
-,p_column_display_sequence=>30
+,p_column_display_sequence=>29
,p_column_heading=>'W28'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18918,7 +19571,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086866979497543)
,p_query_column_id=>30
,p_column_alias=>'W29'
-,p_column_display_sequence=>31
+,p_column_display_sequence=>30
,p_column_heading=>'W29'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18932,7 +19585,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15083737349497512)
,p_query_column_id=>31
,p_column_alias=>'W30'
-,p_column_display_sequence=>32
+,p_column_display_sequence=>31
,p_column_heading=>'W30'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18946,7 +19599,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15086972484497544)
,p_query_column_id=>32
,p_column_alias=>'W31'
-,p_column_display_sequence=>33
+,p_column_display_sequence=>32
,p_column_heading=>'W31'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18960,7 +19613,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15087043653497545)
,p_query_column_id=>33
,p_column_alias=>'W32'
-,p_column_display_sequence=>34
+,p_column_display_sequence=>33
,p_column_heading=>'W32'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18974,7 +19627,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15087140332497546)
,p_query_column_id=>34
,p_column_alias=>'W33'
-,p_column_display_sequence=>35
+,p_column_display_sequence=>34
,p_column_heading=>'W33'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -18988,7 +19641,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15087212537497547)
,p_query_column_id=>35
,p_column_alias=>'W34'
-,p_column_display_sequence=>36
+,p_column_display_sequence=>35
,p_column_heading=>'W34'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19002,7 +19655,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15087301471497548)
,p_query_column_id=>36
,p_column_alias=>'W35'
-,p_column_display_sequence=>37
+,p_column_display_sequence=>36
,p_column_heading=>'W35'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19016,7 +19669,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15087435183497549)
,p_query_column_id=>37
,p_column_alias=>'W36'
-,p_column_display_sequence=>38
+,p_column_display_sequence=>37
,p_column_heading=>'W36'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19030,7 +19683,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15087578148497550)
,p_query_column_id=>38
,p_column_alias=>'W37'
-,p_column_display_sequence=>39
+,p_column_display_sequence=>38
,p_column_heading=>'W37'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19044,7 +19697,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15101314487532001)
,p_query_column_id=>39
,p_column_alias=>'W38'
-,p_column_display_sequence=>40
+,p_column_display_sequence=>39
,p_column_heading=>'W38'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19058,7 +19711,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15101467741532002)
,p_query_column_id=>40
,p_column_alias=>'W39'
-,p_column_display_sequence=>41
+,p_column_display_sequence=>40
,p_column_heading=>'W39'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19072,7 +19725,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15101501587532003)
,p_query_column_id=>41
,p_column_alias=>'W40'
-,p_column_display_sequence=>42
+,p_column_display_sequence=>41
,p_column_heading=>'W40'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19086,7 +19739,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15101628599532004)
,p_query_column_id=>42
,p_column_alias=>'W41'
-,p_column_display_sequence=>43
+,p_column_display_sequence=>42
,p_column_heading=>'W41'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19100,7 +19753,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15101775120532005)
,p_query_column_id=>43
,p_column_alias=>'W42'
-,p_column_display_sequence=>44
+,p_column_display_sequence=>43
,p_column_heading=>'W42'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19114,7 +19767,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15101834422532006)
,p_query_column_id=>44
,p_column_alias=>'W43'
-,p_column_display_sequence=>45
+,p_column_display_sequence=>44
,p_column_heading=>'W43'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19128,7 +19781,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15101918299532007)
,p_query_column_id=>45
,p_column_alias=>'W44'
-,p_column_display_sequence=>46
+,p_column_display_sequence=>45
,p_column_heading=>'W44'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19142,7 +19795,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102016850532008)
,p_query_column_id=>46
,p_column_alias=>'W45'
-,p_column_display_sequence=>47
+,p_column_display_sequence=>46
,p_column_heading=>'W45'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19156,7 +19809,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102102479532009)
,p_query_column_id=>47
,p_column_alias=>'W46'
-,p_column_display_sequence=>48
+,p_column_display_sequence=>47
,p_column_heading=>'W46'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19170,7 +19823,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102201934532010)
,p_query_column_id=>48
,p_column_alias=>'W47'
-,p_column_display_sequence=>49
+,p_column_display_sequence=>48
,p_column_heading=>'W47'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19184,7 +19837,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102376964532011)
,p_query_column_id=>49
,p_column_alias=>'W48'
-,p_column_display_sequence=>50
+,p_column_display_sequence=>49
,p_column_heading=>'W48'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19198,7 +19851,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102424245532012)
,p_query_column_id=>50
,p_column_alias=>'W49'
-,p_column_display_sequence=>51
+,p_column_display_sequence=>50
,p_column_heading=>'W49'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19212,7 +19865,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102519216532013)
,p_query_column_id=>51
,p_column_alias=>'W50'
-,p_column_display_sequence=>52
+,p_column_display_sequence=>51
,p_column_heading=>'W50'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19226,7 +19879,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102602847532014)
,p_query_column_id=>52
,p_column_alias=>'W51'
-,p_column_display_sequence=>53
+,p_column_display_sequence=>52
,p_column_heading=>'W51'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19240,7 +19893,7 @@ wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102752424532015)
,p_query_column_id=>53
,p_column_alias=>'W52'
-,p_column_display_sequence=>54
+,p_column_display_sequence=>53
,p_column_heading=>'W52'
,p_use_as_row_header=>'N'
,p_column_format=>'999G999G999G999G990D00'
@@ -19263,7 +19916,7 @@ wwv_flow_api.create_report_region(
,p_query_type=>'SQL'
,p_source=>wwv_flow_string.join(wwv_flow_t_varchar2(
'SELECT ',
-' COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'') as product_name,',
+' COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'') as product_name,',
' sum(case when to_char(USAGE_INTERVAL_START,''MM'') = ''01'' then USG_BILLED_QUANTITY else null end) Jan,',
' sum(case when to_char(USAGE_INTERVAL_START,''MM'') = ''02'' then USG_BILLED_QUANTITY else null end) Feb,',
' sum(case when to_char(USAGE_INTERVAL_START,''MM'') = ''03'' then USG_BILLED_QUANTITY else null end) Mar,',
@@ -19291,7 +19944,7 @@ wwv_flow_api.create_report_region(
' (:P5_TAG_DATA is null or tags_data like ''%#'' || nvl(:P5_TAG_KEY,''%'') || ''=%'' || :P5_TAG_DATA || ''#'') and',
' :P5_REPORT_SELECTOR = ''Monthly Product Unit Report''',
'GROUP BY ',
-' COST_PRODUCT_SKU || '' '' || replace(prd_description,''Oracle Cloud Infrastructure'',''OCI'')',
+' COST_PRODUCT_SKU || '' '' || replace(replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '',''''),''Oracle Cloud Infrastructure'',''OCI'')',
'having sum(USG_BILLED_QUANTITY)>0;',
''))
,p_ajax_enabled=>'Y'
@@ -19338,6 +19991,9 @@ wwv_flow_api.create_report_region(
,p_sort_null=>'L'
,p_plug_query_strip_html=>'N'
);
+end;
+/
+begin
wwv_flow_api.create_report_columns(
p_id=>wwv_flow_api.id(15102928440532017)
,p_query_column_id=>1
@@ -19546,6 +20202,7 @@ wwv_flow_api.create_jet_chart(
,p_stack=>'on'
,p_stack_label=>'off'
,p_connect_nulls=>'Y'
+,p_value_position=>'auto'
,p_sorting=>'label-asc'
,p_fill_multi_series_gaps=>true
,p_zoom_and_scroll=>'off'
@@ -19553,8 +20210,20 @@ wwv_flow_api.create_jet_chart(
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
+,p_show_label=>true
+,p_show_row=>true
+,p_show_start=>true
+,p_show_end=>true
+,p_show_progress=>true
+,p_show_baseline=>true
,p_legend_rendered=>'on'
,p_legend_position=>'bottom'
+,p_overview_rendered=>'off'
+,p_horizontal_grid=>'auto'
+,p_vertical_grid=>'auto'
+,p_gauge_orientation=>'circular'
+,p_gauge_plot_area=>'on'
+,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(12038129542075985)
@@ -19620,11 +20289,10 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'center'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
-end;
-/
-begin
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(11933638002191629)
,p_chart_id=>wwv_flow_api.id(12036462660075984)
@@ -19689,7 +20357,9 @@ wwv_flow_api.create_jet_chart_series(
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>true
,p_items_label_position=>'center'
+,p_items_label_display_as=>'PERCENT'
,p_items_label_font_size=>'10'
+,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(12036986078075984)
@@ -19729,6 +20399,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
+,p_zoom_order_seconds=>false
+,p_zoom_order_minutes=>false
+,p_zoom_order_hours=>false
+,p_zoom_order_days=>false
+,p_zoom_order_weeks=>false
+,p_zoom_order_months=>false
+,p_zoom_order_quarters=>false
+,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(41488126786200900)
@@ -20181,6 +20859,9 @@ wwv_flow_api.create_page_item(
,p_attribute_02=>'VALUE'
,p_attribute_04=>'Y'
);
+end;
+/
+begin
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(12055265653076068)
,p_name=>'P5_SUBSCRIPTION'
@@ -20412,9 +21093,6 @@ wwv_flow_api.create_page_item(
,p_attribute_02=>'VALUE'
,p_attribute_04=>'Y'
);
-end;
-/
-begin
wwv_flow_api.create_page_computation(
p_id=>wwv_flow_api.id(11934077528191633)
,p_computation_sequence=>10
@@ -21017,6 +21695,7 @@ wwv_flow_api.create_worksheet(
,p_max_row_count=>'1000000'
,p_show_nulls_as=>'-'
,p_show_search_bar=>'N'
+,p_report_list_mode=>'TABS'
,p_show_detail_link=>'N'
,p_owner=>'ADI.ZOHAR@ORACLE.COM'
,p_internal_uid=>13352241944239119
@@ -21246,6 +21925,7 @@ wwv_flow_api.create_worksheet(
,p_max_row_count=>'1000000'
,p_show_nulls_as=>'-'
,p_show_search_bar=>'N'
+,p_report_list_mode=>'TABS'
,p_show_detail_link=>'N'
,p_owner=>'ADI.ZOHAR@ORACLE.COM'
,p_internal_uid=>13350953403239106
@@ -21404,6 +22084,341 @@ wwv_flow_api.create_page_item(
);
end;
/
+prompt --application/pages/page_00007
+begin
+wwv_flow_api.create_page(
+ p_id=>7
+,p_user_interface_id=>wwv_flow_api.id(9843694399688199)
+,p_name=>'Rate Card'
+,p_step_title=>'Rate Card'
+,p_autocomplete_on_off=>'OFF'
+,p_inline_css=>wwv_flow_string.join(wwv_flow_t_varchar2(
+'.a-IRR-table tr td[headers*="rep_col_grey"]',
+'{',
+' background-color: #efffff;',
+'}',
+'.a-IRR-table tr td[headers*="rep_col_blue"]',
+'{',
+' background-color: #ffefff;',
+'}',
+'',
+''))
+,p_page_template_options=>'#DEFAULT#'
+,p_last_updated_by=>'ADIZOHAR'
+,p_last_upd_yyyymmddhh24miss=>'20200514125242'
+);
+wwv_flow_api.create_page_plug(
+ p_id=>wwv_flow_api.id(72369311697812384)
+,p_plug_name=>'Filter'
+,p_region_template_options=>'#DEFAULT#:t-Region--removeHeader:t-Region--accent12:t-Region--scrollBody:t-Form--noPadding:margin-top-none:margin-bottom-md:margin-left-none:margin-right-none'
+,p_plug_template=>wwv_flow_api.id(9765042323688020)
+,p_plug_display_sequence=>10
+,p_include_in_reg_disp_sel_yn=>'Y'
+,p_plug_grid_column_span=>12
+,p_plug_display_point=>'BODY'
+,p_plug_query_options=>'DERIVED_REPORT_COLUMNS'
+,p_attribute_01=>'N'
+,p_attribute_02=>'HTML'
+);
+wwv_flow_api.create_page_plug(
+ p_id=>wwv_flow_api.id(83161602120160340)
+,p_plug_name=>'ShowGraphs'
+,p_region_template_options=>'#DEFAULT#:t-Region--removeHeader:t-Region--scrollBody'
+,p_plug_template=>wwv_flow_api.id(9765042323688020)
+,p_plug_display_sequence=>40
+,p_include_in_reg_disp_sel_yn=>'Y'
+,p_plug_display_point=>'BODY'
+,p_plug_query_options=>'DERIVED_REPORT_COLUMNS'
+,p_attribute_01=>'N'
+,p_attribute_02=>'HTML'
+);
+wwv_flow_api.create_page_plug(
+ p_id=>wwv_flow_api.id(61791178689852192)
+,p_plug_name=>'Rate Card Report'
+,p_parent_plug_id=>wwv_flow_api.id(83161602120160340)
+,p_region_template_options=>'#DEFAULT#'
+,p_plug_template=>wwv_flow_api.id(9763915989688019)
+,p_plug_display_sequence=>60
+,p_plug_display_point=>'BODY'
+,p_query_type=>'SQL'
+,p_plug_source=>wwv_flow_string.join(wwv_flow_t_varchar2(
+'SELECT',
+' TENANT_NAME TENANT,',
+' COST_PRODUCT_SKU SKU,',
+' replace(PRD_DESCRIPTION,COST_PRODUCT_SKU||'' - '','''') PRODUCT,',
+' COST_CURRENCY_CODE CURRENCY,',
+' COST_UNIT_PRICE COST_PRICE,',
+' COST_LAST_UPDATE,',
+' RATE_DESCRIPTION,',
+' RATE_PAYGO_PRICE RATE_PAYGO,',
+' CASE WHEN RATE_PAYGO_PRICE > 0 AND RATE_PAYGO_PRICE IS NOT NULL and COST_UNIT_PRICE > 0 THEN',
+' ROUND((RATE_PAYGO_PRICE - COST_UNIT_PRICE )/RATE_PAYGO_PRICE * 100,1)',
+' ELSE NULL END PCT_PAYGO,',
+' ROUND(RATE_MONTHLY_FLEX_PRICE,4) RATE_MONTHLY,',
+' CASE WHEN RATE_MONTHLY_FLEX_PRICE > 0 AND RATE_MONTHLY_FLEX_PRICE IS NOT NULL and COST_UNIT_PRICE>0 THEN',
+' ROUND((RATE_MONTHLY_FLEX_PRICE - COST_UNIT_PRICE )/RATE_MONTHLY_FLEX_PRICE * 100,1)',
+' ELSE NULL END PCT_MONTH,',
+' RATE_UPDATE_DATE',
+'FROM',
+' OCI_PRICE_LIST',
+'where tenant_name=:P7_TENANT_NAME',
+'order by cost_product_sku;'))
+,p_plug_source_type=>'NATIVE_IR'
+,p_plug_query_options=>'DERIVED_REPORT_COLUMNS'
+,p_prn_content_disposition=>'ATTACHMENT'
+,p_prn_document_header=>'APEX'
+,p_prn_units=>'INCHES'
+,p_prn_paper_size=>'LETTER'
+,p_prn_width=>8.5
+,p_prn_height=>11
+,p_prn_orientation=>'HORIZONTAL'
+,p_prn_page_header_font_color=>'#000000'
+,p_prn_page_header_font_family=>'Helvetica'
+,p_prn_page_header_font_weight=>'normal'
+,p_prn_page_header_font_size=>'12'
+,p_prn_page_footer_font_color=>'#000000'
+,p_prn_page_footer_font_family=>'Helvetica'
+,p_prn_page_footer_font_weight=>'normal'
+,p_prn_page_footer_font_size=>'12'
+,p_prn_header_bg_color=>'#9bafde'
+,p_prn_header_font_color=>'#000000'
+,p_prn_header_font_family=>'Helvetica'
+,p_prn_header_font_weight=>'normal'
+,p_prn_header_font_size=>'10'
+,p_prn_body_bg_color=>'#efefef'
+,p_prn_body_font_color=>'#000000'
+,p_prn_body_font_family=>'Helvetica'
+,p_prn_body_font_weight=>'normal'
+,p_prn_body_font_size=>'10'
+,p_prn_border_width=>.5
+,p_prn_page_header_alignment=>'CENTER'
+,p_prn_page_footer_alignment=>'CENTER'
+);
+wwv_flow_api.create_worksheet(
+ p_id=>wwv_flow_api.id(16358400984490309)
+,p_max_row_count=>'1000000'
+,p_show_nulls_as=>'-'
+,p_pagination_type=>'ROWS_X_TO_Y'
+,p_pagination_display_pos=>'BOTTOM_RIGHT'
+,p_report_list_mode=>'TABS'
+,p_show_detail_link=>'N'
+,p_show_notify=>'Y'
+,p_download_formats=>'CSV:HTML:EMAIL:XLS:PDF:RTF'
+,p_owner=>'ADIZOHAR'
+,p_internal_uid=>16358400984490309
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16358519224490310)
+,p_db_column_name=>'TENANT'
+,p_display_order=>10
+,p_column_identifier=>'A'
+,p_column_label=>'Tenant'
+,p_column_type=>'STRING'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16358680829490311)
+,p_db_column_name=>'SKU'
+,p_display_order=>20
+,p_column_identifier=>'B'
+,p_column_label=>'Sku'
+,p_column_type=>'STRING'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16358753197490312)
+,p_db_column_name=>'PRODUCT'
+,p_display_order=>30
+,p_column_identifier=>'C'
+,p_column_label=>'Product'
+,p_column_html_expression=>'#PRODUCT#'
+,p_column_type=>'STRING'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16358884845490313)
+,p_db_column_name=>'CURRENCY'
+,p_display_order=>40
+,p_column_identifier=>'D'
+,p_column_label=>'Currency'
+,p_column_type=>'STRING'
+,p_column_alignment=>'CENTER'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16358959661490314)
+,p_db_column_name=>'COST_PRICE'
+,p_display_order=>50
+,p_column_identifier=>'E'
+,p_column_label=>'Cost Price'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D0000'
+,p_static_id=>'rep_col_grey'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16359088388490315)
+,p_db_column_name=>'COST_LAST_UPDATE'
+,p_display_order=>60
+,p_column_identifier=>'F'
+,p_column_label=>'Cost Last Update'
+,p_column_html_expression=>'#COST_LAST_UPDATE#'
+,p_column_type=>'DATE'
+,p_column_alignment=>'CENTER'
+,p_format_mask=>'DD-MON-YYYY HH24:MI'
+,p_tz_dependent=>'N'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16359157348490316)
+,p_db_column_name=>'RATE_DESCRIPTION'
+,p_display_order=>70
+,p_column_identifier=>'G'
+,p_column_label=>'Rate Full Description'
+,p_column_html_expression=>'#RATE_DESCRIPTION#'
+,p_column_type=>'STRING'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16359237070490317)
+,p_db_column_name=>'RATE_PAYGO'
+,p_display_order=>80
+,p_column_identifier=>'H'
+,p_column_label=>'Public Rate PayGo'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D0000'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16359398402490318)
+,p_db_column_name=>'PCT_PAYGO'
+,p_display_order=>90
+,p_column_identifier=>'I'
+,p_column_label=>'% Discount PayGo'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D00'
+,p_static_id=>'rep_col_blue'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16359449849490319)
+,p_db_column_name=>'RATE_MONTHLY'
+,p_display_order=>100
+,p_column_identifier=>'J'
+,p_column_label=>'Public Rate MonFlex'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D0000'
+,p_static_id=>'rep_col_grey'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16359539927490320)
+,p_db_column_name=>'PCT_MONTH'
+,p_display_order=>110
+,p_column_identifier=>'K'
+,p_column_label=>'% Discount MonFlex'
+,p_column_type=>'NUMBER'
+,p_column_alignment=>'RIGHT'
+,p_format_mask=>'999G999G999G999G990D00'
+,p_static_id=>'rep_col_blue'
+);
+wwv_flow_api.create_worksheet_column(
+ p_id=>wwv_flow_api.id(16359640418490321)
+,p_db_column_name=>'RATE_UPDATE_DATE'
+,p_display_order=>120
+,p_column_identifier=>'L'
+,p_column_label=>'Rate Update Date'
+,p_column_html_expression=>'#RATE_UPDATE_DATE#'
+,p_column_type=>'DATE'
+,p_column_alignment=>'CENTER'
+,p_format_mask=>'DD-MON-YYYY HH24:MI'
+,p_tz_dependent=>'N'
+);
+wwv_flow_api.create_worksheet_rpt(
+ p_id=>wwv_flow_api.id(16392788699988040)
+,p_application_user=>'APXWS_DEFAULT'
+,p_report_seq=>10
+,p_report_alias=>'163928'
+,p_status=>'PUBLIC'
+,p_is_default=>'Y'
+,p_report_columns=>'SKU:PRODUCT:CURRENCY:COST_PRICE:PCT_MONTH:RATE_MONTHLY:RATE_DESCRIPTION:RATE_UPDATE_DATE:'
+);
+wwv_flow_api.create_worksheet_rpt(
+ p_id=>wwv_flow_api.id(16440462414039910)
+,p_application_user=>'APXWS_ALTERNATIVE'
+,p_name=>'PayGo'
+,p_report_seq=>10
+,p_report_alias=>'164405'
+,p_status=>'PUBLIC'
+,p_is_default=>'Y'
+,p_report_columns=>'SKU:PRODUCT:CURRENCY:COST_PRICE:RATE_PAYGO:PCT_PAYGO:RATE_DESCRIPTION:RATE_UPDATE_DATE:'
+);
+wwv_flow_api.create_worksheet_rpt(
+ p_id=>wwv_flow_api.id(16440945673042259)
+,p_application_user=>'APXWS_ALTERNATIVE'
+,p_name=>'Monthly Flex'
+,p_report_seq=>10
+,p_report_alias=>'164410'
+,p_status=>'PUBLIC'
+,p_is_default=>'Y'
+,p_report_columns=>'SKU:PRODUCT:CURRENCY:COST_PRICE:PCT_MONTH:RATE_MONTHLY:RATE_DESCRIPTION:RATE_UPDATE_DATE:'
+);
+wwv_flow_api.create_page_item(
+ p_id=>wwv_flow_api.id(16372411599522248)
+,p_name=>'P7_TENANT_NAME'
+,p_item_sequence=>10
+,p_item_plug_id=>wwv_flow_api.id(72369311697812384)
+,p_prompt=>'Tenant Name'
+,p_display_as=>'NATIVE_SELECT_LIST'
+,p_lov=>'select distinct tenant_name o, tenant_name r from oci_cost order by 1'
+,p_lov_display_null=>'YES'
+,p_lov_null_text=>'Please Choose...'
+,p_cHeight=>1
+,p_colspan=>2
+,p_field_template=>wwv_flow_api.id(9820028477688087)
+,p_item_template_options=>'#DEFAULT#'
+,p_lov_display_extra=>'NO'
+,p_attribute_01=>'SUBMIT'
+,p_attribute_03=>'Y'
+);
+wwv_flow_api.create_page_computation(
+ p_id=>wwv_flow_api.id(16378387657522263)
+,p_computation_sequence=>10
+,p_computation_item=>'P7_TENANT_NAME'
+,p_computation_point=>'AFTER_HEADER'
+,p_computation_type=>'QUERY'
+,p_computation=>'select tenant_name from oci_cost where rownum=1'
+,p_compute_when=>'P7_TENANT_NAME'
+,p_compute_when_type=>'ITEM_IS_NULL'
+);
+wwv_flow_api.create_page_da_event(
+ p_id=>wwv_flow_api.id(16378604995522264)
+,p_name=>'ShowGraphsOrNot'
+,p_event_sequence=>10
+,p_triggering_element_type=>'ITEM'
+,p_triggering_element=>'P7_ROWS'
+,p_condition_element=>'P7_ROWS'
+,p_triggering_condition_type=>'GREATER_THAN'
+,p_triggering_expression=>'0'
+,p_bind_type=>'bind'
+,p_bind_event_type=>'change'
+);
+wwv_flow_api.create_page_da_action(
+ p_id=>wwv_flow_api.id(16379183002522265)
+,p_event_id=>wwv_flow_api.id(16378604995522264)
+,p_event_result=>'TRUE'
+,p_action_sequence=>10
+,p_execute_on_page_init=>'Y'
+,p_action=>'NATIVE_SHOW'
+,p_affected_elements_type=>'REGION'
+,p_affected_region_id=>wwv_flow_api.id(83161602120160340)
+);
+wwv_flow_api.create_page_da_action(
+ p_id=>wwv_flow_api.id(16379612138522266)
+,p_event_id=>wwv_flow_api.id(16378604995522264)
+,p_event_result=>'FALSE'
+,p_action_sequence=>20
+,p_execute_on_page_init=>'Y'
+,p_action=>'NATIVE_HIDE'
+,p_affected_elements_type=>'REGION'
+,p_affected_region_id=>wwv_flow_api.id(83161602120160340)
+);
+end;
+/
prompt --application/pages/page_09999
begin
wwv_flow_api.create_page(
diff --git a/examples/usage_reports_to_adw/img/screen_8.png b/examples/usage_reports_to_adw/img/screen_8.png
new file mode 100644
index 0000000000..e690c51029
Binary files /dev/null and b/examples/usage_reports_to_adw/img/screen_8.png differ
diff --git a/examples/usage_reports_to_adw/readme.md b/examples/usage_reports_to_adw/readme.md
index 528f3b603c..213f275662 100644
--- a/examples/usage_reports_to_adw/readme.md
+++ b/examples/usage_reports_to_adw/readme.md
@@ -8,12 +8,22 @@ Authentication to OCI by User or instance principals.
** DISCLAIMER – This is not an official Oracle application **
+## Main Features
+- Usage Current State
+- Usage Over Time
+- Cost Analysis
+- Cost Over Time
+- Rate Card for Used Products
+
## Cost Reports




+## Rate Card
+
+
## Usage Reports


@@ -47,6 +57,7 @@ Please check step by step guide - [step_by_step_installation.md](step_by_step_in
- OCI_COST_STATS - Summary Stats of the Cost Report for quick query if only filtered by tenant and date
- OCI_COST_TAG_KEYS - Tag keys of the cost reports
- OCI_COST_REFERENCE - Reference table of the cost filter keys - SERVICE, REGION, COMPARTMENT, PRODUCT, SUBSCRIPTION
+- OCI_PRICE_LIST - Hold the price list and the cost per product
## OCI APIs Used:
- IdentityClient.list_compartments - Policy COMPARTMENT_INSPECT
@@ -54,6 +65,9 @@ Please check step by step guide - [step_by_step_installation.md](step_by_step_in
- ObjectStorageClient.list_objects - Policy OBJECT_INSPECT
- ObjectStorageClient.get_object - Policy OBJECT_READ
+## REST API Used:
+- https://itra.oraclecloud.com/itas/.anon/myservices/api/v1/products?partNumber=XX
+
## Python 3 OCI SDK
### Installation of Python 3 incase you don't have Python3 installed:
@@ -62,6 +76,9 @@ Please follow Python Documentation - https://docs.python.org/3/using/index.html
### install oci SDK Packages:
Please follow Oracle Python SDK Documentation - https://github.com/oracle/oci-python-sdk
+### install requests package:
+pip install requests or pip3 install requests
+
## Setup connectivity using Instance Principals
```
diff --git a/examples/usage_reports_to_adw/step_by_step_installation.md b/examples/usage_reports_to_adw/step_by_step_installation.md
index 1a9c518e20..6e865a7d1c 100644
--- a/examples/usage_reports_to_adw/step_by_step_installation.md
+++ b/examples/usage_reports_to_adw/step_by_step_installation.md
@@ -98,7 +98,7 @@ Oracle Application Express (APEX) will be used for reporting.
```
sudo yum install -y python3
- sudo pip3 install oci oci-cli cx_Oracle
+ sudo pip3 install oci oci-cli cx_Oracle requests
# test instance principle is working using oci-cli
oci os ns get --auth instance_principal
@@ -264,7 +264,7 @@ Oracle Application Express (APEX) will be used for reporting.
## 16. Import APEX application
-Download [usage.demo.apex.sql](apex_demo_app/usage.demo.apex.sql) from github "apex_demo_app" folder
+Right Click and Download [usage.demo.apex.sql](https://raw.githubusercontent.com/oracle/oci-python-sdk/master/examples/usage_reports_to_adw/apex_demo_app/usage.demo.apex.sql) from github "apex_demo_app" folder (raw)
```
APEX Top Menu -> App Builder -> Import
diff --git a/examples/usage_reports_to_adw/usage2adw.py b/examples/usage_reports_to_adw/usage2adw.py
index 747c4d9a3f..ff9720f692 100644
--- a/examples/usage_reports_to_adw/usage2adw.py
+++ b/examples/usage_reports_to_adw/usage2adw.py
@@ -44,6 +44,9 @@
# - ObjectStorageClient.list_objects - Policy OBJECT_INSPECT
# - ObjectStorageClient.get_object - Policy OBJECT_READ
#
+# Meter API for Public Rate:
+# - https://itra.oraclecloud.com/itas/.anon/myservices/api/v1/products?partNumber=XX
+#
##########################################################################
# Tables used:
# - OCI_USAGE - Raw data of the usage reports
@@ -53,6 +56,7 @@
# - OCI_COST_STATS - Summary Stats of the Cost Report for quick query if only filtered by tenant and date
# - OCI_COST_TAG_KEYS - Tag keys of the cost reports
# - OCI_COST_REFERENCE - Reference table of the cost filter keys - SERVICE, REGION, COMPARTMENT, PRODUCT, SUBSCRIPTION
+# - OCI_PRICE_LIST - Hold the price list and the cost per product
##########################################################################
import sys
import argparse
@@ -62,8 +66,10 @@
import os
import csv
import cx_Oracle
+import requests
+
-version = "20.05.11"
+version = "20.05.18"
usage_report_namespace = "bling"
work_report_dir = os.curdir + "/work_report_dir"
@@ -435,6 +441,58 @@ def update_cost_stats(connection):
raise Exception("\nError manipulating database at update_cost_stats() - " + str(e))
+##########################################################################
+# update_price_list
+##########################################################################
+def update_price_list(connection):
+ try:
+ # open cursor
+ cursor = connection.cursor()
+
+ print("\nMerging statistics into OCI_PRICE_LIST...")
+
+ # run merge to oci_update_stats
+ sql = "MERGE INTO OCI_PRICE_LIST A "
+ sql += "USING "
+ sql += "( "
+ sql += " SELECT "
+ sql += " TENANT_NAME, "
+ sql += " COST_PRODUCT_SKU, "
+ sql += " PRD_DESCRIPTION, "
+ sql += " COST_CURRENCY_CODE, "
+ sql += " COST_UNIT_PRICE "
+ sql += " FROM "
+ sql += " ( "
+ sql += " SELECT "
+ sql += " TENANT_NAME, "
+ sql += " COST_PRODUCT_SKU, "
+ sql += " PRD_DESCRIPTION, "
+ sql += " COST_CURRENCY_CODE, "
+ sql += " COST_UNIT_PRICE, "
+ sql += " ROW_NUMBER() OVER (PARTITION BY TENANT_NAME, COST_PRODUCT_SKU ORDER BY USAGE_INTERVAL_START DESC, COST_UNIT_PRICE DESC) RN "
+ sql += " FROM OCI_COST A "
+ sql += " ) "
+ sql += " WHERE RN = 1 "
+ sql += " ORDER BY 1,2 "
+ sql += ") B "
+ sql += "ON (A.TENANT_NAME = B.TENANT_NAME AND A.COST_PRODUCT_SKU = B.COST_PRODUCT_SKU) "
+ sql += "WHEN MATCHED THEN UPDATE SET A.PRD_DESCRIPTION=B.PRD_DESCRIPTION, A.COST_CURRENCY_CODE=B.COST_CURRENCY_CODE, A.COST_UNIT_PRICE=B.COST_UNIT_PRICE, COST_LAST_UPDATE = SYSDATE "
+ sql += "WHEN NOT MATCHED THEN INSERT (TENANT_NAME,COST_PRODUCT_SKU,PRD_DESCRIPTION,COST_CURRENCY_CODE,COST_UNIT_PRICE,COST_LAST_UPDATE) "
+ sql += " VALUES (B.TENANT_NAME,B.COST_PRODUCT_SKU,B.PRD_DESCRIPTION,B.COST_CURRENCY_CODE,B.COST_UNIT_PRICE,SYSDATE)"
+
+ cursor.execute(sql)
+ connection.commit()
+ print(" Merge Completed, " + str(cursor.rowcount) + " rows merged")
+ cursor.close()
+
+ except cx_Oracle.DatabaseError as e:
+ print("\nError manipulating database at update_price_list() - " + str(e) + "\n")
+ raise SystemExit
+
+ except Exception as e:
+ raise Exception("\nError manipulating database at update_price_list() - " + str(e))
+
+
##########################################################################
# update_cost_reference
##########################################################################
@@ -486,6 +544,83 @@ def update_cost_reference(connection):
raise Exception("\nError manipulating database at update_cost_reference() - " + str(e))
+##########################################################################
+# update_public_rates
+##########################################################################
+def update_public_rates(connection, tenant_name):
+ try:
+ # open cursor
+ num_rows = 0
+ cursor = connection.cursor()
+ api_url = "https://itra.oraclecloud.com/itas/.anon/myservices/api/v1/products?partNumber="
+
+ print("\nMerging Public Rates into OCI_RATE_CARD...")
+
+ # retrieve the SKUS to query
+ sql = "select COST_PRODUCT_SKU, COST_CURRENCY_CODE from OCI_PRICE_LIST where tenant_name=:tenant_name"
+
+ cursor.execute(sql, {"tenant_name": tenant_name})
+ rows = cursor.fetchall()
+
+ if rows:
+ for row in rows:
+
+ rate_description = ""
+ rate_paygo_price = None
+ rate_monthly_flex_price = None
+
+ # Call API to fetch the data
+ cost_produdt_sku = str(row[0])
+ country_code = str(row[1])
+ resp = requests.get(api_url + cost_produdt_sku, headers={'X-Oracle-Accept-CurrencyCode': country_code})
+
+ if not resp:
+ continue
+
+ for item in resp.json()['items']:
+ rate_description = item["displayName"]
+ for price in item['prices']:
+ if price['model'] == 'PAY_AS_YOU_GO':
+ rate_paygo_price = price['value']
+ elif price['model'] == 'MONTHLY_COMMIT':
+ rate_monthly_flex_price = price['value']
+
+ # update database
+ sql = "update OCI_PRICE_LIST set "
+ sql += "RATE_DESCRIPTION=:rate_description, "
+ sql += "RATE_PAYGO_PRICE=:rate_paygo, "
+ sql += "RATE_MONTHLY_FLEX_PRICE=:rate_monthly, "
+ sql += "RATE_UPDATE_DATE=sysdate "
+ sql += "where TENANT_NAME=:tenant_name and COST_PRODUCT_SKU=:cost_produdt_sku "
+
+ sql_variables = {
+ "rate_description": rate_description,
+ "rate_paygo": rate_paygo_price,
+ "rate_monthly": rate_monthly_flex_price,
+ "tenant_name": tenant_name,
+ "cost_produdt_sku": cost_produdt_sku
+ }
+
+ cursor.execute(sql, sql_variables)
+ num_rows += 1
+
+ # Commit
+ connection.commit()
+
+ print(" Update Completed, " + str(num_rows) + " rows updated.")
+ cursor.close()
+
+ except cx_Oracle.DatabaseError as e:
+ print("\nError manipulating database at update_public_rates() - " + str(e) + "\n")
+ raise SystemExit
+
+ except requests.exceptions.ConnectionError as e:
+ print("\nError connecting to billing metering API at update_public_rates() - " + str(e))
+
+ except Exception as e:
+ raise Exception("\nError manipulating database at update_public_rates() - " + str(e))
+
+
##########################################################################
# update_usage_stats
##########################################################################
@@ -667,6 +802,52 @@ def check_database_table_structure_cost(connection):
raise Exception("\nError manipulating database at check_database_table_structure_cost() - " + str(e))
+##########################################################################
+# Check Table Structure Price List
+##########################################################################
+def check_database_table_structure_price_list(connection, tenant_name):
+ try:
+ # open cursor
+ cursor = connection.cursor()
+
+ # check if OCI_PRICE_LIST table exist, if not create
+ sql = "select count(*) from user_tables where table_name = 'OCI_PRICE_LIST'"
+ cursor.execute(sql)
+ val, = cursor.fetchone()
+
+ # if table not exist, create it
+ if val == 0:
+ print(" Table OCI_PRICE_LIST was not exist, creating")
+ sql = "create table OCI_PRICE_LIST ("
+ sql += " TENANT_NAME VARCHAR2(100),"
+ sql += " COST_PRODUCT_SKU VARCHAR2(10),"
+ sql += " PRD_DESCRIPTION VARCHAR2(1000),"
+ sql += " COST_CURRENCY_CODE VARCHAR2(10),"
+ sql += " COST_UNIT_PRICE NUMBER,"
+ sql += " COST_LAST_UPDATE DATE,"
+ sql += " RATE_DESCRIPTION VARCHAR2(1000),"
+ sql += " RATE_PAYGO_PRICE NUMBER,"
+ sql += " RATE_MONTHLY_FLEX_PRICE NUMBER,"
+ sql += " RATE_UPDATE_DATE DATE,"
+ sql += " CONSTRAINT OCI_PRICE_LIST_PK PRIMARY KEY (TENANT_NAME,COST_PRODUCT_SKU) "
+ sql += ") "
+ cursor.execute(sql)
+ print(" Table OCI_PRICE_LIST created")
+ update_price_list(connection)
+ update_public_rates(connection, tenant_name)
+ else:
+ print(" Table OCI_PRICE_LIST exist")
+
+ cursor.close()
+
+ except cx_Oracle.DatabaseError as e:
+ print("\nError manipulating database at check_database_table_price_list() - " + str(e) + "\n")
+ raise SystemExit
+
+ except Exception as e:
+ raise Exception("\nError manipulating database at check_database_table_price_list() - " + str(e))
+
+
#########################################################################
# Load Cost File
##########################################################################
@@ -789,6 +970,26 @@ def load_cost_file(connection, object_storage, object_file, max_file_id, cmd, te
product_Description = "Oracle Security Monitoring and Compliance Edition"
cost_billingUnitReadable = "100 Entities Per Hour"
+ elif cost_productSku == "B88269" and product_Description == "":
+ product_Description = "Compute Classic"
+ cost_billingUnitReadable = "OCPU Per Hour "
+
+ elif cost_productSku == "B88269" and product_Description == "":
+ product_Description = "Compute Classic"
+ cost_billingUnitReadable = "OCPU Per Hour"
+
+ elif cost_productSku == "B88275" and product_Description == "":
+ product_Description = "Block Storage Classic - High I/O"
+ cost_billingUnitReadable = "Gigabyte Storage Per Month"
+
+ elif cost_productSku == "B88283" and product_Description == "":
+ product_Description = "Object Storage Classic - GET and all other Requests"
+ cost_billingUnitReadable = "10,000 Requests Per Month"
+
+ elif cost_productSku == "B88284" and product_Description == "":
+ product_Description = "Object Storage Classic - PUT, COPY, POST or LIST Requests"
+ cost_billingUnitReadable = "10,000 Requests Per Month"
+
# create array
row_data = (
str(tenancy.name),
@@ -1132,6 +1333,7 @@ def main_process():
print("\nChecking Database Structure...")
check_database_table_structure_usage(connection)
check_database_table_structure_cost(connection)
+ check_database_table_structure_price_list(connection, tenancy.name)
###############################
# fetch max file id processed
@@ -1198,6 +1400,8 @@ def main_process():
if cost_num > 0:
update_cost_stats(connection)
update_cost_reference(connection)
+ update_price_list(connection)
+ update_public_rates(connection, tenancy.name)
# Close Connection
connection.close()
diff --git a/src/oci/apigateway/models/__init__.py b/src/oci/apigateway/models/__init__.py
index de29013c7b..58bc976d45 100644
--- a/src/oci/apigateway/models/__init__.py
+++ b/src/oci/apigateway/models/__init__.py
@@ -30,9 +30,17 @@
from .gateway_summary import GatewaySummary
from .http_backend import HTTPBackend
from .header_field_specification import HeaderFieldSpecification
+from .json_web_key import JsonWebKey
+from .json_web_token_claim import JsonWebTokenClaim
+from .jwt_authentication_policy import JwtAuthenticationPolicy
from .oracle_function_backend import OracleFunctionBackend
+from .pem_encoded_public_key import PemEncodedPublicKey
+from .public_key_set import PublicKeySet
from .rate_limiting_policy import RateLimitingPolicy
+from .remote_json_web_key_set import RemoteJsonWebKeySet
from .route_authorization_policy import RouteAuthorizationPolicy
+from .static_public_key import StaticPublicKey
+from .static_public_key_set import StaticPublicKeySet
from .stock_response_backend import StockResponseBackend
from .update_deployment_details import UpdateDeploymentDetails
from .update_gateway_details import UpdateGatewayDetails
@@ -73,9 +81,17 @@
"GatewaySummary": GatewaySummary,
"HTTPBackend": HTTPBackend,
"HeaderFieldSpecification": HeaderFieldSpecification,
+ "JsonWebKey": JsonWebKey,
+ "JsonWebTokenClaim": JsonWebTokenClaim,
+ "JwtAuthenticationPolicy": JwtAuthenticationPolicy,
"OracleFunctionBackend": OracleFunctionBackend,
+ "PemEncodedPublicKey": PemEncodedPublicKey,
+ "PublicKeySet": PublicKeySet,
"RateLimitingPolicy": RateLimitingPolicy,
+ "RemoteJsonWebKeySet": RemoteJsonWebKeySet,
"RouteAuthorizationPolicy": RouteAuthorizationPolicy,
+ "StaticPublicKey": StaticPublicKey,
+ "StaticPublicKeySet": StaticPublicKeySet,
"StockResponseBackend": StockResponseBackend,
"UpdateDeploymentDetails": UpdateDeploymentDetails,
"UpdateGatewayDetails": UpdateGatewayDetails,
diff --git a/src/oci/apigateway/models/authentication_policy.py b/src/oci/apigateway/models/authentication_policy.py
index 549092af46..9ce179ac30 100644
--- a/src/oci/apigateway/models/authentication_policy.py
+++ b/src/oci/apigateway/models/authentication_policy.py
@@ -17,11 +17,16 @@ class AuthenticationPolicy(object):
#: This constant has a value of "CUSTOM_AUTHENTICATION"
TYPE_CUSTOM_AUTHENTICATION = "CUSTOM_AUTHENTICATION"
+ #: A constant which can be used with the type property of a AuthenticationPolicy.
+ #: This constant has a value of "JWT_AUTHENTICATION"
+ TYPE_JWT_AUTHENTICATION = "JWT_AUTHENTICATION"
+
def __init__(self, **kwargs):
"""
Initializes a new AuthenticationPolicy object with values from keyword arguments. This class has the following subclasses and if you are using this class as input
to a service operations then you should favor using a subclass over the base class:
+ * :class:`~oci.apigateway.models.JwtAuthenticationPolicy`
* :class:`~oci.apigateway.models.CustomAuthenticationPolicy`
The following keyword arguments are supported (corresponding to the getters/setters of this class):
@@ -32,7 +37,7 @@ def __init__(self, **kwargs):
:param type:
The value to assign to the type property of this AuthenticationPolicy.
- Allowed values for this property are: "CUSTOM_AUTHENTICATION", 'UNKNOWN_ENUM_VALUE'.
+ Allowed values for this property are: "CUSTOM_AUTHENTICATION", "JWT_AUTHENTICATION", 'UNKNOWN_ENUM_VALUE'.
Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
:type type: str
@@ -58,6 +63,9 @@ def get_subtype(object_dictionary):
"""
type = object_dictionary['type']
+ if type == 'JWT_AUTHENTICATION':
+ return 'JwtAuthenticationPolicy'
+
if type == 'CUSTOM_AUTHENTICATION':
return 'CustomAuthenticationPolicy'
else:
@@ -95,7 +103,7 @@ def type(self):
**[Required]** Gets the type of this AuthenticationPolicy.
Type of the authentication policy to use.
- Allowed values for this property are: "CUSTOM_AUTHENTICATION", 'UNKNOWN_ENUM_VALUE'.
+ Allowed values for this property are: "CUSTOM_AUTHENTICATION", "JWT_AUTHENTICATION", 'UNKNOWN_ENUM_VALUE'.
Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
@@ -114,7 +122,7 @@ def type(self, type):
:param type: The type of this AuthenticationPolicy.
:type: str
"""
- allowed_values = ["CUSTOM_AUTHENTICATION"]
+ allowed_values = ["CUSTOM_AUTHENTICATION", "JWT_AUTHENTICATION"]
if not value_allowed_none_or_none_sentinel(type, allowed_values):
type = 'UNKNOWN_ENUM_VALUE'
self._type = type
diff --git a/src/oci/apigateway/models/custom_authentication_policy.py b/src/oci/apigateway/models/custom_authentication_policy.py
index fd013319a1..71a3f080b6 100644
--- a/src/oci/apigateway/models/custom_authentication_policy.py
+++ b/src/oci/apigateway/models/custom_authentication_policy.py
@@ -26,7 +26,7 @@ def __init__(self, **kwargs):
:param type:
The value to assign to the type property of this CustomAuthenticationPolicy.
- Allowed values for this property are: "CUSTOM_AUTHENTICATION"
+ Allowed values for this property are: "CUSTOM_AUTHENTICATION", "JWT_AUTHENTICATION"
:type type: str
:param function_id:
diff --git a/src/oci/apigateway/models/json_web_key.py b/src/oci/apigateway/models/json_web_key.py
new file mode 100644
index 0000000000..4818aef936
--- /dev/null
+++ b/src/oci/apigateway/models/json_web_key.py
@@ -0,0 +1,283 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+from .static_public_key import StaticPublicKey
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class JsonWebKey(StaticPublicKey):
+ """
+ A JSON Web Key that represents the public key used for verifying the JWT signature.
+ """
+
+ #: A constant which can be used with the kty property of a JsonWebKey.
+ #: This constant has a value of "RSA"
+ KTY_RSA = "RSA"
+
+ #: A constant which can be used with the use property of a JsonWebKey.
+ #: This constant has a value of "sig"
+ USE_SIG = "sig"
+
+ #: A constant which can be used with the key_ops property of a JsonWebKey.
+ #: This constant has a value of "verify"
+ KEY_OPS_VERIFY = "verify"
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new JsonWebKey object with values from keyword arguments. The default value of the :py:attr:`~oci.apigateway.models.JsonWebKey.format` attribute
+ of this class is ``JSON_WEB_KEY`` and it should not be changed.
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param kid:
+ The value to assign to the kid property of this JsonWebKey.
+ :type kid: str
+
+ :param format:
+ The value to assign to the format property of this JsonWebKey.
+ Allowed values for this property are: "JSON_WEB_KEY", "PEM", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+ :type format: str
+
+ :param kty:
+ The value to assign to the kty property of this JsonWebKey.
+ Allowed values for this property are: "RSA", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+ :type kty: str
+
+ :param use:
+ The value to assign to the use property of this JsonWebKey.
+ Allowed values for this property are: "sig", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+ :type use: str
+
+ :param key_ops:
+ The value to assign to the key_ops property of this JsonWebKey.
+ Allowed values for items in this list are: "verify", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+ :type key_ops: list[str]
+
+ :param alg:
+ The value to assign to the alg property of this JsonWebKey.
+ :type alg: str
+
+ :param n:
+ The value to assign to the n property of this JsonWebKey.
+ :type n: str
+
+ :param e:
+ The value to assign to the e property of this JsonWebKey.
+ :type e: str
+
+ """
+ self.swagger_types = {
+ 'kid': 'str',
+ 'format': 'str',
+ 'kty': 'str',
+ 'use': 'str',
+ 'key_ops': 'list[str]',
+ 'alg': 'str',
+ 'n': 'str',
+ 'e': 'str'
+ }
+
+ self.attribute_map = {
+ 'kid': 'kid',
+ 'format': 'format',
+ 'kty': 'kty',
+ 'use': 'use',
+ 'key_ops': 'key_ops',
+ 'alg': 'alg',
+ 'n': 'n',
+ 'e': 'e'
+ }
+
+ self._kid = None
+ self._format = None
+ self._kty = None
+ self._use = None
+ self._key_ops = None
+ self._alg = None
+ self._n = None
+ self._e = None
+ self._format = 'JSON_WEB_KEY'
+
+ @property
+ def kty(self):
+ """
+ **[Required]** Gets the kty of this JsonWebKey.
+ The key type.
+
+ Allowed values for this property are: "RSA", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+
+
+ :return: The kty of this JsonWebKey.
+ :rtype: str
+ """
+ return self._kty
+
+ @kty.setter
+ def kty(self, kty):
+ """
+ Sets the kty of this JsonWebKey.
+ The key type.
+
+
+ :param kty: The kty of this JsonWebKey.
+ :type: str
+ """
+ allowed_values = ["RSA"]
+ if not value_allowed_none_or_none_sentinel(kty, allowed_values):
+ kty = 'UNKNOWN_ENUM_VALUE'
+ self._kty = kty
+
+ @property
+ def use(self):
+ """
+ Gets the use of this JsonWebKey.
+ The intended use of the public key.
+
+ Allowed values for this property are: "sig", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+
+
+ :return: The use of this JsonWebKey.
+ :rtype: str
+ """
+ return self._use
+
+ @use.setter
+ def use(self, use):
+ """
+ Sets the use of this JsonWebKey.
+ The intended use of the public key.
+
+
+ :param use: The use of this JsonWebKey.
+ :type: str
+ """
+ allowed_values = ["sig"]
+ if not value_allowed_none_or_none_sentinel(use, allowed_values):
+ use = 'UNKNOWN_ENUM_VALUE'
+ self._use = use
+
+ @property
+ def key_ops(self):
+ """
+ Gets the key_ops of this JsonWebKey.
+ The operations for which this key is to be used.
+
+ Allowed values for items in this list are: "verify", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+
+
+ :return: The key_ops of this JsonWebKey.
+ :rtype: list[str]
+ """
+ return self._key_ops
+
+ @key_ops.setter
+ def key_ops(self, key_ops):
+ """
+ Sets the key_ops of this JsonWebKey.
+ The operations for which this key is to be used.
+
+
+ :param key_ops: The key_ops of this JsonWebKey.
+ :type: list[str]
+ """
+ allowed_values = ["verify"]
+ if key_ops:
+ key_ops[:] = ['UNKNOWN_ENUM_VALUE' if not value_allowed_none_or_none_sentinel(x, allowed_values) else x for x in key_ops]
+ self._key_ops = key_ops
+
+ @property
+ def alg(self):
+ """
+ **[Required]** Gets the alg of this JsonWebKey.
+ The algorithm intended for use with this key.
+
+
+ :return: The alg of this JsonWebKey.
+ :rtype: str
+ """
+ return self._alg
+
+ @alg.setter
+ def alg(self, alg):
+ """
+ Sets the alg of this JsonWebKey.
+ The algorithm intended for use with this key.
+
+
+ :param alg: The alg of this JsonWebKey.
+ :type: str
+ """
+ self._alg = alg
+
+ @property
+ def n(self):
+ """
+ **[Required]** Gets the n of this JsonWebKey.
+ The base64 url encoded modulus of the RSA public key represented
+ by this key.
+
+
+ :return: The n of this JsonWebKey.
+ :rtype: str
+ """
+ return self._n
+
+ @n.setter
+ def n(self, n):
+ """
+ Sets the n of this JsonWebKey.
+ The base64 url encoded modulus of the RSA public key represented
+ by this key.
+
+
+ :param n: The n of this JsonWebKey.
+ :type: str
+ """
+ self._n = n
+
+ @property
+ def e(self):
+ """
+ **[Required]** Gets the e of this JsonWebKey.
+ The base64 url encoded exponent of the RSA public key represented
+ by this key.
+
+
+ :return: The e of this JsonWebKey.
+ :rtype: str
+ """
+ return self._e
+
+ @e.setter
+ def e(self, e):
+ """
+ Sets the e of this JsonWebKey.
+ The base64 url encoded exponent of the RSA public key represented
+ by this key.
+
+
+ :param e: The e of this JsonWebKey.
+ :type: str
+ """
+ self._e = e
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/apigateway/models/json_web_token_claim.py b/src/oci/apigateway/models/json_web_token_claim.py
new file mode 100644
index 0000000000..219bd224a5
--- /dev/null
+++ b/src/oci/apigateway/models/json_web_token_claim.py
@@ -0,0 +1,140 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class JsonWebTokenClaim(object):
+ """
+ An individual JWT claim.
+ """
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new JsonWebTokenClaim object with values from keyword arguments.
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param key:
+ The value to assign to the key property of this JsonWebTokenClaim.
+ :type key: str
+
+ :param values:
+ The value to assign to the values property of this JsonWebTokenClaim.
+ :type values: list[str]
+
+ :param is_required:
+ The value to assign to the is_required property of this JsonWebTokenClaim.
+ :type is_required: bool
+
+ """
+ self.swagger_types = {
+ 'key': 'str',
+ 'values': 'list[str]',
+ 'is_required': 'bool'
+ }
+
+ self.attribute_map = {
+ 'key': 'key',
+ 'values': 'values',
+ 'is_required': 'isRequired'
+ }
+
+ self._key = None
+ self._values = None
+ self._is_required = None
+
+ @property
+ def key(self):
+ """
+ **[Required]** Gets the key of this JsonWebTokenClaim.
+ Name of the claim.
+
+
+ :return: The key of this JsonWebTokenClaim.
+ :rtype: str
+ """
+ return self._key
+
+ @key.setter
+ def key(self, key):
+ """
+ Sets the key of this JsonWebTokenClaim.
+ Name of the claim.
+
+
+ :param key: The key of this JsonWebTokenClaim.
+ :type: str
+ """
+ self._key = key
+
+ @property
+ def values(self):
+ """
+ Gets the values of this JsonWebTokenClaim.
+ The list of acceptable values for a given claim.
+ If this value is \"null\" or empty and \"isRequired\" set to \"true\", then
+ the presence of this claim in the JWT is validated.
+
+
+ :return: The values of this JsonWebTokenClaim.
+ :rtype: list[str]
+ """
+ return self._values
+
+ @values.setter
+ def values(self, values):
+ """
+ Sets the values of this JsonWebTokenClaim.
+ The list of acceptable values for a given claim.
+ If this value is \"null\" or empty and \"isRequired\" set to \"true\", then
+ the presence of this claim in the JWT is validated.
+
+
+ :param values: The values of this JsonWebTokenClaim.
+ :type: list[str]
+ """
+ self._values = values
+
+ @property
+ def is_required(self):
+ """
+ Gets the is_required of this JsonWebTokenClaim.
+ Whether the claim is required to be present in the JWT or not. If set
+ to \"false\", the claim values will be matched only if the claim is
+ present in the JWT.
+
+
+ :return: The is_required of this JsonWebTokenClaim.
+ :rtype: bool
+ """
+ return self._is_required
+
+ @is_required.setter
+ def is_required(self, is_required):
+ """
+ Sets the is_required of this JsonWebTokenClaim.
+ Whether the claim is required to be present in the JWT or not. If set
+ to \"false\", the claim values will be matched only if the claim is
+ present in the JWT.
+
+
+ :param is_required: The is_required of this JsonWebTokenClaim.
+ :type: bool
+ """
+ self._is_required = is_required
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/apigateway/models/jwt_authentication_policy.py b/src/oci/apigateway/models/jwt_authentication_policy.py
new file mode 100644
index 0000000000..2a5e77da48
--- /dev/null
+++ b/src/oci/apigateway/models/jwt_authentication_policy.py
@@ -0,0 +1,305 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+from .authentication_policy import AuthenticationPolicy
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class JwtAuthenticationPolicy(AuthenticationPolicy):
+ """
+ Validate a JWT token present in the header or query parameter. A valid
+ policy must specify either tokenHeader or tokenQueryParam.
+ """
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new JwtAuthenticationPolicy object with values from keyword arguments. The default value of the :py:attr:`~oci.apigateway.models.JwtAuthenticationPolicy.type` attribute
+ of this class is ``JWT_AUTHENTICATION`` and it should not be changed.
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param is_anonymous_access_allowed:
+ The value to assign to the is_anonymous_access_allowed property of this JwtAuthenticationPolicy.
+ :type is_anonymous_access_allowed: bool
+
+ :param type:
+ The value to assign to the type property of this JwtAuthenticationPolicy.
+ Allowed values for this property are: "CUSTOM_AUTHENTICATION", "JWT_AUTHENTICATION"
+ :type type: str
+
+ :param token_header:
+ The value to assign to the token_header property of this JwtAuthenticationPolicy.
+ :type token_header: str
+
+ :param token_query_param:
+ The value to assign to the token_query_param property of this JwtAuthenticationPolicy.
+ :type token_query_param: str
+
+ :param token_auth_scheme:
+ The value to assign to the token_auth_scheme property of this JwtAuthenticationPolicy.
+ :type token_auth_scheme: str
+
+ :param issuers:
+ The value to assign to the issuers property of this JwtAuthenticationPolicy.
+ :type issuers: list[str]
+
+ :param audiences:
+ The value to assign to the audiences property of this JwtAuthenticationPolicy.
+ :type audiences: list[str]
+
+ :param verify_claims:
+ The value to assign to the verify_claims property of this JwtAuthenticationPolicy.
+ :type verify_claims: list[JsonWebTokenClaim]
+
+ :param max_clock_skew_in_seconds:
+ The value to assign to the max_clock_skew_in_seconds property of this JwtAuthenticationPolicy.
+ :type max_clock_skew_in_seconds: float
+
+ :param public_keys:
+ The value to assign to the public_keys property of this JwtAuthenticationPolicy.
+ :type public_keys: PublicKeySet
+
+ """
+ self.swagger_types = {
+ 'is_anonymous_access_allowed': 'bool',
+ 'type': 'str',
+ 'token_header': 'str',
+ 'token_query_param': 'str',
+ 'token_auth_scheme': 'str',
+ 'issuers': 'list[str]',
+ 'audiences': 'list[str]',
+ 'verify_claims': 'list[JsonWebTokenClaim]',
+ 'max_clock_skew_in_seconds': 'float',
+ 'public_keys': 'PublicKeySet'
+ }
+
+ self.attribute_map = {
+ 'is_anonymous_access_allowed': 'isAnonymousAccessAllowed',
+ 'type': 'type',
+ 'token_header': 'tokenHeader',
+ 'token_query_param': 'tokenQueryParam',
+ 'token_auth_scheme': 'tokenAuthScheme',
+ 'issuers': 'issuers',
+ 'audiences': 'audiences',
+ 'verify_claims': 'verifyClaims',
+ 'max_clock_skew_in_seconds': 'maxClockSkewInSeconds',
+ 'public_keys': 'publicKeys'
+ }
+
+ self._is_anonymous_access_allowed = None
+ self._type = None
+ self._token_header = None
+ self._token_query_param = None
+ self._token_auth_scheme = None
+ self._issuers = None
+ self._audiences = None
+ self._verify_claims = None
+ self._max_clock_skew_in_seconds = None
+ self._public_keys = None
+ self._type = 'JWT_AUTHENTICATION'
+
+ @property
+ def token_header(self):
+ """
+ Gets the token_header of this JwtAuthenticationPolicy.
+ The name of the header containing the authentication token.
+
+
+ :return: The token_header of this JwtAuthenticationPolicy.
+ :rtype: str
+ """
+ return self._token_header
+
+ @token_header.setter
+ def token_header(self, token_header):
+ """
+ Sets the token_header of this JwtAuthenticationPolicy.
+ The name of the header containing the authentication token.
+
+
+ :param token_header: The token_header of this JwtAuthenticationPolicy.
+ :type: str
+ """
+ self._token_header = token_header
+
+ @property
+ def token_query_param(self):
+ """
+ Gets the token_query_param of this JwtAuthenticationPolicy.
+ The name of the query parameter containing the authentication token.
+
+
+ :return: The token_query_param of this JwtAuthenticationPolicy.
+ :rtype: str
+ """
+ return self._token_query_param
+
+ @token_query_param.setter
+ def token_query_param(self, token_query_param):
+ """
+ Sets the token_query_param of this JwtAuthenticationPolicy.
+ The name of the query parameter containing the authentication token.
+
+
+ :param token_query_param: The token_query_param of this JwtAuthenticationPolicy.
+ :type: str
+ """
+ self._token_query_param = token_query_param
+
+ @property
+ def token_auth_scheme(self):
+ """
+ Gets the token_auth_scheme of this JwtAuthenticationPolicy.
+ The authentication scheme that is to be used when authenticating
+ the token. This must to be provided if \"tokenHeader\" is specified.
+
+
+ :return: The token_auth_scheme of this JwtAuthenticationPolicy.
+ :rtype: str
+ """
+ return self._token_auth_scheme
+
+ @token_auth_scheme.setter
+ def token_auth_scheme(self, token_auth_scheme):
+ """
+ Sets the token_auth_scheme of this JwtAuthenticationPolicy.
+ The authentication scheme that is to be used when authenticating
+ the token. This must to be provided if \"tokenHeader\" is specified.
+
+
+ :param token_auth_scheme: The token_auth_scheme of this JwtAuthenticationPolicy.
+ :type: str
+ """
+ self._token_auth_scheme = token_auth_scheme
+
+ @property
+ def issuers(self):
+ """
+ **[Required]** Gets the issuers of this JwtAuthenticationPolicy.
+ A list of parties that could have issued the token.
+
+
+ :return: The issuers of this JwtAuthenticationPolicy.
+ :rtype: list[str]
+ """
+ return self._issuers
+
+ @issuers.setter
+ def issuers(self, issuers):
+ """
+ Sets the issuers of this JwtAuthenticationPolicy.
+ A list of parties that could have issued the token.
+
+
+ :param issuers: The issuers of this JwtAuthenticationPolicy.
+ :type: list[str]
+ """
+ self._issuers = issuers
+
+ @property
+ def audiences(self):
+ """
+ **[Required]** Gets the audiences of this JwtAuthenticationPolicy.
+ The list of intended recipients for the token.
+
+
+ :return: The audiences of this JwtAuthenticationPolicy.
+ :rtype: list[str]
+ """
+ return self._audiences
+
+ @audiences.setter
+ def audiences(self, audiences):
+ """
+ Sets the audiences of this JwtAuthenticationPolicy.
+ The list of intended recipients for the token.
+
+
+ :param audiences: The audiences of this JwtAuthenticationPolicy.
+ :type: list[str]
+ """
+ self._audiences = audiences
+
+ @property
+ def verify_claims(self):
+ """
+ Gets the verify_claims of this JwtAuthenticationPolicy.
+ A list of claims which should be validated to consider the token valid.
+
+
+ :return: The verify_claims of this JwtAuthenticationPolicy.
+ :rtype: list[JsonWebTokenClaim]
+ """
+ return self._verify_claims
+
+ @verify_claims.setter
+ def verify_claims(self, verify_claims):
+ """
+ Sets the verify_claims of this JwtAuthenticationPolicy.
+ A list of claims which should be validated to consider the token valid.
+
+
+ :param verify_claims: The verify_claims of this JwtAuthenticationPolicy.
+ :type: list[JsonWebTokenClaim]
+ """
+ self._verify_claims = verify_claims
+
+ @property
+ def max_clock_skew_in_seconds(self):
+ """
+ Gets the max_clock_skew_in_seconds of this JwtAuthenticationPolicy.
+ The maximum expected time difference between the system clocks
+ of the token issuer and the API Gateway.
+
+
+ :return: The max_clock_skew_in_seconds of this JwtAuthenticationPolicy.
+ :rtype: float
+ """
+ return self._max_clock_skew_in_seconds
+
+ @max_clock_skew_in_seconds.setter
+ def max_clock_skew_in_seconds(self, max_clock_skew_in_seconds):
+ """
+ Sets the max_clock_skew_in_seconds of this JwtAuthenticationPolicy.
+ The maximum expected time difference between the system clocks
+ of the token issuer and the API Gateway.
+
+
+ :param max_clock_skew_in_seconds: The max_clock_skew_in_seconds of this JwtAuthenticationPolicy.
+ :type: float
+ """
+ self._max_clock_skew_in_seconds = max_clock_skew_in_seconds
+
+ @property
+ def public_keys(self):
+ """
+ **[Required]** Gets the public_keys of this JwtAuthenticationPolicy.
+
+ :return: The public_keys of this JwtAuthenticationPolicy.
+ :rtype: PublicKeySet
+ """
+ return self._public_keys
+
+ @public_keys.setter
+ def public_keys(self, public_keys):
+ """
+ Sets the public_keys of this JwtAuthenticationPolicy.
+
+ :param public_keys: The public_keys of this JwtAuthenticationPolicy.
+ :type: PublicKeySet
+ """
+ self._public_keys = public_keys
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/apigateway/models/pem_encoded_public_key.py b/src/oci/apigateway/models/pem_encoded_public_key.py
new file mode 100644
index 0000000000..7db6c41710
--- /dev/null
+++ b/src/oci/apigateway/models/pem_encoded_public_key.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+from .static_public_key import StaticPublicKey
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class PemEncodedPublicKey(StaticPublicKey):
+ """
+ A PEM-encoded public key used for verifying the JWT signature.
+ """
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new PemEncodedPublicKey object with values from keyword arguments. The default value of the :py:attr:`~oci.apigateway.models.PemEncodedPublicKey.format` attribute
+ of this class is ``PEM`` and it should not be changed.
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param kid:
+ The value to assign to the kid property of this PemEncodedPublicKey.
+ :type kid: str
+
+ :param format:
+ The value to assign to the format property of this PemEncodedPublicKey.
+ Allowed values for this property are: "JSON_WEB_KEY", "PEM"
+ :type format: str
+
+ :param key:
+ The value to assign to the key property of this PemEncodedPublicKey.
+ :type key: str
+
+ """
+ self.swagger_types = {
+ 'kid': 'str',
+ 'format': 'str',
+ 'key': 'str'
+ }
+
+ self.attribute_map = {
+ 'kid': 'kid',
+ 'format': 'format',
+ 'key': 'key'
+ }
+
+ self._kid = None
+ self._format = None
+ self._key = None
+ self._format = 'PEM'
+
+ @property
+ def key(self):
+ """
+ **[Required]** Gets the key of this PemEncodedPublicKey.
+ The content of the PEM-encoded public key.
+
+
+ :return: The key of this PemEncodedPublicKey.
+ :rtype: str
+ """
+ return self._key
+
+ @key.setter
+ def key(self, key):
+ """
+ Sets the key of this PemEncodedPublicKey.
+ The content of the PEM-encoded public key.
+
+
+ :param key: The key of this PemEncodedPublicKey.
+ :type: str
+ """
+ self._key = key
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/apigateway/models/public_key_set.py b/src/oci/apigateway/models/public_key_set.py
new file mode 100644
index 0000000000..30b15d3271
--- /dev/null
+++ b/src/oci/apigateway/models/public_key_set.py
@@ -0,0 +1,107 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class PublicKeySet(object):
+ """
+ A set of Public Keys that will be used to verify the JWT signature.
+ """
+
+ #: A constant which can be used with the type property of a PublicKeySet.
+ #: This constant has a value of "STATIC_KEYS"
+ TYPE_STATIC_KEYS = "STATIC_KEYS"
+
+ #: A constant which can be used with the type property of a PublicKeySet.
+ #: This constant has a value of "REMOTE_JWKS"
+ TYPE_REMOTE_JWKS = "REMOTE_JWKS"
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new PublicKeySet object with values from keyword arguments. This class has the following subclasses and if you are using this class as input
+ to a service operations then you should favor using a subclass over the base class:
+
+ * :class:`~oci.apigateway.models.StaticPublicKeySet`
+ * :class:`~oci.apigateway.models.RemoteJsonWebKeySet`
+
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param type:
+ The value to assign to the type property of this PublicKeySet.
+ Allowed values for this property are: "STATIC_KEYS", "REMOTE_JWKS", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+ :type type: str
+
+ """
+ self.swagger_types = {
+ 'type': 'str'
+ }
+
+ self.attribute_map = {
+ 'type': 'type'
+ }
+
+ self._type = None
+
+ @staticmethod
+ def get_subtype(object_dictionary):
+ """
+ Given the hash representation of a subtype of this class,
+ use the info in the hash to return the class of the subtype.
+ """
+ type = object_dictionary['type']
+
+ if type == 'STATIC_KEYS':
+ return 'StaticPublicKeySet'
+
+ if type == 'REMOTE_JWKS':
+ return 'RemoteJsonWebKeySet'
+ else:
+ return 'PublicKeySet'
+
+ @property
+ def type(self):
+ """
+ **[Required]** Gets the type of this PublicKeySet.
+ Type of the public key set.
+
+ Allowed values for this property are: "STATIC_KEYS", "REMOTE_JWKS", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+
+
+ :return: The type of this PublicKeySet.
+ :rtype: str
+ """
+ return self._type
+
+ @type.setter
+ def type(self, type):
+ """
+ Sets the type of this PublicKeySet.
+ Type of the public key set.
+
+
+ :param type: The type of this PublicKeySet.
+ :type: str
+ """
+ allowed_values = ["STATIC_KEYS", "REMOTE_JWKS"]
+ if not value_allowed_none_or_none_sentinel(type, allowed_values):
+ type = 'UNKNOWN_ENUM_VALUE'
+ self._type = type
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/apigateway/models/remote_json_web_key_set.py b/src/oci/apigateway/models/remote_json_web_key_set.py
new file mode 100644
index 0000000000..bdc83b9b7b
--- /dev/null
+++ b/src/oci/apigateway/models/remote_json_web_key_set.py
@@ -0,0 +1,148 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+from .public_key_set import PublicKeySet
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class RemoteJsonWebKeySet(PublicKeySet):
+ """
+ A set of public keys that is retrieved at run-time from a remote location
+ to verify the JWT signature. The set should only contain JWK-formatted
+ keys.
+ """
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new RemoteJsonWebKeySet object with values from keyword arguments. The default value of the :py:attr:`~oci.apigateway.models.RemoteJsonWebKeySet.type` attribute
+ of this class is ``REMOTE_JWKS`` and it should not be changed.
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param type:
+ The value to assign to the type property of this RemoteJsonWebKeySet.
+ Allowed values for this property are: "STATIC_KEYS", "REMOTE_JWKS"
+ :type type: str
+
+ :param uri:
+ The value to assign to the uri property of this RemoteJsonWebKeySet.
+ :type uri: str
+
+ :param is_ssl_verify_disabled:
+ The value to assign to the is_ssl_verify_disabled property of this RemoteJsonWebKeySet.
+ :type is_ssl_verify_disabled: bool
+
+ :param max_cache_duration_in_hours:
+ The value to assign to the max_cache_duration_in_hours property of this RemoteJsonWebKeySet.
+ :type max_cache_duration_in_hours: int
+
+ """
+ self.swagger_types = {
+ 'type': 'str',
+ 'uri': 'str',
+ 'is_ssl_verify_disabled': 'bool',
+ 'max_cache_duration_in_hours': 'int'
+ }
+
+ self.attribute_map = {
+ 'type': 'type',
+ 'uri': 'uri',
+ 'is_ssl_verify_disabled': 'isSslVerifyDisabled',
+ 'max_cache_duration_in_hours': 'maxCacheDurationInHours'
+ }
+
+ self._type = None
+ self._uri = None
+ self._is_ssl_verify_disabled = None
+ self._max_cache_duration_in_hours = None
+ self._type = 'REMOTE_JWKS'
+
+ @property
+ def uri(self):
+ """
+ **[Required]** Gets the uri of this RemoteJsonWebKeySet.
+ The uri from which to retrieve the key. It must be accessible
+ without authentication.
+
+
+ :return: The uri of this RemoteJsonWebKeySet.
+ :rtype: str
+ """
+ return self._uri
+
+ @uri.setter
+ def uri(self, uri):
+ """
+ Sets the uri of this RemoteJsonWebKeySet.
+ The uri from which to retrieve the key. It must be accessible
+ without authentication.
+
+
+ :param uri: The uri of this RemoteJsonWebKeySet.
+ :type: str
+ """
+ self._uri = uri
+
+ @property
+ def is_ssl_verify_disabled(self):
+ """
+ Gets the is_ssl_verify_disabled of this RemoteJsonWebKeySet.
+ Defines whether or not to uphold SSL verification.
+
+
+ :return: The is_ssl_verify_disabled of this RemoteJsonWebKeySet.
+ :rtype: bool
+ """
+ return self._is_ssl_verify_disabled
+
+ @is_ssl_verify_disabled.setter
+ def is_ssl_verify_disabled(self, is_ssl_verify_disabled):
+ """
+ Sets the is_ssl_verify_disabled of this RemoteJsonWebKeySet.
+ Defines whether or not to uphold SSL verification.
+
+
+ :param is_ssl_verify_disabled: The is_ssl_verify_disabled of this RemoteJsonWebKeySet.
+ :type: bool
+ """
+ self._is_ssl_verify_disabled = is_ssl_verify_disabled
+
+ @property
+ def max_cache_duration_in_hours(self):
+ """
+ Gets the max_cache_duration_in_hours of this RemoteJsonWebKeySet.
+ The duration for which the JWKS should be cached before it is
+ fetched again.
+
+
+ :return: The max_cache_duration_in_hours of this RemoteJsonWebKeySet.
+ :rtype: int
+ """
+ return self._max_cache_duration_in_hours
+
+ @max_cache_duration_in_hours.setter
+ def max_cache_duration_in_hours(self, max_cache_duration_in_hours):
+ """
+ Sets the max_cache_duration_in_hours of this RemoteJsonWebKeySet.
+ The duration for which the JWKS should be cached before it is
+ fetched again.
+
+
+ :param max_cache_duration_in_hours: The max_cache_duration_in_hours of this RemoteJsonWebKeySet.
+ :type: int
+ """
+ self._max_cache_duration_in_hours = max_cache_duration_in_hours
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/apigateway/models/static_public_key.py b/src/oci/apigateway/models/static_public_key.py
new file mode 100644
index 0000000000..ac583af01b
--- /dev/null
+++ b/src/oci/apigateway/models/static_public_key.py
@@ -0,0 +1,140 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class StaticPublicKey(object):
+ """
+ A static public key which is used to verify the JWT signature.
+ """
+
+ #: A constant which can be used with the format property of a StaticPublicKey.
+ #: This constant has a value of "JSON_WEB_KEY"
+ FORMAT_JSON_WEB_KEY = "JSON_WEB_KEY"
+
+ #: A constant which can be used with the format property of a StaticPublicKey.
+ #: This constant has a value of "PEM"
+ FORMAT_PEM = "PEM"
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new StaticPublicKey object with values from keyword arguments. This class has the following subclasses and if you are using this class as input
+ to a service operations then you should favor using a subclass over the base class:
+
+ * :class:`~oci.apigateway.models.JsonWebKey`
+ * :class:`~oci.apigateway.models.PemEncodedPublicKey`
+
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param kid:
+ The value to assign to the kid property of this StaticPublicKey.
+ :type kid: str
+
+ :param format:
+ The value to assign to the format property of this StaticPublicKey.
+ Allowed values for this property are: "JSON_WEB_KEY", "PEM", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+ :type format: str
+
+ """
+ self.swagger_types = {
+ 'kid': 'str',
+ 'format': 'str'
+ }
+
+ self.attribute_map = {
+ 'kid': 'kid',
+ 'format': 'format'
+ }
+
+ self._kid = None
+ self._format = None
+
+ @staticmethod
+ def get_subtype(object_dictionary):
+ """
+ Given the hash representation of a subtype of this class,
+ use the info in the hash to return the class of the subtype.
+ """
+ type = object_dictionary['format']
+
+ if type == 'JSON_WEB_KEY':
+ return 'JsonWebKey'
+
+ if type == 'PEM':
+ return 'PemEncodedPublicKey'
+ else:
+ return 'StaticPublicKey'
+
+ @property
+ def kid(self):
+ """
+ **[Required]** Gets the kid of this StaticPublicKey.
+ A unique key ID. This key will be used to verify the signature of a
+ JWT with matching \"kid\".
+
+
+ :return: The kid of this StaticPublicKey.
+ :rtype: str
+ """
+ return self._kid
+
+ @kid.setter
+ def kid(self, kid):
+ """
+ Sets the kid of this StaticPublicKey.
+ A unique key ID. This key will be used to verify the signature of a
+ JWT with matching \"kid\".
+
+
+ :param kid: The kid of this StaticPublicKey.
+ :type: str
+ """
+ self._kid = kid
+
+ @property
+ def format(self):
+ """
+ **[Required]** Gets the format of this StaticPublicKey.
+ The format of the public key.
+
+ Allowed values for this property are: "JSON_WEB_KEY", "PEM", 'UNKNOWN_ENUM_VALUE'.
+ Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
+
+
+ :return: The format of this StaticPublicKey.
+ :rtype: str
+ """
+ return self._format
+
+ @format.setter
+ def format(self, format):
+ """
+ Sets the format of this StaticPublicKey.
+ The format of the public key.
+
+
+ :param format: The format of this StaticPublicKey.
+ :type: str
+ """
+ allowed_values = ["JSON_WEB_KEY", "PEM"]
+ if not value_allowed_none_or_none_sentinel(format, allowed_values):
+ format = 'UNKNOWN_ENUM_VALUE'
+ self._format = format
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/apigateway/models/static_public_key_set.py b/src/oci/apigateway/models/static_public_key_set.py
new file mode 100644
index 0000000000..338643c252
--- /dev/null
+++ b/src/oci/apigateway/models/static_public_key_set.py
@@ -0,0 +1,80 @@
+# coding: utf-8
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
+
+from .public_key_set import PublicKeySet
+from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel # noqa: F401
+from oci.decorators import init_model_state_from_kwargs
+
+
+@init_model_state_from_kwargs
+class StaticPublicKeySet(PublicKeySet):
+ """
+ A set of static public keys that will be used to verify the JWT signature.
+ """
+
+ def __init__(self, **kwargs):
+ """
+ Initializes a new StaticPublicKeySet object with values from keyword arguments. The default value of the :py:attr:`~oci.apigateway.models.StaticPublicKeySet.type` attribute
+ of this class is ``STATIC_KEYS`` and it should not be changed.
+ The following keyword arguments are supported (corresponding to the getters/setters of this class):
+
+ :param type:
+ The value to assign to the type property of this StaticPublicKeySet.
+ Allowed values for this property are: "STATIC_KEYS", "REMOTE_JWKS"
+ :type type: str
+
+ :param keys:
+ The value to assign to the keys property of this StaticPublicKeySet.
+ :type keys: list[StaticPublicKey]
+
+ """
+ self.swagger_types = {
+ 'type': 'str',
+ 'keys': 'list[StaticPublicKey]'
+ }
+
+ self.attribute_map = {
+ 'type': 'type',
+ 'keys': 'keys'
+ }
+
+ self._type = None
+ self._keys = None
+ self._type = 'STATIC_KEYS'
+
+ @property
+ def keys(self):
+ """
+ Gets the keys of this StaticPublicKeySet.
+ The set of static public keys.
+
+
+ :return: The keys of this StaticPublicKeySet.
+ :rtype: list[StaticPublicKey]
+ """
+ return self._keys
+
+ @keys.setter
+ def keys(self, keys):
+ """
+ Sets the keys of this StaticPublicKeySet.
+ The set of static public keys.
+
+
+ :param keys: The keys of this StaticPublicKeySet.
+ :type: list[StaticPublicKey]
+ """
+ self._keys = keys
+
+ def __repr__(self):
+ return formatted_flat_dict(self)
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self == other
diff --git a/src/oci/database/models/autonomous_database.py b/src/oci/database/models/autonomous_database.py
index 90350a7e08..db305fb5f5 100644
--- a/src/oci/database/models/autonomous_database.py
+++ b/src/oci/database/models/autonomous_database.py
@@ -230,6 +230,10 @@ def __init__(self, **kwargs):
The value to assign to the private_endpoint_label property of this AutonomousDatabase.
:type private_endpoint_label: str
+ :param private_endpoint_ip:
+ The value to assign to the private_endpoint_ip property of this AutonomousDatabase.
+ :type private_endpoint_ip: str
+
:param db_version:
The value to assign to the db_version property of this AutonomousDatabase.
:type db_version: str
@@ -298,6 +302,7 @@ def __init__(self, **kwargs):
'nsg_ids': 'list[str]',
'private_endpoint': 'str',
'private_endpoint_label': 'str',
+ 'private_endpoint_ip': 'str',
'db_version': 'str',
'is_preview': 'bool',
'db_workload': 'str',
@@ -336,6 +341,7 @@ def __init__(self, **kwargs):
'nsg_ids': 'nsgIds',
'private_endpoint': 'privateEndpoint',
'private_endpoint_label': 'privateEndpointLabel',
+ 'private_endpoint_ip': 'privateEndpointIp',
'db_version': 'dbVersion',
'is_preview': 'isPreview',
'db_workload': 'dbWorkload',
@@ -373,6 +379,7 @@ def __init__(self, **kwargs):
self._nsg_ids = None
self._private_endpoint = None
self._private_endpoint_label = None
+ self._private_endpoint_ip = None
self._db_version = None
self._is_preview = None
self._db_workload = None
@@ -1093,6 +1100,30 @@ def private_endpoint_label(self, private_endpoint_label):
"""
self._private_endpoint_label = private_endpoint_label
+ @property
+ def private_endpoint_ip(self):
+ """
+ Gets the private_endpoint_ip of this AutonomousDatabase.
+ The private endpoint Ip address for the resource.
+
+
+ :return: The private_endpoint_ip of this AutonomousDatabase.
+ :rtype: str
+ """
+ return self._private_endpoint_ip
+
+ @private_endpoint_ip.setter
+ def private_endpoint_ip(self, private_endpoint_ip):
+ """
+ Sets the private_endpoint_ip of this AutonomousDatabase.
+ The private endpoint Ip address for the resource.
+
+
+ :param private_endpoint_ip: The private_endpoint_ip of this AutonomousDatabase.
+ :type: str
+ """
+ self._private_endpoint_ip = private_endpoint_ip
+
@property
def db_version(self):
"""
diff --git a/src/oci/database/models/autonomous_database_summary.py b/src/oci/database/models/autonomous_database_summary.py
index ff5ebfe98f..01ad43aebc 100644
--- a/src/oci/database/models/autonomous_database_summary.py
+++ b/src/oci/database/models/autonomous_database_summary.py
@@ -232,6 +232,10 @@ def __init__(self, **kwargs):
The value to assign to the private_endpoint_label property of this AutonomousDatabaseSummary.
:type private_endpoint_label: str
+ :param private_endpoint_ip:
+ The value to assign to the private_endpoint_ip property of this AutonomousDatabaseSummary.
+ :type private_endpoint_ip: str
+
:param db_version:
The value to assign to the db_version property of this AutonomousDatabaseSummary.
:type db_version: str
@@ -300,6 +304,7 @@ def __init__(self, **kwargs):
'nsg_ids': 'list[str]',
'private_endpoint': 'str',
'private_endpoint_label': 'str',
+ 'private_endpoint_ip': 'str',
'db_version': 'str',
'is_preview': 'bool',
'db_workload': 'str',
@@ -338,6 +343,7 @@ def __init__(self, **kwargs):
'nsg_ids': 'nsgIds',
'private_endpoint': 'privateEndpoint',
'private_endpoint_label': 'privateEndpointLabel',
+ 'private_endpoint_ip': 'privateEndpointIp',
'db_version': 'dbVersion',
'is_preview': 'isPreview',
'db_workload': 'dbWorkload',
@@ -375,6 +381,7 @@ def __init__(self, **kwargs):
self._nsg_ids = None
self._private_endpoint = None
self._private_endpoint_label = None
+ self._private_endpoint_ip = None
self._db_version = None
self._is_preview = None
self._db_workload = None
@@ -1095,6 +1102,30 @@ def private_endpoint_label(self, private_endpoint_label):
"""
self._private_endpoint_label = private_endpoint_label
+ @property
+ def private_endpoint_ip(self):
+ """
+ Gets the private_endpoint_ip of this AutonomousDatabaseSummary.
+ The private endpoint Ip address for the resource.
+
+
+ :return: The private_endpoint_ip of this AutonomousDatabaseSummary.
+ :rtype: str
+ """
+ return self._private_endpoint_ip
+
+ @private_endpoint_ip.setter
+ def private_endpoint_ip(self, private_endpoint_ip):
+ """
+ Sets the private_endpoint_ip of this AutonomousDatabaseSummary.
+ The private endpoint Ip address for the resource.
+
+
+ :param private_endpoint_ip: The private_endpoint_ip of this AutonomousDatabaseSummary.
+ :type: str
+ """
+ self._private_endpoint_ip = private_endpoint_ip
+
@property
def db_version(self):
"""
diff --git a/src/oci/regions.py b/src/oci/regions.py
index 700128ae4e..7dbd93b347 100644
--- a/src/oci/regions.py
+++ b/src/oci/regions.py
@@ -6,9 +6,14 @@
import os
import json
import logging
+from enum import Enum
from . import service_endpoints
from oci._vendor import six
+from oci._vendor import requests
+from oci._vendor.requests.exceptions import HTTPError, ConnectionError, RetryError
+from oci._vendor.requests.adapters import HTTPAdapter
+from oci._vendor.urllib3.util.retry import Retry
REGIONS_SHORT_NAMES = {
'phx': 'us-phoenix-1',
@@ -101,11 +106,30 @@
REGION_KEY_PROPERTY_NAME = "regionKey"
REGION_IDENTIFIER_PROPERTY_NAME = "regionIdentifier"
+# Region Metadata schema
REGION_METADATA_KEYS = (REALM_KEY_PROPERTY_NAME,
REALM_DOMAIN_COMPONENT_PROPERTY_NAME,
REGION_KEY_PROPERTY_NAME,
REGION_IDENTIFIER_PROPERTY_NAME)
+# Constants for getting region info from IMDS
+METADATA_URL_BASE = 'http://169.254.169.254/opc/v2'
+GET_REGION_URL = '{}/instance/regionInfo'.format(METADATA_URL_BASE)
+METADATA_AUTH_HEADERS = {'Authorization': 'Bearer Oracle'}
+
+# Constants for regions config file
+REGIONS_CONFIG_FILE_PATH = os.path.join('~', '.oci', 'regions-config.json')
+
+# Enumerate region information sources outside of lookups
+ExternalSources = Enum('ExternalSources', ['REGIONS_CFG_FILE', 'ENV_VAR', 'IMDS'])
+
+# Dict to track if we have read the ExternalSources
+_has_been_read_external_sources = {
+ ExternalSources.REGIONS_CFG_FILE: False,
+ ExternalSources.ENV_VAR: False,
+ ExternalSources.IMDS: False
+}
+
logger = logging.getLogger(__name__)
@@ -139,7 +163,7 @@ def is_region_short_name(region):
def get_region_from_short_name(region):
region = region.lower()
if not is_region_short_name(region):
- logger.info("Could not find region information in lookups and any other sources")
+ logger.debug("Could not find region information in lookups and any other sources")
# Return the input string to allow fallback to OC1
return region
# Return region from lookup
@@ -152,7 +176,7 @@ def get_realm_from_region(region):
# get_region_from_short_name also adds metadata from other sources
region = get_region_from_short_name(region)
if not is_region(region):
- logger.info("Cannot find region information in lookups and other sources, defaulting to OC1 realm")
+ logger.debug("Cannot find region information in lookups and other sources, defaulting to OC1 realm")
return "oc1"
else:
return REGION_REALMS[region]
@@ -176,6 +200,14 @@ def endpoint_for(service, region=None, endpoint=None, service_endpoint_template=
"regionIdentifier" : string
}
+ For example, for the Sydney OC1 region, the schema would be filled out as follows:
+ {
+ "realmKey" : "OC1",
+ "realmDomainComponent" : "oraclecloud.com",
+ "regionKey" : "SYD",
+ "regionIdentifier" : "ap-sydney-1"
+ }
+
If the region still cannot be resolved, we fall back to OC1 realm
"""
if not (endpoint or region):
@@ -192,23 +224,82 @@ def endpoint_for(service, region=None, endpoint=None, service_endpoint_template=
return _endpoint_for(service, region, service_endpoint_template)
+def skip_instance_metadata_service():
+ _set_source_has_been_read(ExternalSources.IMDS)
+
+
+def _set_source_has_been_read(source):
+ _has_been_read_external_sources[source] = True
+
+
+def _get_source_has_been_read(source):
+ return _has_been_read_external_sources[source]
+
+
def _check_and_add_region_metadata(region):
- region = region.lower()
# Follow the hierarchy of sources
if _set_region_metadata_from_cfg_file(region):
+ logger.debug("Added metadata information for {} region from regions config file".format(region))
return True
elif _set_region_metadata_from_env_var(region):
+ logger.debug("Added metadata information for {} region from environment variable".format(region))
return True
elif _set_region_from_instance_metadata_service(region):
+ logger.debug("Added metadata information for {} region from IMDS".format(region))
return True
+ logger.debug("Unknown regionId '{}', will assume it's in Realm OC1".format(region))
return False
def _set_region_metadata_from_cfg_file(region):
+ # Check if region information from regions cfg file has already been read
+ if _get_source_has_been_read(ExternalSources.REGIONS_CFG_FILE):
+ # Return False to allow fallback
+ return False
+
+ # Set source as read
+ _set_source_has_been_read(ExternalSources.REGIONS_CFG_FILE)
+
+ expanded_file_location = os.path.expanduser(REGIONS_CONFIG_FILE_PATH)
+ if os.path.isfile(expanded_file_location):
+ logger.debug("Regions configuration file found")
+ try:
+ with open(expanded_file_location, 'r') as regions_config_file:
+ regions_metadata_raw = regions_config_file.read()
+ except (OSError, IOError) as e:
+ logger.debug("Reading regions configuration file failed because of error: {}".format(e))
+ return False
+
+ # Try importing JSONDecodeError for Python 2 and Python 3 compatibility
+ try:
+ from json.decoder import JSONDecodeError
+ except ImportError:
+ JSONDecodeError = ValueError
+ try:
+ regions_metadata_array = json.loads(regions_metadata_raw)
+ except JSONDecodeError as e:
+ # Unable to parse the json array
+ logger.debug("Decoding JSON array from regions configuration file failed because of error: {}".format(e))
+ return False
+
+ added = False
+ for region_metadata in regions_metadata_array:
+ if _check_valid_schema(region_metadata):
+ if _add_region_information_to_lookup(region_metadata, region):
+ added = True
+ return added
return False
def _set_region_metadata_from_env_var(region):
+ # Check if region information from env var has already been read
+ if _get_source_has_been_read(ExternalSources.ENV_VAR):
+ # Return False to allow fallback
+ return False
+
+ # Set source as read
+ _set_source_has_been_read(ExternalSources.ENV_VAR)
+
if os.environ.get(OCI_REGION_METADATA_ENV_VAR_NAME):
# Try importing JSONDecodeError for Python 2 and Python 3 compatibility
try:
@@ -219,17 +310,60 @@ def _set_region_metadata_from_env_var(region):
region_metadata = json.loads(os.environ.get(OCI_REGION_METADATA_ENV_VAR_NAME))
except JSONDecodeError as e:
# Unable to parse the env variable
- logger.debug("Decoding JSON failed because of error: {}".format(e))
+ logger.debug("Decoding JSON from environment variable failed because of error: {}".format(e))
return False
if _check_valid_schema(region_metadata):
- region_metadata = {k: v.lower() for k, v in six.iteritems(region_metadata)}
return _add_region_information_to_lookup(region_metadata, region)
return False
def _set_region_from_instance_metadata_service(region):
+ # Check if region information from IMDS has already been read
+ if _get_source_has_been_read(ExternalSources.IMDS):
+ # Return False to allow fallback
+ return False
+
+ # Set source as read
+ _set_source_has_been_read(ExternalSources.IMDS)
+
+ try:
+
+ retry_strategy = Retry(
+ total=3,
+ status_forcelist=[429, 500, 502, 503, 504],
+ read=0,
+ connect=3,
+ status=3
+ )
+ s = requests.Session()
+ s.mount(GET_REGION_URL, HTTPAdapter(max_retries=retry_strategy))
+ response = s.get(GET_REGION_URL, timeout=(10, 60), headers=METADATA_AUTH_HEADERS)
+ region_metadata_raw = response.text
+ logger.debug("Region metadata blob from IMDS is: {}".format(region_metadata_raw))
+ except (HTTPError, ConnectionError, RetryError) as e:
+ logger.debug("Failed to call IMDS service because of error: {}".format(e))
+ return False
+
+ if response.status_code != 200:
+ logger.debug("HTTP Get Failed: URL: {}, Status: {}, Message: {}".format(GET_REGION_URL, response.status_code, response.text))
+ return False
+
+ try:
+ from json.decoder import JSONDecodeError
+ except ImportError:
+ JSONDecodeError = ValueError
+ try:
+ region_metadata = json.loads(region_metadata_raw)
+ except JSONDecodeError as e:
+ # Unable to parse the raw response
+ logger.debug("Decoding JSON from IMDS service because of error: {}".format(e))
+ return False
+
+ if _check_valid_schema(region_metadata):
+ return _add_region_information_to_lookup(region_metadata, region)
+
return False
@@ -247,6 +381,7 @@ def _check_valid_schema(region_metadata):
def _add_region_information_to_lookup(region_metadata, region):
# Check if the region metadata has information about the requested region
# Add the region information from region_metadata to the existing lookups
+ region_metadata = {k: v.lower() for k, v in six.iteritems(region_metadata)}
if region_metadata[REGION_KEY_PROPERTY_NAME] not in REGIONS_SHORT_NAMES:
REGIONS_SHORT_NAMES[region_metadata[REGION_KEY_PROPERTY_NAME]] = region_metadata[REGION_IDENTIFIER_PROPERTY_NAME]
diff --git a/src/oci/version.py b/src/oci/version.py
index a691862644..eedb55d60c 100644
--- a/src/oci/version.py
+++ b/src/oci/version.py
@@ -2,4 +2,4 @@
# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
-__version__ = "2.14.2"
+__version__ = "2.14.3"