Rem drv: Rem Rem $Header: aggservice_ui_pkgbody.sql 06-jun-2007.04:02:49 denath Exp $ Rem Rem aggservice_pkgbody.sql Rem Rem Copyright (c) 2004, 2007, Oracle. All rights reserved. Rem Rem NAME Rem aggservice_pkgbody.sql - Rem Rem DESCRIPTION Rem Rem Rem NOTES Rem Rem Rem MODIFIED (MM/DD/YY) Rem denath 04/30/07 - Bug fix 6019788.Modified query in Rem GET_SERVICES_FOR_SYSTEM for perf. Rem denath 06/06/07 - Backport denath_bug-6019788 from main Rem mfidanbo 04/11/07 - add support for returning availability delay Rem andyao 11/06/06 - fix query for non promoted metrics Rem eporter 08/01/06 - Backport eporter_bug-5404472 from main Rem eporter 07/25/06 - Bug 5404472 Rem eporter 06/09/06 - Bug 5264151: Cannot see external alerts Rem eporter 07/19/06 - Backport Business functions Rem eporter 07/19/06 - Backport jpyang_bug-4871802 (needed by my code) Rem mfidanbo 07/07/06 - Backport mfidanbo_bug-4622522 from main Rem jpyang 11/27/05 - Backport jpyang_bug-4685891 from main Rem jpyang 11/01/05 - fix Rem jpyang 09/23/05 - timezone support in chart Rem jpyang 08/22/05 - fix notrans query for GET_METRICS_LIST Rem jpyang 07/08/05 - more type_meta_ver fix Rem jpyang 07/11/05 - use column_label for service charts Rem jpyang 06/30/05 - get_metrics_list performance Rem jpyang 06/29/05 - optimize get_metric_list Rem jpyang 06/22/05 - support timezone Rem mfidanbo 06/08/05 - fix api Rem mfidanbo 04/13/05 - return more information with alerts cursor Rem jpyang 03/29/05 - fix modify_aggservice Rem gan 03/18/05 - repo coll uses table metric Rem aholser 03/09/05 - allow operator setting for perf metrics Rem jpyang 03/04/05 - get_metrics_list -> add thresholds Rem jpyang 03/03/05 - handle create duplicate service Rem jpyang 02/22/05 - add test based Rem ramalhot 01/17/05 - g_member_guid->g_contains_guid Rem vagarwal 12/22/04 - return a single row cursor instead of empty Rem cursor for targets that do not have availability Rem vagarwal 12/15/04 - modify avail_all_assoc_targets for groups Rem jpyang 12/01/04 - fix edit sql Rem jpyang 11/23/04 - support nontrans for chart Rem jpyang 11/08/04 - perf/usage tab show/hide support Rem jpyang 10/21/04 - avail history hgrid Rem jpyang 10/15/04 - charts sql Rem jpyang 10/07/04 - homepage chart sql Rem vagarwal 10/03/04 - change proc name to get_services_for_system Rem vagarwal 09/30/04 - add proc to get svc for a system, Rem jpyang 09/29/04 - home pages Rem jpyang 09/20/04 - add timezone Rem jpyang 09/08/04 - support edit Rem jpyang 09/02/04 - jpyang_services_ui Rem jpyang 08/31/04 - Created Rem CREATE OR REPLACE PACKAGE BODY EM_AGGSVC_UI AS ---------------------PRIVATE PROCEDURES/FUNCTIONS --------------------------- -- return performance cursor CURSOR metric_cur (p_target_guid IN RAW, p_target_type IN VARCHAR2, p_metric_category IN VARCHAR2) IS SELECT met.metric_guid, met.metric_name, met.metric_column, '' as coll_name, th.warning_operator, th.warning_threshold, th.critical_operator, th.critical_threshold FROM ( SELECT m.metric_guid, m.metric_name, m.metric_column, t.target_guid FROM mgmt_targets t, mgmt_metrics m, mgmt_category_map map WHERE t.target_guid = hextoraw(p_target_guid) AND t.target_type = m.target_type AND t.type_meta_ver = m.type_meta_ver AND t.target_type = map.target_type AND t.type_meta_ver = map.type_meta_ver AND (t.category_prop_1 = m.category_prop_1 OR m.category_prop_1 = ' ') AND (t.category_prop_2 = m.category_prop_2 OR m.category_prop_2 = ' ') AND (t.category_prop_3 = m.category_prop_3 OR m.category_prop_3 = ' ') AND (t.category_prop_4 = m.category_prop_4 OR m.category_prop_4 = ' ') AND (t.category_prop_5 = m.category_prop_5 OR m.category_prop_5 = ' ') AND m.is_transposed = 0 AND m.metric_type not in (MGMT_GLOBAL.G_METRIC_TYPE_TABLE, MGMT_GLOBAL.G_METRIC_TYPE_REPOS_TABLE) AND map.object_guid = m.metric_guid AND map.object_type = MGMT_GLOBAL.G_TYPE_THRESHOLD_METRIC AND map.class_name = MGMT_GLOBAL.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_metric_category) met, mgmt_metric_thresholds th WHERE met.target_guid = th.target_guid (+) AND met.metric_guid = th.metric_guid (+) UNION ALL SELECT m.metric_guid, m.metric_name, m.metric_column, m.coll_name, th.warning_operator, th.warning_threshold, th.critical_operator, th.critical_threshold FROM mgmt_metric_thresholds th, (SELECT t.target_guid, cm.metric_name, cm.metric_column, cm.metric_guid, c.coll_name, cm.metric_label_nlsid, cm.column_label_nlsid FROM mgmt_metrics cm, mgmt_metrics tm, mgmt_category_map map, mgmt_metric_collections c, mgmt_targets t WHERE t.target_guid = hextoraw(p_target_guid) AND t.target_type = cm.target_type AND t.type_meta_ver = cm.type_meta_ver AND t.type_meta_ver = tm.type_meta_ver AND t.type_meta_ver = map.type_meta_ver AND (t.category_prop_1 = cm.category_prop_1 OR cm.category_prop_1 = ' ') AND (t.category_prop_2 = cm.category_prop_2 OR cm.category_prop_2 = ' ') AND (t.category_prop_3 = cm.category_prop_3 OR cm.category_prop_3 = ' ') AND (t.category_prop_4 = cm.category_prop_4 OR cm.category_prop_4 = ' ') AND (t.category_prop_5 = cm.category_prop_5 OR cm.category_prop_5 = ' ') AND cm.is_transposed = 1 AND cm.key_order = 0 AND cm.metric_column <> ' ' AND map.object_guid = cm.metric_guid AND map.object_type = MGMT_GLOBAL.G_TYPE_THRESHOLD_METRIC AND map.class_name = MGMT_GLOBAL.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_metric_category AND tm.metric_name = cm.metric_name AND tm.metric_column = ' ' AND c.target_guid = hextoraw(p_target_guid) AND c.metric_guid = tm.metric_guid) m WHERE m.target_guid = th.target_guid (+) AND m.metric_guid = th.metric_guid (+) AND m.coll_name = th.coll_name(+); CURSOR metric_cur_edit (p_target_guid IN RAW, p_target_type IN VARCHAR2, p_metric_category IN VARCHAR2) IS SELECT met.metric_guid, met.metric_name, met.metric_column, '' as coll_name, th.warning_operator, th.warning_threshold, th.critical_operator, th.critical_threshold, '' as eval_func FROM (SELECT m.metric_guid, m.metric_name, m.metric_column, t.target_guid FROM mgmt_targets t, mgmt_metrics m, mgmt_category_map map WHERE t.target_guid = p_target_guid AND t.target_type = m.target_type AND t.type_meta_ver = m.type_meta_ver AND (t.category_prop_1 = m.category_prop_1 OR m.category_prop_1 = ' ') AND (t.category_prop_2 = m.category_prop_2 OR m.category_prop_2 = ' ') AND (t.category_prop_3 = m.category_prop_3 OR m.category_prop_3 = ' ') AND (t.category_prop_4 = m.category_prop_4 OR m.category_prop_4 = ' ') AND (t.category_prop_5 = m.category_prop_5 OR m.category_prop_5 = ' ') AND m.is_transposed = 0 AND m.metric_type not in (mgmt_global.G_METRIC_TYPE_TABLE, mgmt_global.G_METRIC_TYPE_REPOS_TABLE) AND map.object_guid = m.metric_guid AND map.object_type = MGMT_GLOBAL.G_TYPE_THRESHOLD_METRIC AND map.class_name = MGMT_GLOBAL.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_metric_category) met, mgmt_metric_thresholds th WHERE met.target_guid = th.target_guid (+) AND met.metric_guid = th.metric_guid (+) UNION ALL SELECT m.metric_guid, m.metric_name, m.metric_column, d.key_value coll_name, th.warning_operator, th.warning_threshold, th.critical_operator, th.critical_threshold, d.eval_func as eval_func FROM mgmt_targets t, mgmt_category_map map, mgmt_metric_dependency d, mgmt_metric_thresholds th, mgmt_metrics m WHERE t.target_guid = p_target_guid AND t.target_type = m.target_type AND t.type_meta_ver = m.type_meta_ver AND (t.category_prop_1 = m.category_prop_1 OR m.category_prop_1 = ' ') AND (t.category_prop_2 = m.category_prop_2 OR m.category_prop_2 = ' ') AND (t.category_prop_3 = m.category_prop_3 OR m.category_prop_3 = ' ') AND (t.category_prop_4 = m.category_prop_4 OR m.category_prop_4 = ' ') AND (t.category_prop_5 = m.category_prop_5 OR m.category_prop_5 = ' ') AND m.is_transposed = 1 AND map.object_guid = m.metric_guid AND map.object_type = MGMT_GLOBAL.G_TYPE_THRESHOLD_METRIC AND map.class_name = MGMT_GLOBAL.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_metric_category AND d.target_guid = t.target_guid AND d.metric_guid = m.metric_guid AND d.target_guid = th.target_guid (+) AND d.metric_guid = th.metric_guid (+) AND d.key_value = th.coll_name (+); -- return dependencies metrics cursor CURSOR dep_metric_cur (p_key_value IN VARCHAR2, p_category_name IN VARCHAR2, p_target_guid IN RAW, p_metric_guid IN RAW) IS SELECT DISTINCT t.target_name, t.target_type, m.metric_name, m.metric_column, dep.dep_key_value FROM mgmt_metric_dependency_details dep, mgmt_metrics m, mgmt_targets t, mgmt_category_map map WHERE dep.dep_target_guid = t.target_guid AND dep.dep_metric_guid = m.metric_guid AND dep.key_value = p_key_value AND m.type_meta_ver = t.type_meta_ver AND dep.target_guid = p_target_guid AND dep.metric_guid = p_metric_guid AND (m.category_prop_1 = t.category_prop_1 OR m.category_prop_1 = ' ') AND (m.category_prop_2 = t.category_prop_2 OR m.category_prop_2 = ' ') AND (m.category_prop_3 = t.category_prop_3 OR m.category_prop_3 = ' ') AND (m.category_prop_4 = t.category_prop_4 OR m.category_prop_4 = ' ') AND (m.category_prop_5 = t.category_prop_5 OR m.category_prop_5 = ' ') AND map.object_guid = m.metric_guid AND map.object_type = MGMT_GLOBAL.G_TYPE_THRESHOLD_METRIC AND map.class_name = MGMT_GLOBAL.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_category_name; PROCEDURE MODIFY_AGGSERVICE_METRICS(p_aggsvc_name IN VARCHAR2, p_target_type IN VARCHAR2, p_metrics IN AGGSERVICE_METRIC_ARRAY, p_target_guid IN RAW, p_service_category IN VARCHAR2, p_metric_name IN VARCHAR2, p_value_col_name IN VARCHAR2) IS l_metrics AGGSERVICE_METRIC_ARRAY := AGGSERVICE_METRIC_ARRAY(); l_metric AGGSERVICE_METRIC; l_metric_names SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY(); l_metric_name VARCHAR2(256); l_thresholds MGMT_THRESHOLDS; BEGIN -- find collection to be modified SELECT AGGSERVICE_METRIC(p.metric_name, p.metric_column, p.coll_name, p.component_metrics, p.warning_threshold, p.critical_threshold, p.operator, p.show_in_home_page, p.eval_function) BULK COLLECT INTO l_metrics FROM TABLE(CAST(p_metrics AS AGGSERVICE_METRIC_ARRAY)) p WHERE p.coll_name IN (SELECT coll_name FROM mgmt_targets t, mgmt_metric_collections c, mgmt_category_map map WHERE t.target_guid = p_target_guid AND t.target_guid = c.target_guid AND t.type_meta_ver = map.type_meta_ver AND map.target_type = p_target_type AND map.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_service_category AND map.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND map.object_guid = c.metric_guid); if (emdw_log.p_is_debug_set) THEN emdw_log.debug('modify aggregate service : modified ' || p_service_category || ' metrics length : ' || l_metrics.COUNT, MODULE_NAME); end if; IF l_metrics IS NOT NULL AND l_metrics.COUNT > 0 THEN FOR i IN l_metrics.FIRST .. l_metrics.LAST LOOP l_metric := l_metrics(i); EM_REP_METRIC.modify_repo_metric_collection( MGMT_METRIC_INSTANCE.NEW( p_aggsvc_name, p_target_type, l_metric.metric_name, l_metric.metric_column, l_metric.coll_name), l_metric.eval_function, l_metric.component_metrics); IF (l_metric.show_in_home_page = 'true') THEN IF(p_metric_name = mgmt_service.G_USAGE_METRIC_NAME) THEN MGMT_SERVICE.set_homepage_usage_chart( p_aggsvc_name, p_target_type, l_metric.metric_name, l_metric.metric_column, l_metric.coll_name); ELSIF (p_metric_name = mgmt_service.G_PERFORMANCE_METRIC_NAME) THEN MGMT_SERVICE.set_homepage_perf_chart( p_aggsvc_name, p_target_type, l_metric.metric_name, l_metric.metric_column, l_metric.coll_name); END IF; END IF; set_thresholds(p_aggsvc_name, p_target_type, l_metric); END LOOP; END IF; -- find collection to be added SELECT AGGSERVICE_METRIC(p.metric_name, p.metric_column, p.coll_name, p.component_metrics, p.warning_threshold, p.critical_threshold, p.operator, p.show_in_home_page, p.eval_function) BULK COLLECT INTO l_metrics FROM TABLE(CAST(p_metrics AS AGGSERVICE_METRIC_ARRAY)) p WHERE p.coll_name NOT IN (SELECT coll_name FROM mgmt_targets t, mgmt_metric_collections c, mgmt_category_map map WHERE t.target_guid = p_target_guid AND t.target_guid = c.target_guid AND t.type_meta_ver = map.type_meta_ver AND map.target_type = p_target_type AND map.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_service_category AND map.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.metric_guid = map.object_guid); if (emdw_log.p_is_debug_set) THEN emdw_log.debug('modify aggregate service : new ' || p_service_category || ' metrics length : ' || l_metrics.COUNT, MODULE_NAME); end if; IF l_metrics IS NOT NULL AND l_metrics.COUNT > 0 THEN FOR i IN l_metrics.FIRST .. l_metrics.LAST LOOP l_metric := l_metrics(i); EM_REP_METRIC.add_repo_metric_collection( MGMT_METRIC_INSTANCE.NEW( p_aggsvc_name, p_target_type, p_metric_name, p_value_col_name, l_metric.coll_name), l_metric.eval_function, l_metric.component_metrics); IF (l_metric.show_in_home_page = 'true') THEN IF(p_metric_name = mgmt_service.G_USAGE_METRIC_NAME) THEN MGMT_SERVICE.set_homepage_usage_chart( p_aggsvc_name, p_target_type, p_metric_name, p_value_col_name, l_metric.coll_name); ELSIF (p_metric_name = mgmt_service.G_PERFORMANCE_METRIC_NAME) THEN MGMT_SERVICE.set_homepage_perf_chart( p_aggsvc_name, p_target_type, p_metric_name, p_value_col_name, l_metric.coll_name); END IF; END IF; set_thresholds(p_aggsvc_name, p_target_type, l_metric); END LOOP; END IF; -- find collection to be deleted -- find metrics (metric name, metric column) SELECT c.coll_name BULK COLLECT INTO l_metric_names FROM mgmt_metric_collections c, mgmt_targets t, mgmt_category_map map WHERE c.coll_name NOT IN (SELECT coll_name FROM TABLE(CAST(p_metrics AS AGGSERVICE_METRIC_ARRAY))) AND t.target_guid = p_target_guid AND c.target_guid = t.target_guid AND t.target_type = p_target_type AND t.type_meta_ver = t.type_meta_ver AND map.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_service_category AND map.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.metric_guid = map.object_guid; if (emdw_log.p_is_debug_set) THEN emdw_log.debug('modify aggregate service : deleted ' || p_service_category || ' metrics length : ' || l_metric_names.COUNT, MODULE_NAME); end if; IF l_metric_names IS NOT NULL AND l_metric_names.COUNT > 0 THEN FOR i IN l_metric_names.FIRST .. l_metric_names.LAST LOOP l_metric_name := l_metric_names(i); EM_REP_METRIC.delete_repo_metric_collection( MGMT_METRIC_INSTANCE.NEW( p_aggsvc_name, p_target_type, p_metric_name, p_value_col_name, l_metric_name)); -- delete threshold mgmt_monitoring.delete_target_metric_config( p_target_type, p_aggsvc_name, p_metric_name, p_value_col_name, l_metric_name); END LOOP; END IF; END MODIFY_AGGSERVICE_METRICS; ---------------------END PRIVATE PROCEDURES/FUNCTIONS-------------------------- PROCEDURE SAVE_AGGSERVICE(p_aggsvc_name IN VARCHAR2, p_target_type IN VARCHAR2, p_subservices IN SMP_EMD_NVPAIR_ARRAY, p_avail_eval_func IN VARCHAR2, p_timezone IN VARCHAR2, p_perfmetrics IN AGGSERVICE_METRIC_ARRAY, p_usagemetrics IN AGGSERVICE_METRIC_ARRAY, p_businessmetrics IN AGGSERVICE_METRIC_ARRAY, p_mode IN VARCHAR2) IS l_avail_eval_func VARCHAR(100); l_target_guid RAW(16); BEGIN IF p_mode = 'CREATE' THEN add_aggservice(p_aggsvc_name, p_target_type, p_subservices, p_avail_eval_func, p_timezone, p_perfmetrics, p_usagemetrics); if (emdw_log.p_is_debug_set) THEN emdw_log.debug('create aggregate service: ' || p_aggsvc_name, MODULE_NAME); end if; ELSE if (emdw_log.p_is_debug_set) THEN emdw_log.debug('edit aggregate service: ' || p_aggsvc_name, MODULE_NAME); end if; modify_aggservice(p_aggsvc_name, p_target_type, p_subservices, p_avail_eval_func, p_timezone, p_perfmetrics, p_usagemetrics, p_businessmetrics); END IF; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN RAISE mgmt_global.target_already_exists; END SAVE_AGGSERVICE; PROCEDURE ADD_AGGSERVICE(p_aggsvc_name IN VARCHAR2, p_target_type IN VARCHAR2, p_subservices IN SMP_EMD_NVPAIR_ARRAY, p_avail_eval_func IN VARCHAR2, p_timezone IN VARCHAR2, p_perfmetrics IN AGGSERVICE_METRIC_ARRAY, p_usagemetrics IN AGGSERVICE_METRIC_ARRAY) IS l_avail_eval_func VARCHAR(100); l_perf_metric AGGSERVICE_METRIC; l_perf_thresholds MGMT_THRESHOLDS; l_usage_metric AGGSERVICE_METRIC; l_usage_thresholds MGMT_THRESHOLDS; l_target_guid RAW(16); BEGIN -- TODO: include timezone IF p_timezone IS NOT NULL THEN MGMT_SERVICE.create_aggregate_service(p_aggsvc_name, p_target_type, p_subservices, p_avail_eval_func, p_timezone); ELSE MGMT_SERVICE.create_aggregate_service(p_aggsvc_name, p_target_type, p_subservices, p_avail_eval_func); END IF; SELECT target_guid INTO l_target_guid FROM mgmt_targets WHERE target_name = p_aggsvc_name AND target_type = p_target_type; -- add performance metrics IF p_perfmetrics IS NOT NULL THEN FOR i IN p_perfmetrics.FIRST .. p_perfmetrics.LAST LOOP l_perf_metric := p_perfmetrics(i); IF l_perf_metric IS NOT NULL THEN BEGIN EM_REP_METRIC.add_repo_metric_collection( MGMT_METRIC_INSTANCE.NEW( p_aggsvc_name, p_target_type, MGMT_SERVICE.G_PERFORMANCE_METRIC_NAME, MGMT_SERVICE.G_PERFORMANCE_VALUE_COL_NAME, l_perf_metric.coll_name), l_perf_metric.eval_function, l_perf_metric.component_metrics); -- if this metric is used in homepage chart IF (l_perf_metric.show_in_home_page = 'true') THEN MGMT_SERVICE.set_homepage_perf_chart( p_aggsvc_name, p_target_type, MGMT_SERVICE.G_PERFORMANCE_METRIC_NAME, MGMT_SERVICE.G_PERFORMANCE_VALUE_COL_NAME, l_perf_metric.coll_name); END IF; set_thresholds(p_aggsvc_name, p_target_type, l_perf_metric); END; END IF; END LOOP; END IF; -- add usage metrics IF p_usagemetrics IS NOT NULL THEN FOR i IN p_usagemetrics.FIRST .. p_usagemetrics.LAST LOOP l_usage_metric := p_usagemetrics(i); IF l_usage_metric IS NOT NULL THEN BEGIN EM_REP_METRIC.add_repo_metric_collection( MGMT_METRIC_INSTANCE.NEW( p_aggsvc_name, p_target_type, MGMT_SERVICE.G_USAGE_METRIC_NAME, MGMT_SERVICE.G_USAGE_VALUE_COL_NAME, l_usage_metric.coll_name), l_usage_metric.eval_function, l_usage_metric.component_metrics); IF (l_usage_metric.show_in_home_page = 'true') THEN MGMT_SERVICE.set_homepage_usage_chart( p_aggsvc_name, p_target_type, MGMT_SERVICE.G_USAGE_METRIC_NAME, MGMT_SERVICE.G_USAGE_VALUE_COL_NAME, l_usage_metric.coll_name); END IF; -- sets thresholds set_thresholds(p_aggsvc_name, p_target_type, l_usage_metric); END; END IF; END LOOP; END IF; END ADD_AGGSERVICE; PROCEDURE MODIFY_AGGSERVICE(p_aggsvc_name IN VARCHAR2, p_target_type IN VARCHAR2, p_subservices IN SMP_EMD_NVPAIR_ARRAY, p_avail_eval_func IN VARCHAR2, p_timezone IN VARCHAR2, p_perfmetrics IN AGGSERVICE_METRIC_ARRAY, p_usagemetrics IN AGGSERVICE_METRIC_ARRAY, p_businessmetrics IN AGGSERVICE_METRIC_ARRAY) IS l_target_guid RAW(16); l_delete_subservices SMP_EMD_NVPAIR_ARRAY := SMP_EMD_NVPAIR_ARRAY(); l_add_subservices SMP_EMD_NVPAIR_ARRAY := SMP_EMD_NVPAIR_ARRAY(); l_bus_sessions SMP_EMD_STRING_ARRAY; BEGIN SELECT target_guid INTO l_target_guid FROM mgmt_targets WHERE target_name = p_aggsvc_name AND target_type = p_target_type; -- gets the subservices list to be deleted SELECT SMP_EMD_NVPAIR(tgt.target_name, tgt.target_type) BULK COLLECT INTO l_delete_subservices FROM mgmt_target_assocs a, mgmt_targets tgt WHERE a.source_target_guid = l_target_guid AND a.assoc_target_guid NOT IN ( SELECT target_guid FROM mgmt_targets t, TABLE(CAST(p_subservices AS SMP_EMD_NVPAIR_ARRAY)) m WHERE m.name = t.target_name AND m.value = t.target_type ) AND a.assoc_target_guid = tgt.target_guid AND a.assoc_guid = mgmt_assoc.g_contains_guid; if (emdw_log.p_is_debug_set) THEN emdw_log.debug('aggregate_service : deleted list length : ' || l_delete_subservices.COUNT || ' p_subservices : ' || p_subservices.COUNT, MODULE_NAME); end if; -- gets the subservices list to be added SELECT SMP_EMD_NVPAIR(tgt.target_name, tgt.target_type) BULK COLLECT INTO l_add_subservices FROM mgmt_targets tgt, ( SELECT target_guid FROM mgmt_targets t, TABLE(CAST(p_subservices AS SMP_EMD_NVPAIR_ARRAY)) s WHERE s.name = t.target_name AND s.value = t.target_type) m WHERE m.target_guid = tgt.target_guid AND m.target_guid NOT IN ( SELECT assoc_target_guid FROM mgmt_target_assocs WHERE source_target_guid = l_target_guid AND assoc_guid = mgmt_assoc.g_contains_guid); if (emdw_log.p_is_debug_set) THEN emdw_log.debug('aggregate_service : add list length : ' || l_add_subservices.COUNT || ' p_subservices : ' || p_subservices.COUNT, MODULE_NAME); end if; MGMT_SERVICE.modify_aggregate_service(p_aggsvc_name, p_target_type, l_add_subservices, l_delete_subservices, p_avail_eval_func); -- update metric collections MODIFY_AGGSERVICE_METRICS(p_aggsvc_name, p_target_type, p_perfmetrics, l_target_guid, mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE, mgmt_service.G_PERFORMANCE_METRIC_NAME, mgmt_service.G_PERFORMANCE_VALUE_COL_NAME); MODIFY_AGGSERVICE_METRICS(p_aggsvc_name, p_target_type, p_usagemetrics, l_target_guid, mgmt_global.G_SERVICE_CATEGORY_USAGE, mgmt_service.G_USAGE_METRIC_NAME, mgmt_service.G_USAGE_VALUE_COL_NAME); MODIFY_AGGSERVICE_METRICS(p_aggsvc_name, p_target_type, p_businessmetrics, l_target_guid, mgmt_global.G_SERVICE_CATEGORY_BUSINESS, mgmt_service.G_BUSINESS_METRIC_NAME, mgmt_service.G_BUSINESS_VALUE_COL_NAME); IF ( gensvc.has_promoted_metrics (p_aggsvc_name, p_target_type, mgmt_global.G_SERVICE_CATEGORY_BUSINESS)) THEN IF (NOT em_bam_service.is_business_data_enabled(p_target_name => p_aggsvc_name, p_target_type => p_target_type)) THEN em_bam_service.enable_business_data(p_target_name => p_aggsvc_name, p_target_type => p_target_type); END IF; ELSE IF (em_bam_service.is_business_data_enabled(p_target_name => p_aggsvc_name, p_target_type => p_target_type)) THEN l_bus_sessions := em_bam_service.get_target_datasessions(p_aggsvc_name, p_target_type); IF (l_bus_sessions IS NULL) OR (l_bus_sessions.COUNT = 0) THEN em_bam_service.disable_business_data(p_target_name => p_aggsvc_name, p_target_type => p_target_type); END IF; END IF; END IF; END MODIFY_AGGSERVICE; PROCEDURE GET_AGGSERVICE(p_aggsvc_name IN VARCHAR2, p_target_type IN VARCHAR2, p_subservices OUT SMP_EMD_NVPAIR_ARRAY, p_avail_eval_func OUT VARCHAR2, p_timezone OUT VARCHAR2, p_perfmetrics OUT AGGSERVICE_METRIC_ARRAY, p_usagemetrics OUT AGGSERVICE_METRIC_ARRAY, p_businessmetrics OUT AGGSERVICE_METRIC_ARRAY, p_timezone_list OUT SMP_EMD_STRING_ARRAY) IS BEGIN -- this is for edit mode MGMT_SERVICE.get_aggregate_service_info(p_aggsvc_name, p_target_type, p_subservices, p_avail_eval_func, p_timezone); p_perfmetrics := GET_SERVICE_METRICS(p_aggsvc_name, p_target_type, 'perfType', EDIT_MODE); p_usagemetrics := GET_SERVICE_METRICS(p_aggsvc_name, p_target_type, 'usageType', EDIT_MODE); p_businessmetrics := GET_SERVICE_METRICS(p_aggsvc_name, p_target_type, 'businessType', EDIT_MODE); SELECT timezone_region BULK COLLECT INTO p_timezone_list FROM mgmt_targets WHERE target_guid IN (SELECT t.target_guid FROM TABLE(CAST(p_subservices AS SMP_EMD_NVPAIR_ARRAY)) p, mgmt_targets t WHERE t.target_name = p.name AND t.target_type = p.value); END GET_AGGSERVICE; PROCEDURE GET_SERVICES_FOR_SYSTEM( p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_services OUT CURSOR_TYPE) IS l_target_guid mgmt_targets.target_guid%TYPE; BEGIN l_target_guid := mgmt_target.get_target_guid( p_target_name, p_target_type); -- this query is adapted from the services folder query in -- emd_mntr.get_targets_summary6 -- todo:a separate proc will be provided to obtain serviceInfo for a -- given service OPEN p_services FOR WITH tgt AS ( SELECT target_name as display_name, target_type, target_guid, target_name , type_display_name, category_prop_1, category_prop_2, category_prop_3, category_prop_4, category_prop_5, type_meta_ver FROM mgmt_targets WHERE target_guid IN ( SELECT a.source_target_guid from mgmt_target_assocs a, mgmt_targets t WHERE a.assoc_target_guid = l_target_guid AND a.assoc_guid = mgmt_assoc.g_runs_on_guid AND t.target_guid = a.source_target_guid ) ), met AS ( SELECT m.metric_guid, m.target_type, m.type_meta_ver, m.category_prop_1, m.category_prop_2, m.category_prop_3, m.category_prop_4, m.category_prop_5, c.category_name FROM mgmt_metrics m, mgmt_category_map c WHERE c.object_guid = m.metric_guid AND c.target_type = m.target_type AND c.type_meta_ver = m.type_meta_ver AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name IN (mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE,mgmt_global.G_SERVICE_CATEGORY_USAGE) ) SELECT /*+ INDEX(tgt) INDEX(avail) */ tgt.target_name, tgt.target_type, tgt.target_name as display_name, tgt.type_display_name, NVL(avail.current_status,MGMT_GLOBAL.G_STATUS_UNKNOWN) cur_status, tgt.target_guid, NVL(allperfusage.perf_warning_count,0) AS perf_warning_count, NVL(allperfusage.perf_critical_count,0) AS perf_critical_count, NVL(allperfusage.usage_warning_count,0) AS usage_warning_count, NVL(allperfusage.usage_critical_count,0) AS usage_critical_count, NVL(allpolicy.information_count, 0) AS policy_information_count, NVL(allpolicy.warning_count, 0) AS policy_warning_count, NVL(allpolicy.critical_count, 0) AS policy_critical_count FROM tgt, mgmt_current_availability avail, (SELECT SUM(DECODE(met.category_name||severity_code,mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE||MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) perf_warning_count, SUM(DECODE(met.category_name||severity_code,mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE||MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) perf_critical_count, SUM(DECODE(met.category_name||severity_code,mgmt_global.G_SERVICE_CATEGORY_USAGE||MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) usage_warning_count, SUM(DECODE(met.category_name||severity_code,mgmt_global.G_SERVICE_CATEGORY_USAGE||MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) usage_critical_count, s.target_guid tguid FROM tgt, mgmt_current_severity s, met WHERE met.metric_guid = s.metric_guid AND tgt.target_type = met.target_type AND tgt.type_meta_ver = met.type_meta_ver AND (met.category_prop_1 = tgt.category_prop_1 OR met.category_prop_1 = ' ') AND (met.category_prop_2 = tgt.category_prop_2 OR met.category_prop_2 = ' ') AND (met.category_prop_3 = tgt.category_prop_3 OR met.category_prop_3 = ' ') AND (met.category_prop_4 = tgt.category_prop_4 OR met.category_prop_4 = ' ') AND (met.category_prop_5 = tgt.category_prop_5 OR met.category_prop_5 = ' ') AND tgt.target_guid = s.target_guid AND met.category_name IN (mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE, mgmt_global.G_SERVICE_CATEGORY_USAGE) GROUP BY s.target_guid ) allperfusage, (SELECT SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_INFORMATIONAL,1,0)) information_count, SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) warning_count, SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) critical_count, c.target_guid tguid FROM tgt, mgmt_current_violation c WHERE c.violation_type = MGMT_GLOBAL.G_SEVERITY_TYPE_POLICY AND tgt.target_guid = c.target_guid AND (c.exempt_code = 0 OR (c.exempt_code = 2 and c.exempt_until <= SYSDATE)) GROUP BY c.target_guid ) allpolicy WHERE tgt.target_guid = avail.target_guid (+) AND tgt.target_guid = allperfusage.tguid (+) AND tgt.target_guid = allpolicy.tguid(+) ORDER BY tgt.target_name; END GET_SERVICES_FOR_SYSTEM; PROCEDURE GET_SERVICE_METRICS(p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_metric_type IN VARCHAR2, p_metrics_list OUT AGGSERVICE_METRIC_ARRAY) IS BEGIN p_metrics_list := get_service_metrics(p_target_name, p_target_type, p_metric_type); END GET_SERVICE_METRICS; FUNCTION GET_SERVICE_METRICS(p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_metric_type IN VARCHAR2, p_mode IN VARCHAR2 DEFAULT NULL) RETURN AGGSERVICE_METRIC_ARRAY IS p_metrics_list AGGSERVICE_METRIC_ARRAY; l_target_guid RAW(16); l_comp_metrics MGMT_METRIC_INSTANCE_ARRAY := MGMT_METRIC_INSTANCE_ARRAY(); l_service_category VARCHAR2(32); BEGIN p_metrics_list := AGGSERVICE_METRIC_ARRAY(); IF (p_metric_type IS NOT NULL) THEN IF (p_metric_type='perfType') THEN l_service_category := MGMT_GLOBAL.G_SERVICE_CATEGORY_PERFORMANCE; ELSIF (p_metric_type='usageType') THEN l_service_category := MGMT_GLOBAL.G_SERVICE_CATEGORY_USAGE; ELSIF (p_metric_type='businessType') THEN l_service_category := MGMT_GLOBAL.G_SERVICE_CATEGORY_BUSINESS; END IF; END IF; SELECT target_guid INTO l_target_guid FROM mgmt_targets WHERE target_name = p_target_name AND target_type = p_target_type; IF p_mode = EDIT_MODE THEN FOR sub_rec IN metric_cur_edit(l_target_guid, p_target_type, l_service_category) LOOP l_comp_metrics := MGMT_METRIC_INSTANCE_ARRAY(); FOR sub_rec1 IN dep_metric_cur(sub_rec.coll_name, l_service_category, l_target_guid, sub_rec.metric_guid) LOOP l_comp_metrics.extend; l_comp_metrics(dep_metric_cur%ROWCOUNT) := MGMT_METRIC_INSTANCE(sub_rec1.target_name, sub_rec1.target_type, sub_rec1.metric_name, sub_rec1.metric_column, sub_rec1.dep_key_value); END LOOP; p_metrics_list.extend; p_metrics_list(metric_cur_edit%ROWCOUNT) := AGGSERVICE_METRIC(sub_rec.metric_name, sub_rec.metric_column, sub_rec.coll_name, l_comp_metrics, sub_rec.warning_threshold, sub_rec.critical_threshold, sub_rec.warning_operator, 'false', sub_rec.eval_func); END LOOP; ELSE FOR sub_rec IN metric_cur(l_target_guid, p_target_type, l_service_category) LOOP l_comp_metrics := MGMT_METRIC_INSTANCE_ARRAY(); p_metrics_list.extend; p_metrics_list(metric_cur%ROWCOUNT) := AGGSERVICE_METRIC(sub_rec.metric_name, sub_rec.metric_column, sub_rec.coll_name, l_comp_metrics, sub_rec.warning_threshold, sub_rec.critical_threshold, sub_rec.warning_operator, 'false', ''); END LOOP; END IF; RETURN p_metrics_list; END GET_SERVICE_METRICS; PROCEDURE GET_SERVICE_GENERAL_INFO(p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, gen_info_out OUT CURSOR_TYPE) IS l_target_guid RAW(16); BEGIN l_target_guid := mgmt_target.get_target_guid(p_target_name, p_target_type); OPEN gen_info_out FOR SELECT NVL(mgmt_target.get_avail_current_status(tgt.target_guid), MGMT_GLOBAL.G_STATUS_UNKNOWN) AS cur_status, mgmt_target.get_current_status_timestamp(l_target_guid) AS since_timestamp, mgmt_target.get_avail_pct_value(tgt.target_guid, 1) AS avail_pct, mgmt_avail.get_target_end_marker_time(l_target_guid) AS avail_delay, NVL(perfsev.sev_code, MGMT_GLOBAL.G_SEVERITY_CLEAR) AS perf_sev_code, NVL(usagesev.sev_code, MGMT_GLOBAL.G_SEVERITY_CLEAR) AS usage_sev_code, NVL(businesssev.sev_code, MGMT_GLOBAL.G_SEVERITY_CLEAR) AS business_sev_code, NVL(allpolicy.information_count, 0) AS pol_info_count, NVL(allpolicy.warning_count, 0) AS pol_warning_count, NVL(allpolicy.critical_count, 0) AS pol_critical_count FROM mgmt_targets tgt, (SELECT MAX(severity_code) AS sev_code FROM mgmt_current_severity s, mgmt_metrics m WHERE m.metric_guid IN (SELECT metric_guid FROM mgmt_metrics m, mgmt_category_map c WHERE c.object_guid = m.metric_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name = mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE) AND s.target_guid = l_target_guid AND s.metric_guid = m.metric_guid) perfsev, (SELECT MAX(severity_code) AS sev_code FROM mgmt_current_severity s, mgmt_metrics m WHERE m.metric_guid IN (SELECT metric_guid FROM mgmt_metrics m, mgmt_category_map c WHERE c.object_guid = m.metric_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name = mgmt_global.G_SERVICE_CATEGORY_USAGE) AND s.target_guid = l_target_guid AND s.metric_guid = m.metric_guid) usagesev, (SELECT MAX(severity_code) AS sev_code FROM mgmt_current_severity s, mgmt_metrics m WHERE m.metric_guid IN (SELECT metric_guid FROM mgmt_metrics m, mgmt_category_map c WHERE c.object_guid = m.metric_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name = mgmt_global.G_SERVICE_CATEGORY_BUSINESS) AND s.target_guid = l_target_guid AND s.metric_guid = m.metric_guid) businesssev, (SELECT SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_INFORMATIONAL,1,0)) information_count, SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) warning_count, SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) critical_count FROM mgmt_current_violation WHERE violation_type = MGMT_GLOBAL.G_SEVERITY_TYPE_POLICY AND (exempt_code = 0 OR (exempt_code = 2 and exempt_until <= SYSDATE)) AND target_guid = l_target_guid) allpolicy WHERE tgt.target_guid = l_target_guid; END GET_SERVICE_GENERAL_INFO; PROCEDURE GET_SERVICE_ALERTS_INFO(p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_alerts_category IN VARCHAR2 DEFAULT NULL, alerts_info_out OUT CURSOR_TYPE) IS l_target_guid RAW(16); BEGIN l_target_guid := mgmt_target.get_target_guid(p_target_name, p_target_type); IF (l_target_guid IS NULL) THEN raise_application_error(MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR, MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR_M || p_target_name || ' (' || p_target_type || ')'); END IF; IF (p_alerts_category IS NULL OR p_alerts_category = 'ALL') THEN OPEN alerts_info_out FOR SELECT tgt.target_name, tgt.target_type, tgt.type_display_name, sev.severity_code, sev.collection_timestamp, sev.message, sev.message_nlsid, sev.message_params, sev.severity_guid FROM mgmt_targets tgt, (SELECT assoc_target_guid as guid FROM mgmt_target_assocs WHERE source_target_guid = l_target_guid AND assoc_guid = mgmt_assoc.g_contains_guid UNION SELECT l_target_guid FROM dual) all_guids, mgmt_metrics m, mgmt_current_severity sev WHERE tgt.target_guid = all_guids.guid AND tgt.target_type = m.target_type AND tgt.type_meta_ver = m.type_meta_ver AND (m.category_prop_1 = tgt.category_prop_1 OR m.category_prop_1 = ' ') AND (m.category_prop_2 = tgt.category_prop_2 OR m.category_prop_2 = ' ') AND (m.category_prop_3 = tgt.category_prop_3 OR m.category_prop_3 = ' ') AND (m.category_prop_4 = tgt.category_prop_4 OR m.category_prop_4 = ' ') AND (m.category_prop_5 = tgt.category_prop_5 OR m.category_prop_5 = ' ') AND sev.target_guid = tgt.target_guid AND sev.metric_guid = m.metric_guid AND m.remote != 1 AND m.metric_name != 'test_response'; ELSE OPEN alerts_info_out FOR SELECT tgt.target_name, tgt.target_type, tgt.type_display_name, sev.severity_code, sev.collection_timestamp, sev.message, sev.message_nlsid, sev.message_params, sev.severity_guid FROM mgmt_targets tgt, (SELECT assoc_target_guid as guid FROM mgmt_target_assocs WHERE source_target_guid = l_target_guid AND assoc_guid = mgmt_assoc.g_contains_guid UNION SELECT l_target_guid FROM dual) all_guids, mgmt_metrics m, mgmt_category_map c, mgmt_current_severity sev WHERE tgt.target_guid = all_guids.guid AND tgt.target_type = m.target_type AND tgt.target_type = c.target_type AND tgt.type_meta_ver = m.type_meta_ver AND tgt.type_meta_ver = c.type_meta_ver AND (m.category_prop_1 = tgt.category_prop_1 OR m.category_prop_1 = ' ') AND (m.category_prop_2 = tgt.category_prop_2 OR m.category_prop_2 = ' ') AND (m.category_prop_3 = tgt.category_prop_3 OR m.category_prop_3 = ' ') AND (m.category_prop_4 = tgt.category_prop_4 OR m.category_prop_4 = ' ') AND (m.category_prop_5 = tgt.category_prop_5 OR m.category_prop_5 = ' ') AND m.metric_guid = c.object_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND (c.category_name = p_alerts_category) AND sev.target_guid = tgt.target_guid AND sev.metric_guid = m.metric_guid; END IF; END GET_SERVICE_ALERTS_INFO; PROCEDURE GET_SUBSERVICES_LIST (p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, subservices_list_out OUT CURSOR_TYPE) IS l_target_guid RAW(16); l_targets SMP_EMD_NVPAIR_ARRAY := SMP_EMD_NVPAIR_ARRAY(); BEGIN l_target_guid := mgmt_target.get_target_guid(p_target_name, p_target_type); IF (l_target_guid IS NULL) THEN raise_application_error(MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR, MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR_M || p_target_name || ' (' || p_target_type || ')'); END IF; SELECT SMP_EMD_NVPAIR(target_name, target_type) BULK COLLECT INTO l_targets FROM mgmt_targets WHERE target_guid IN (SELECT assoc_target_guid FROM mgmt_target_assocs WHERE source_target_guid = l_target_guid AND assoc_guid = mgmt_assoc.g_contains_guid UNION SELECT l_target_guid FROM dual); subservices_list_out := GET_SERVICES_INFO(l_targets); END GET_SUBSERVICES_LIST; FUNCTION GET_SERVICES_INFO(p_target_list IN SMP_EMD_NVPAIR_ARRAY) RETURN CURSOR_TYPE IS l_service_info_out CURSOR_TYPE; BEGIN OPEN l_service_info_out FOR SELECT /*+ INDEX(tgt) INDEX(avail) */ tgt.target_name, tgt.target_type, tgt.target_name as display_name, tgt.type_display_name, NVL(avail.current_status,MGMT_GLOBAL.G_STATUS_UNKNOWN) cur_status, tgtProp.property_value is_aggregate_service, tgt.target_guid, NVL(allperf.warning_count,0) AS perf_warning_count, NVL(allperf.critical_count,0) AS perf_critical_count, NVL(allusage.warning_count,0) AS usage_warning_count, NVL(allusage.critical_count,0) AS usage_critical_count, NVL(allpolicy.information_count, 0) AS policy_information_count, NVL(allpolicy.warning_count, 0) AS policy_warning_count, NVL(allpolicy.critical_count, 0) AS policy_critical_count, sys.target_name AS system_target_name, sys.target_type AS system_target_type, NVL(sysavail.up_count, 0) AS sys_up_count, NVL(sysavail.down_count, 0) AS sys_down_count, NVL(sysalert.warning_count, 0) AS sys_warning_count, NVL(sysalert.critical_count, 0) AS sys_critical_count FROM (SELECT target_name, target_type, target_guid, target_name as display_name, type_display_name FROM mgmt_targets t, TABLE(CAST(p_target_list AS SMP_EMD_NVPAIR_ARRAY)) p WHERE t.target_name = p.name AND t.target_type = p.value) tgt, (SELECT property_value, target_type FROM mgmt_type_properties WHERE property_name = 'is_aggregate_service') tgtProp, mgmt_current_availability avail, (SELECT SUM(DECODE(severity_code,MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) warning_count, SUM(DECODE(severity_code,MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) critical_count, t.target_guid tguid FROM mgmt_current_severity s, mgmt_metrics m, mgmt_targets t, mgmt_category_map c WHERE m.metric_guid = s.metric_guid AND t.target_guid = s.target_guid AND t.target_type = m.target_type AND m.type_meta_ver = t.type_meta_ver AND (m.category_prop_1 = t.category_prop_1 OR m.category_prop_1 = ' ') AND (m.category_prop_2 = t.category_prop_2 OR m.category_prop_2 = ' ') AND (m.category_prop_3 = t.category_prop_3 OR m.category_prop_3 = ' ') AND (m.category_prop_4 = t.category_prop_4 OR m.category_prop_4 = ' ') AND (m.category_prop_5 = t.category_prop_5 OR m.category_prop_5 = ' ') AND m.metric_guid = c.object_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name = mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE GROUP BY t.target_guid) allperf, (SELECT SUM(DECODE(severity_code,MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) warning_count, SUM(DECODE(severity_code,MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) critical_count, t.target_guid tguid FROM mgmt_current_severity s, mgmt_metrics m, mgmt_targets t, mgmt_category_map c WHERE m.metric_guid = s.metric_guid AND t.target_guid = s.target_guid AND t.target_type = m.target_type AND m.type_meta_ver = t.type_meta_ver AND (m.category_prop_1 = t.category_prop_1 OR m.category_prop_1 = ' ') AND (m.category_prop_2 = t.category_prop_2 OR m.category_prop_2 = ' ') AND (m.category_prop_3 = t.category_prop_3 OR m.category_prop_3 = ' ') AND (m.category_prop_4 = t.category_prop_4 OR m.category_prop_4 = ' ') AND (m.category_prop_5 = t.category_prop_5 OR m.category_prop_5 = ' ') AND m.metric_guid = c.object_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name = mgmt_global.G_SERVICE_CATEGORY_USAGE GROUP BY t.target_guid) allusage, (SELECT SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_INFORMATIONAL,1,0)) information_count, SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) warning_count, SUM(DECODE(violation_level,MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) critical_count, target_guid tguid FROM mgmt_current_violation WHERE violation_type = MGMT_GLOBAL.G_SEVERITY_TYPE_POLICY AND (exempt_code = 0 OR (exempt_code = 2 and exempt_until <= SYSDATE)) GROUP BY target_guid ) allpolicy, (SELECT t.target_name, t.target_type, a.source_target_guid tguid FROM mgmt_target_assocs a, mgmt_targets t WHERE a.assoc_guid = MGMT_ASSOC.g_runs_on_guid AND t.target_guid = a.assoc_target_guid) sys, (SELECT SUM(DECODE(current_status, MGMT_GLOBAL.G_STATUS_UP,1,0)) up_count, SUM(DECODE(current_status, MGMT_GLOBAL.G_STATUS_DOWN,1,0)) down_count, a.source_target_guid tguid FROM mgmt_current_availability c, mgmt_target_assocs a WHERE c.target_guid = a.assoc_target_guid AND a.assoc_guid = MGMT_ASSOC.g_depends_on_guid GROUP BY a.source_target_guid) sysavail, (SELECT SUM(DECODE(severity_code,MGMT_GLOBAL.G_SEVERITY_WARNING,1,0)) warning_count, SUM(DECODE(severity_code,MGMT_GLOBAL.G_SEVERITY_CRITICAL,1,0)) critical_count, a.source_target_guid tguid FROM mgmt_current_severity s, mgmt_target_assocs a WHERE a.assoc_guid = MGMT_ASSOC.g_depends_on_guid AND s.target_guid = a.assoc_target_guid GROUP BY a.source_target_guid) sysalert WHERE tgt.target_guid = avail.target_guid (+) AND tgt.target_guid = allperf.tguid (+) AND tgt.target_guid = allusage.tguid (+) AND tgt.target_guid = allpolicy.tguid(+) AND tgt.target_guid = sys.tguid(+) AND tgt.target_guid = sysavail.tguid(+) AND tgt.target_guid = sysalert.tguid(+) AND tgt.target_type = tgtProp.target_type(+) ORDER BY tgt.target_name; RETURN l_service_info_out; END GET_SERVICES_INFO; PROCEDURE GET_DEFAULT_HOMEPAGE_METRICS(p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, perf_metric_info OUT CURSOR_TYPE, usage_metric_info OUT CURSOR_TYPE) IS l_target_guid RAW(16); l_metric_name VARCHAR2(128); l_metric_column VARCHAR2(128); l_key_value VARCHAR2(128); BEGIN l_target_guid := mgmt_target.get_target_guid(p_target_name, p_target_type); IF (l_target_guid IS NULL) THEN raise_application_error(MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR, MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR_M || p_target_name || ' (' || p_target_type || ')'); END IF; MGMT_SERVICE.get_homepage_perf_chart(p_target_name, p_target_type, l_metric_name, l_metric_column, l_key_value); OPEN perf_metric_info FOR SELECT l_metric_name metric_name, l_metric_column metric_column, l_key_value key_value FROM dual; MGMT_SERVICE.get_homepage_usage_chart(p_target_name, p_target_type, l_metric_name, l_metric_column, l_key_value); OPEN usage_metric_info FOR SELECT l_metric_name metric_name, l_metric_column metric_column, l_key_value key_value FROM dual; END GET_DEFAULT_HOMEPAGE_METRICS; PROCEDURE GET_METRICS_LIST (p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_metric_category IN VARCHAR2, metrics_list_out OUT CURSOR_TYPE, target_sysdate OUT DATE) IS l_target_guid RAW(16); l_type_meta_ver VARCHAR2(8); BEGIN l_target_guid := mgmt_target.get_target_guid(p_target_name, p_target_type); IF (l_target_guid IS NULL) THEN raise_application_error(MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR, MGMT_GLOBAL.TARGET_DOES_NOT_EXIST_ERR_M || p_target_name || ' (' || p_target_type || ')'); END IF; target_sysdate := mgmt_target.sysdate_target(l_target_guid); if (emdw_log.p_is_debug_set) THEN emdw_log.debug('get_metrics_list:' || l_target_guid || ' : ' || p_metric_category, MODULE_NAME); end if; OPEN metrics_list_out FOR SELECT met.metric_guid, met.metric_name, met.metric_column, met.metric_label_nlsid, met.column_label_nlsid, '' as coll_name, met.target_guid, th.warning_threshold, th.critical_threshold, met.column_label FROM (select m.metric_guid, m.metric_name, m.metric_column, m.metric_label_nlsid, m.column_label_nlsid, t.target_guid, m.column_label from mgmt_targets t, mgmt_metrics m, mgmt_category_map map WHERE t.target_guid = hextoraw(l_target_guid) AND t.target_type = m.target_type AND t.type_meta_ver = m.type_meta_ver AND t.target_type = map.target_type AND t.type_meta_ver = map.type_meta_ver AND (t.category_prop_1 = m.category_prop_1 OR m.category_prop_1 = ' ') AND (t.category_prop_2 = m.category_prop_2 OR m.category_prop_2 = ' ') AND (t.category_prop_3 = m.category_prop_3 OR m.category_prop_3 = ' ') AND (t.category_prop_4 = m.category_prop_4 OR m.category_prop_4 = ' ') AND (t.category_prop_5 = m.category_prop_5 OR m.category_prop_5 = ' ') AND m.is_transposed = 0 AND m.metric_type not in (MGMT_GLOBAL.G_METRIC_TYPE_TABLE, MGMT_GLOBAL.G_METRIC_TYPE_REPOS_TABLE) AND map.object_guid = m.metric_guid AND map.object_type = MGMT_GLOBAL.G_TYPE_THRESHOLD_METRIC AND map.class_name = MGMT_GLOBAL.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_metric_category) met, mgmt_metric_thresholds th WHERE met.target_guid = th.target_guid (+) AND met.metric_guid = th.metric_guid (+) UNION ALL SELECT m.metric_guid, m.metric_name, m.metric_column, m.metric_label_nlsid, m.column_label_nlsid, m.coll_name, m.target_guid, th.warning_threshold, th.critical_threshold, m.column_label FROM mgmt_metric_thresholds th, (SELECT t.target_guid, cm.metric_name, cm.metric_column, cm.metric_guid, c.coll_name, cm.metric_label_nlsid, cm.column_label_nlsid, cm.column_label FROM mgmt_metrics cm, mgmt_metrics tm, mgmt_category_map map, mgmt_metric_collections c, mgmt_targets t WHERE t.target_guid = hextoraw(l_target_guid) AND t.target_type = cm.target_type AND t.type_meta_ver = cm.type_meta_ver AND t.type_meta_ver = tm.type_meta_ver AND t.type_meta_ver = map.type_meta_ver AND (t.category_prop_1 = cm.category_prop_1 OR cm.category_prop_1 = ' ') AND (t.category_prop_2 = cm.category_prop_2 OR cm.category_prop_2 = ' ') AND (t.category_prop_3 = cm.category_prop_3 OR cm.category_prop_3 = ' ') AND (t.category_prop_4 = cm.category_prop_4 OR cm.category_prop_4 = ' ') AND (t.category_prop_5 = cm.category_prop_5 OR cm.category_prop_5 = ' ') AND cm.is_transposed = 1 AND cm.key_order = 0 AND cm.metric_column <> ' ' AND map.object_guid = cm.metric_guid AND map.object_type = MGMT_GLOBAL.G_TYPE_THRESHOLD_METRIC AND map.class_name = MGMT_GLOBAL.G_CATEGORY_CLASS_SERVICE AND map.category_name = p_metric_category AND tm.metric_name = cm.metric_name AND tm.metric_column = ' ' AND c.target_guid = hextoraw(l_target_guid) AND c.metric_guid = tm.metric_guid) m WHERE m.target_guid = th.target_guid (+) AND m.metric_guid = th.metric_guid (+) AND m.coll_name = th.coll_name(+); END GET_METRICS_LIST; PROCEDURE GET_AVAIL_ALL_ASSOC_TARGETS (p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, top_level_target_name IN VARCHAR2, top_level_target_type IN VARCHAR2, top_level_tz IN VARCHAR2, start_date_in IN DATE, end_date_in IN DATE, num_of_days_in IN NUMBER, assoc_type_in IN VARCHAR2, start_time_out OUT DATE, end_time_out OUT DATE, tz_out OUT VARCHAR2, avail_states_self_out OUT CURSOR_TYPE, avail_states_assoc_out OUT CURSOR_TYPE ) IS l_current_status_out NUMBER; l_avail_pct_out NUMBER; l_status_since_out DATE; l_perf_state_cursor CURSOR_TYPE; l_avail_selector VARCHAR2(64); BEGIN BEGIN -- this function should get the top level target and pass it to gensvc_view functions GENSVC_VIEW.get_avail_single_target(p_target_name, p_target_type, top_level_target_name, top_level_target_type, top_level_tz, start_date_in, end_date_in, num_of_days_in, start_time_out, end_time_out, tz_out, l_current_status_out, l_avail_pct_out, l_status_since_out, avail_states_self_out, l_perf_state_cursor,l_avail_selector); EXCEPTION WHEN OTHERS THEN -- open a single row cursor OPEN avail_states_self_out FOR SELECT t.target_guid as target_guid, t.target_name as target_name, t.target_type as target_type, avail.current_status as current_status, avail.severity_guid as severity_guid, avail.current_status as historical_status, avail.end_collection_timestamp as duration, avail.start_collection_timestamp as start_timestamp, avail.end_collection_timestamp as end_timestamp, '0' as test_based, '1' as comp_targets_count FROM mgmt_availability avail, mgmt_targets t WHERE t.target_name = p_target_name AND t.target_type = p_target_type AND t.target_guid = avail.target_guid(+); END; IF ( l_perf_state_cursor%ISOPEN ) THEN CLOSE l_perf_state_cursor; END IF; GENSVC_VIEW.get_avail_all_assoc_targets(p_target_name, p_target_type, top_level_target_name, top_level_target_type, top_level_tz, start_date_in, end_date_in, num_of_days_in, assoc_type_in, start_time_out, end_time_out, tz_out, avail_states_assoc_out, l_perf_state_cursor); IF ( l_perf_state_cursor%ISOPEN ) THEN CLOSE l_perf_state_cursor; END IF; END GET_AVAIL_ALL_ASSOC_TARGETS; PROCEDURE HAS_PERF_USAGE_BY_TYPE(p_target_type IN VARCHAR2, p_type_meta_ver IN VARCHAR2 DEFAULT NULL, perf_metrics_out OUT SMP_EMD_NVPAIR_ARRAY, usage_metrics_out OUT SMP_EMD_NVPAIR_ARRAY) AS BEGIN BEGIN SELECT SMP_EMD_NVPAIR(metric_name, metric_column) BULK COLLECT INTO perf_metrics_out FROM mgmt_metrics m, mgmt_category_map c WHERE c.target_type = p_target_type AND (c.type_meta_ver = p_type_meta_ver OR p_type_meta_ver IS NULL) AND c.object_guid = m.metric_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name = mgmt_global.G_SERVICE_CATEGORY_PERFORMANCE AND m.metric_name = MGMT_SERVICE.G_PERFORMANCE_METRIC_NAME AND m.metric_column = MGMT_SERVICE.G_PERFORMANCE_VALUE_COL_NAME; EXCEPTION WHEN NO_DATA_FOUND THEN perf_metrics_out := NULL; END; BEGIN SELECT SMP_EMD_NVPAIR(metric_name, metric_column) BULK COLLECT INTO usage_metrics_out FROM mgmt_metrics m, mgmt_category_map c WHERE c.target_type = p_target_type AND (c.type_meta_ver = p_type_meta_ver OR p_type_meta_ver IS NULL) AND c.object_guid = m.metric_guid AND c.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND c.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND c.category_name = mgmt_global.G_SERVICE_CATEGORY_USAGE AND m.metric_name = MGMT_SERVICE.G_USAGE_METRIC_NAME AND m.metric_column = MGMT_SERVICE.G_USAGE_VALUE_COL_NAME; EXCEPTION WHEN NO_DATA_FOUND THEN usage_metrics_out := NULL; END; END HAS_PERF_USAGE_BY_TYPE; PROCEDURE SET_THRESHOLDS( p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_metric AGGSERVICE_METRIC ) IS l_policy_key_val_list MGMT_POLICY_KEY_VAL_ARRAY := null; BEGIN l_policy_key_val_list := MGMT_POLICY_KEY_VAL_ARRAY(); l_policy_key_val_list.extend; l_policy_key_val_list(1) := MGMT_POLICY_KEY_VAL.NEW( p_key_value => MGMT_POLICY_KEY_COL_COND_ARRAY( MGMT_POLICY_KEY_COL_COND.NEW( p_key_value => p_metric.coll_name, p_has_wildcard => MGMT_GLOBAL.G_FALSE ) ), p_condition_operator => p_metric.operator, p_param_values => MGMT_POLICY_PARAM_VAL_ARRAY( MGMT_POLICY_PARAM_VAL.NEW( p_param_name => ' ', p_crit_threshold => p_metric.critical_threshold, p_warn_threshold => p_metric.warning_threshold) )); mgmt_monitoring.save_target_metric_config(p_target_type, p_target_name, p_metric.metric_name, p_metric.metric_column, p_metric.coll_name, 1, l_policy_key_val_list ); END; PROCEDURE GET_NON_PROMOTED_METRICS_LIST (p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_metric_category IN VARCHAR2, metrics_list_out OUT CURSOR_TYPE) IS l_target_guid RAW(16); l_key_value_count INTEGER; l_key_values SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY(); BEGIN l_target_guid := mgmt_target.get_target_guid(p_target_name, p_target_type); FOR sub_rec IN metric_cur(l_target_guid, p_target_type, p_metric_category) LOOP SELECT COUNT(key_value) INTO l_key_value_count FROM mgmt_metric_dependency WHERE target_guid = l_target_guid AND sub_rec.coll_name = key_value; IF (l_key_value_count = 0) THEN l_key_values.extend(1); l_key_values(l_key_values.COUNT) := sub_rec.coll_name; END IF; END LOOP; OPEN metrics_list_out FOR SELECT COLUMN_VALUE as key_value FROM TABLE(CAST(l_key_values AS SMP_EMD_STRING_ARRAY)); END GET_NON_PROMOTED_METRICS_LIST; PROCEDURE GET_PROMOTED_METRICS_LIST (p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, p_metric_category IN VARCHAR2, metrics_list_out OUT CURSOR_TYPE) IS BEGIN OPEN metrics_list_out FOR SELECT met_dep.key_value as key_value FROM mgmt_metrics met, mgmt_targets tgt, mgmt_category_map cat_map, mgmt_metric_dependency met_dep WHERE tgt.target_name = p_target_name AND tgt.target_type = p_target_type AND cat_map.target_type = tgt.target_type AND (cat_map.type_meta_ver = tgt.type_meta_ver OR tgt.type_meta_ver IS NULL) AND cat_map.object_guid = met.metric_guid AND cat_map.object_type = mgmt_global.G_TYPE_THRESHOLD_METRIC AND cat_map.class_name = mgmt_global.G_CATEGORY_CLASS_SERVICE AND cat_map.category_name = p_metric_category AND tgt.type_meta_ver = met.type_meta_ver AND (met.category_prop_1 = tgt.category_prop_1 OR met.category_prop_1 = ' ') AND (met.category_prop_2 = tgt.category_prop_2 OR met.category_prop_2 = ' ') AND (met.category_prop_3 = tgt.category_prop_3 OR met.category_prop_3 = ' ') AND (met.category_prop_4 = tgt.category_prop_4 OR met.category_prop_4 = ' ') AND (met.category_prop_5 = tgt.category_prop_5 OR met.category_prop_5 = ' ') AND met_dep.target_guid = tgt.target_guid AND met_dep.metric_guid = met.metric_guid; END GET_PROMOTED_METRICS_LIST; PROCEDURE ALLOW_BUSINESS_PROMOTION(p_target_name IN VARCHAR2, p_target_type IN VARCHAR2, allow_promotion OUT INTEGER) IS l_svc_id MGMT_TARGETS.target_guid%TYPE; target_sysdate DATE; BEGIN allow_promotion := 1; IF ( p_target_name IS NULL ) OR ( p_target_type IS NULL ) THEN raise_application_error(MGMT_GLOBAL.INVALID_PARAMS_ERR, 'One of Service Target name, Target type is Null'); END IF; IF EM_BAM_SERVICE.IS_BUSINESS_DATA_ENABLED(p_target_name, p_target_type) THEN return; END IF; l_svc_id := mgmt_service.get_service_guid( p_target_name, p_target_type); BEGIN -- see if there are any memebers that are -- 1. services and -- 2. have business metrics. SELECT 1 INTO allow_promotion FROM dual where EXISTS( SELECT 1 FROM ( SELECT tgt.target_guid, tgt.target_name, tgt.target_type, 1 as is_key FROM mgmt_target_assocs, mgmt_targets tgt WHERE source_target_guid = l_svc_id AND assoc_guid = MGMT_ASSOC.g_depends_on_guid AND tgt.target_guid = assoc_target_guid ) members, mgmt_type_properties type_props, mgmt_target_properties props WHERE type_props.target_type = members.target_type AND type_props.property_value = '1' AND (type_props.property_name = MGMT_GLOBAL.G_IS_SERVICE_PROP OR type_props.property_name = MGMT_GLOBAL.G_IS_AGGREGATE_SERVICE_PROP) AND members.target_guid = props.target_guid AND props.property_name = EM_SERVICE.G_SVC_HAS_BUSINESS AND props.property_value = 'true'); return; EXCEPTION WHEN NO_DATA_FOUND THEN allow_promotion := 0; END; END ALLOW_BUSINESS_PROMOTION; END EM_AGGSVC_UI; / show errors;