X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ntsimulator%2Fsrc%2Fntsimulator-manager%2Fntsimulator-manager.c;h=ea120c7f19cfcfea099b3bc48cd647f573cff539;hb=610985b805c2b5c730bbc247ccbf76dd624792d0;hp=e5312b11c124e6b013926f7929a1bcf61f55cd50;hpb=1f1479ff8ce3a268acb7b70a32bb789d859a915b;p=sim%2Fo1-interface.git diff --git a/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c b/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c index e5312b1..ea120c7 100644 --- a/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c +++ b/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c @@ -225,18 +225,19 @@ simulator_config_change_cb(sr_session_ctx_t *session, const char *module_name, s sr_free_val(val); val = NULL; + size_t count = 0; + /* get the value from sysrepo, we do not care if the value did not change in our case */ - rc = sr_get_item(session, "/network-topology-simulator:simulator-config/notification-config/fault-notification-delay-period", &val); + rc = sr_get_items(session, "/network-topology-simulator:simulator-config/notification-config/fault-notification-delay-period", &val, &count); if (rc != SR_ERR_OK) { goto sr_error; } - rc = notification_delay_period_changed(val->data.uint32_val); + rc = notification_delay_period_changed(val, count); if (rc != SR_ERR_OK) { goto sr_error; } - - sr_free_val(val); + sr_free_values(val, count); val = NULL; /* get the value from sysrepo, we do not care if the value did not change in our case */ @@ -341,7 +342,14 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, { int rc; - printf("\n\n ========== Called simulator_status_cb for xpath: %s ==========\n\n", xpath); + // printf("\n\n ========== Called simulator_status_cb for xpath: %s ==========\n\n", xpath); + + counterAlarms ves_counter, netconf_counter; + rc = compute_notifications_count(&ves_counter, &netconf_counter); + if (rc != SR_ERR_OK) + { + printf("Could not compute the total number of notification count.\n"); + } if (sr_xpath_node_name_eq(xpath, "simulated-devices-list")) { sr_val_t *v; @@ -366,6 +374,13 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, while (current_device != NULL) { + counterAlarms vesCount, netconfCount; + rc = getDeviceCounters(current_device->device_id, &vesCount, &netconfCount); + if (rc != SR_ERR_OK) + { + printf("Could not get Notification Counters for device with uuid=\"%s\"", current_device->device_id); + } + CREATE_NEW_VALUE(rc, v, current_num_of_values); sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, current_device->device_id, "device-ip"); @@ -394,6 +409,66 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, current_device->device_id, "operational-state"); sr_val_build_str_data(&v[current_num_of_values - 1], SR_ENUM_T, "%s", operational_state); + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "normal"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = vesCount.normal; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "warning"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = vesCount.warning; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "minor"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = vesCount.minor; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "major"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = vesCount.major; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "critical"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = vesCount.critical; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "normal"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconfCount.normal; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "warning"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconfCount.warning; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "minor"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconfCount.minor; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "major"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconfCount.major; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "critical"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconfCount.critical; + current_device = current_device->next; } @@ -453,6 +528,86 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, *values = v; *values_cnt = current_num_of_values; } + else if (sr_xpath_node_name_eq(xpath, "total-ves-notifications")) + { + sr_val_t *v; + /* convenient functions such as this can be found in sysrepo/values.h */ + size_t current_num_of_values= 0; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "normal"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = ves_counter.normal; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "warning"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = ves_counter.warning; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "minor"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = ves_counter.minor; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "major"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = ves_counter.major; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "critical"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = ves_counter.critical; + + //return the values that we have just created + *values = v; + *values_cnt = current_num_of_values; + } + else if (sr_xpath_node_name_eq(xpath, "total-netconf-notifications")) + { + sr_val_t *v; + /* convenient functions such as this can be found in sysrepo/values.h */ + size_t current_num_of_values= 0; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "normal"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconf_counter.normal; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "warning"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconf_counter.warning; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "minor"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconf_counter.minor; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "major"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconf_counter.major; + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "critical"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = netconf_counter.critical; + + //return the values that we have just created + *values = v; + *values_cnt = current_num_of_values; + } return SR_ERR_OK; } @@ -539,7 +694,7 @@ main(int argc, char **argv) goto cleanup; } - rc = notification_delay_period_changed(0); + rc = notification_delay_period_changed(NULL, 0); if (rc != SR_ERR_OK) { printf("Could not write the delay period to file!\n"); goto cleanup; @@ -556,6 +711,12 @@ main(int argc, char **argv) printf("\n\n ========== STARTUP CONFIG network-topology-simulator APPLIED AS RUNNING ==========\n\n"); + rc = writeSkeletonStatusFile(); + if (rc != SR_ERR_OK) + { + fprintf(stderr, "Could not initialize status JSON file: %s\n", sr_strerror(rc)); + } + /* loop until ctrl-c is pressed / SIGINT is received */ signal(SIGINT, sigint_handler); signal(SIGTERM, sigint_handler);