diff options
author | PrakashH <pbhandar@techmahindra.com> | 2019-01-28 17:14:52 +0000 |
---|---|---|
committer | PrakashH <pbhandar@techmahindra.com> | 2019-01-28 17:45:15 +0000 |
commit | af7aa682517d3ccaace9a089194e6a4333f4cdaa (patch) | |
tree | f9da027c69fff993b907ca93130aa47fe9c9786d /vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/vpp_measurement_reporter.c | |
parent | 3bf047e64a1121208719e7603bf91c69d532ecf8 (diff) |
VES EVEL Library VES 5.4.1 enhancements
HB-Fault-Measurement-Syslog-2Collector enhancement.
Issue-ID: CERT-17
Change-Id: Ieff01ee5461e50c7e7d07d10ec66c1c97cf8c5b1
Signed-off-by: PrakashH <pbhandar@techmahindra.com>
Diffstat (limited to 'vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/vpp_measurement_reporter.c')
-rw-r--r-- | vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/vpp_measurement_reporter.c | 685 |
1 files changed, 685 insertions, 0 deletions
diff --git a/vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/vpp_measurement_reporter.c b/vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/vpp_measurement_reporter.c new file mode 100644 index 00000000..15b20d10 --- /dev/null +++ b/vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/vpp_measurement_reporter.c @@ -0,0 +1,685 @@ +/*************************************************************************//** + * + * Copyright © 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> +#include <string.h> +#include <netdb.h> +#include <sys/time.h> +#include <sys/stat.h> +#include "jsmn.h" +#include "evel.h" + +#define BUFSIZE 128 +#define MAX_BUFFER_SIZE 4096 +#define MAX_TOKENS 1000 +#define MAX_INTERFACES 40 + +void *MeasThread(void *threadarg); + +typedef struct dummy_vpp_metrics_struct { + int curr_bytes_in; + int curr_bytes_out; + int curr_packets_in; + int curr_packets_out; + int last_bytes_in; + int last_bytes_out; + int last_packets_in; + int last_packets_out; +} vpp_metrics_struct; + +typedef struct linkstat { + + char linkname[32]; + char linkdescr[64]; + char linkmode[64]; + int speedmbps; + +}LINKSTAT; + +vpp_metrics_struct meas_intfstat[MAX_INTERFACES]; +LINKSTAT meas_linkstat[MAX_INTERFACES]; + +unsigned long long epoch_start = 0; + +int format_val_params(KEYVALRESULT * keyValArray, int numElements, const char *replace, const char *search) +{ + char *sp; + int i =0; + int search_len; + int replace_len; + int tail_len; + + for (i=0; i<numElements; i++) + { + if ((sp = strstr(keyValArray[i].valStr, search)) == NULL) { + printf("\n String not found\n"); + return 1; //Error search string not found + } + + search_len = strlen(search); + replace_len = strlen(replace); + tail_len = strlen(sp+search_len); + memmove(sp+replace_len,sp+search_len,tail_len+1); + memcpy(sp, replace, replace_len); +// printf("\n Changed value for i=%d is %s", i, keyValArray[i].valStr); + } + return 0; //search and replace is successful +} + +void runCommands(KEYVALRESULT * commandArray, int numCommands) +{ + + char buf[BUFSIZE]; /* buffer used to store VPP metrics */ + FILE *fp; /* file descriptor to pipe cmd to shell */ + int i; + + for(i = 0; i < numCommands; i++) + { + memset(buf, 0, BUFSIZE); + + // Open a pipe and read VPP values + if ((fp = popen(commandArray[i].valStr, "r")) == NULL) { + printf("Error opening pipe!\n"); + return; + } + + while (fgets(buf, BUFSIZE, fp) != NULL); + strcpy(commandArray[i].resultStr, buf); + + if(pclose(fp)) { + printf("Command not found or exited with error status\n"); + return; + } + } + //for(i = 0; i < numCommands; i++) + // printf("-%d-valstr and resultStr is- %s - %s\n", i, commandArray[i].valStr, commandArray[i].resultStr); + printf("%d - %d - %d - %d\n", atoi(commandArray[0].resultStr), atoi(commandArray[1].resultStr), atoi(commandArray[2].resultStr), atoi(commandArray[3].resultStr)); +} + + +void copy_vpp_metic_data(vpp_metrics_struct *intfstats, KEYVALRESULT * cmdArray, int numCmds, int linkNum) +{ + int i; + + // Store the current metric in the last metric + intfstats[linkNum].last_bytes_in = intfstats[linkNum].curr_bytes_in; + intfstats[linkNum].last_bytes_out = intfstats[linkNum].curr_bytes_out; + intfstats[linkNum].last_packets_in = intfstats[linkNum].curr_packets_in; + intfstats[linkNum].last_packets_out = intfstats[linkNum].curr_packets_out; + + // Store metrics read from the vNIC in the current + for(i=0; i<numCmds; i++) + { + if((strcmp(cmdArray[i].keyStr, "tmp_t0BytesIn") == 0) || + (strcmp(cmdArray[i].keyStr, "tmp_t1BytesIn") == 0)) + intfstats[linkNum].curr_bytes_in = atoi(cmdArray[i].resultStr); + + if((strcmp(cmdArray[i].keyStr, "tmp_t0BytesOut") == 0) || + (strcmp(cmdArray[i].keyStr, "tmp_t1BytesOut") == 0)) + intfstats[linkNum].curr_bytes_out = atoi(cmdArray[i].resultStr); + + if((strcmp(cmdArray[i].keyStr, "tmp_t0PacketsIn") == 0) || + (strcmp(cmdArray[i].keyStr, "tmp_t1PacketsIn") == 0)) + intfstats[linkNum].curr_packets_in = atoi(cmdArray[i].resultStr); + + if((strcmp(cmdArray[i].keyStr, "tmp_t0PacketsOut") == 0) || + (strcmp(cmdArray[i].keyStr, "tmp_t1PacketsOut") == 0)) + intfstats[linkNum].curr_packets_out = atoi(cmdArray[i].resultStr); + } + // printf("intfstats[%d].curr_bytes_in = %d\n", linkNum, intfstats[linkNum].curr_bytes_in); + // printf("intfstats[%d].curr_bytes_out = %d\n", linkNum, intfstats[linkNum].curr_bytes_out); + // printf("intfstats[%d].curr_packets_in = %d\n", linkNum, intfstats[linkNum].curr_packets_in); + // printf("intfstats[%d].curr_packets_out = %d\n", linkNum, intfstats[linkNum].curr_packets_out); +} + +int get_priority(char * inStr) +{ + int result = -1; + + if(strcmp(inStr, "High") == 0) + result = EVEL_PRIORITY_HIGH; + else if(strcmp(inStr, "Medium") == 0) + result = EVEL_PRIORITY_MEDIUM; + else if(strcmp(inStr, "Normal") == 0) + result = EVEL_PRIORITY_NORMAL; + else if(strcmp(inStr, "Low") == 0) + result = EVEL_PRIORITY_LOW; + + return result; +} + +/**************************************************************************//** + * tap live cpu stats + *****************************************************************************/ +void evel_get_cpu_stats(EVENT_MEASUREMENT * measurement) +{ + FILE *fp; + char path[1024]; + double usage=0.0; + double idle; + double intrpt; + double nice; + double softirq; + double steal; + double sys; + double user; + double wait; + MEASUREMENT_CPU_USE *cpu_use = NULL; + + /* Open the command for reading. */ + //fp = popen("/bin/ls /etc/", "r"); + fp = popen("/usr/bin/top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 ", "r"); + if (fp == NULL) { + printf("Failed to run command\n" ); + exit(1); + } + + /* Read the output a line at a time - output it. */ + while (fgets(path, sizeof(path)-1, fp) != NULL) { + printf("%s", path+10); + sscanf(path+10," %lf us, %lf sy, %lf ni, %lf id, %lf wa, %lf hi, %lf si, %lf st", + &user,&sys,&nice,&idle,&wait,&intrpt,&softirq,&steal); + } + + /* close */ + pclose(fp); + + cpu_use = evel_measurement_new_cpu_use_add(measurement, "cpu1", usage); + if( cpu_use != NULL ){ + + evel_measurement_cpu_use_idle_set(cpu_use,idle); + //evel_measurement_cpu_use_interrupt_set(cpu_use,intrpt); + //evel_measurement_cpu_use_nice_set(cpu_use,nice); + //evel_measurement_cpu_use_softirq_set(cpu_use,softirq); + //evel_measurement_cpu_use_steal_set(cpu_use,steal); + evel_measurement_cpu_use_system_set(cpu_use,sys); + evel_measurement_cpu_use_usageuser_set(cpu_use,user); + //evel_measurement_cpu_use_wait_set(cpu_use,wait); + //evel_measurement_cpu_use_add(measurement, "cpu2", usage,idle,intrpt,nice,softirq,steal,sys,user,wait); + } +} + +int measure_traffic() +{ + + FILE *fp; + int status; + char count[10]; + time_t rawtime; + struct tm * timeinfo; + char period [21]; + char cmd [100]; + char secs [3]; + int sec; + int request_rate=0; + + printf("Checking app traffic\n"); + time (&rawtime); + timeinfo = localtime (&rawtime); + strftime(period,21,"%d/%b/%Y:%H:%M:",timeinfo); + strftime(secs,3,"%S",timeinfo); + sec = atoi(secs); + if (sec == 0) sec = 59; + sprintf(secs, "%02d", sec); + strncat(period, secs, 21); + // ....x....1....x....2. + // 15/Oct/2016:17:51:19 + strcpy(cmd, "sudo docker logs vHello | grep -c "); + strncat(cmd, period, 100); + fp = popen(cmd, "r"); + if (fp == NULL) { + EVEL_ERROR("popen failed to execute command"); + } + + if (fgets(count, 10, fp) != NULL) { + request_rate = atoi(count); + printf("Reporting request rate for second: %s as %d\n", period, request_rate); + + } + else { + EVEL_ERROR("New Measurement failed"); + } + printf("Processed measurement\n"); + + status = pclose(fp); + if (status == -1) { + EVEL_ERROR("pclose returned an error"); + } + return request_rate; +} + + + +int main(int argc, char** argv) +{ + char* fqdn = argv[1]; + int port = atoi(argv[2]); + int i=0; + int rc; + pthread_attr_t attr; + pthread_t meas_thread; + char* fqdn2 = NULL; + int port2 = 0; + + if(argc == 5) + { + fqdn2 = argv[3]; + port2 = atoi(argv[4]); + } + + if (!((argc == 3) || (argc == 5))) + { + fprintf(stderr, "Usage: %s <FQDN>|<IP address> <port> <FQDN>|<IP address> <port> \n", argv[0]); + fprintf(stderr, "OR\n"); + fprintf(stderr, "Usage: %s <FQDN>|<IP address> <port> \n", argv[0]); + exit(-1); + } + + /**************************************************************************/ + /* Initialize */ + /**************************************************************************/ + if(evel_initialize(fqdn, /* FQDN */ + port, /* Port */ + fqdn2, /* Backup FQDN */ + port2, /* Backup port */ + NULL, /* optional path */ + NULL, /* optional topic */ + 100, /* Ring Buffer size */ + 0, /* HTTPS? */ + NULL, /* cert file */ + NULL, /* key file */ + NULL, /* ca info */ + NULL, /* ca file */ + 0, /* verify peer */ + 0, /* verify host */ + "sample1", /* Username */ + "sample1", /* Password */ + "sample1", /* Username2 */ + "sample1", /* Password2 */ + NULL, /* Source ip */ + NULL, /* Source ip2 */ + EVEL_SOURCE_VIRTUAL_MACHINE, /* Source type */ + "vFirewall", /* Role */ + 1)) /* Verbosity */ + { + fprintf(stderr, "\nFailed to initialize the EVEL library!!!\n"); + exit(-1); + } + else + { + printf("\nInitialization completed\n"); + } + + /* Initialize and set thread detached attribute */ + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + + printf("Main:Creating thread \n"); + rc = pthread_create(&meas_thread, NULL, MeasThread, &i); + if (rc) + { + printf("ERROR; return code from pthread_create() is %d\n", rc); + exit(-1); + } + printf("Main:Created Meas thread \n"); + + pthread_join(meas_thread, NULL); + + evel_terminate(); + printf("Terminated\n"); + return 0; +} + +void *MeasThread(void *mainMeas) +{ + EVEL_ERR_CODES evel_rc = EVEL_SUCCESS; + EVENT_MEASUREMENT * vpp_m = NULL; + MEASUREMENT_CPU_USE *cpu_use = NULL; + EVENT_HEADER* vpp_m_header = NULL; + int bytes_in; + int bytes_out; + int packets_in; + int packets_out; + unsigned long long epoch_now; + int request_rate = 0; + + struct timeval time_val; + MEASUREMENT_VNIC_PERFORMANCE * vnic_performance = NULL; + char event_id1[10] = "mvfs"; + char event_id2[15] = {0}; + char event_id[BUFSIZE] = {0}; + int meas_event_id = 0; + + int numToken; + jsmntok_t tokens[MAX_TOKENS]; + char js[MAX_BUFFER_SIZE]; + + jsmn_parser p; + char ch[BUFSIZE]; + int ret = 0; + char eName[BUFSIZE]; + char eType[BUFSIZE]; + char nfcCode[BUFSIZE]; + char nfCode[BUFSIZE]; + char prio[BUFSIZE]; + char reportEId[BUFSIZE]; + char reportEName[BUFSIZE]; + char srcId[BUFSIZE]; + char srcName[BUFSIZE]; + char cpuId[BUFSIZE]; + + int priority; + + char hostname[BUFSIZE]; + + int meas_interval; + ARRAYVAL intfArray[MAX_INTERFACES]; + KEYVALRESULT keyValResultArray[32]; + KEYVALRESULT keyValResultArray2[32]; + KEYVALRESULT vnicCommandArray[32]; + KEYVALRESULT cpuUsageCommandArray[32]; + int numInitCommands = 0; + int numVnicCommands = 0; + int numCpuUsageCommands = 0; + int linkCount = 0; + double usage=0.0; + double cpuIdle=0.0; + double cpuSystem=0.0; + double cpuUser=0.0; + double intrpt; + double nice; + double softirq; + double steal; + double wait; + + int i = 0; + + memset(hostname, 0, BUFSIZE); + gethostname(hostname, BUFSIZE); + printf("MeasThread::The hostname is %s\n", hostname); + + sleep(1); + printf("MeasThread::Running Meas thread \n"); + fflush(stdout); + + memset(&intfArray[0],0,(sizeof(ARRAYVAL) * MAX_INTERFACES)); + memset(&keyValResultArray[0],0,(sizeof(KEYVALRESULT) * 32)); + + memset(js, 0, MAX_BUFFER_SIZE); + memset(ch, 0, BUFSIZE); + memset(&meas_intfstat[0],0,(sizeof(vpp_metrics_struct)* MAX_INTERFACES)); + memset(&meas_linkstat[0],0,(sizeof(LINKSTAT) * MAX_INTERFACES)); + + FILE * file = fopen("meas_config.json", "r"); + + while((fgets(ch, (BUFSIZE-1), file)) !=NULL) + { + strcat(js, ch); + memset(ch, 0, BUFSIZE); + } +// printf("MeasThread::the file content is \n %s \n", js); + + jsmn_init(&p); + numToken = jsmn_parse(&p, js, strlen(js), tokens, MAX_TOKENS); + printf("MeasThread::count-%d\n", numToken); + +// printToken(js,tokens, numToken); + + + ret = getIntToken(js, tokens, numToken, "measurementInterval", "tmp_directParameters", &meas_interval); + if (ret != 0) + { + printf("MeasThread::The parameter measurementInterval is not defined, defaulted to 60 seconds\n"); + meas_interval = 60; + } + + ret = getArrayTokens(js, tokens, numToken, "tmp_device", "tmp_directParameters", intfArray, &linkCount); + + printf("MeasThread::Array link count is %d\n", linkCount); + + /* Copy the link information */ + for(i=0;i<linkCount;i++) + { + strcpy(meas_linkstat[i].linkname, &intfArray[i]); +// printf("MeasThread::Link name %s\n", meas_linkstat[i].linkname); + } + + + read_keyVal_params(js, tokens, numToken, "tmp_init", "tmp_indirectParameters", keyValResultArray, &numInitCommands); + + for(i=0;i<linkCount;i++) + { + memset(&vnicCommandArray[0],0,(sizeof(KEYVALRESULT) * 32)); + memcpy(vnicCommandArray, keyValResultArray, (sizeof(KEYVALRESULT) * 32)); + format_val_params(vnicCommandArray, numInitCommands, meas_linkstat[i].linkname, "$tmp_device"); + runCommands(vnicCommandArray, numInitCommands); + copy_vpp_metic_data(meas_intfstat, vnicCommandArray, numInitCommands, i); + } + + gettimeofday(&time_val, NULL); + + sleep(meas_interval); + + /***************************************************************************/ + /* Collect metrics from the VNIC */ + /***************************************************************************/ + while(1) + { + + ret = getIntToken(js, tokens, numToken, "measurementInterval", "tmp_directParameters", &meas_interval); + if (ret != 0) + { + meas_interval = 60; + } + + ret = getStringToken(js, tokens, numToken, "eventName", "tmp_directParameters", eName, BUFSIZE); + if (ret != 0) + { + printf("MeasThread::Missing mandatory parameters - eventName is not there in tmp_directParameters. Exiting...\n"); + exit(1); + } + + ret = getStringToken(js, tokens, numToken, "eventType", "tmp_directParameters", eType, BUFSIZE); + ret = getStringToken(js, tokens, numToken, "nfcNamingCode", "tmp_directParameters", nfcCode, BUFSIZE); + ret = getStringToken(js, tokens, numToken, "nfNamingCode", "tmp_directParameters", nfCode, BUFSIZE); + ret = getStringToken(js, tokens, numToken, "reportingEntityId", "tmp_directParameters", reportEId, BUFSIZE); + ret = getStringToken(js, tokens, numToken, "sourceId", "tmp_directParameters", srcId, BUFSIZE); + ret = getStringToken(js, tokens, numToken, "reportingEntityName", "tmp_directParameters", reportEName, BUFSIZE); + if (ret != 0) + { + printf("MeasThread::Missing mandatory parameters - reportingEntityName is not there in tmp_directParameters\n"); + printf("MeasThread::Defaulting reportingEntityName to hostname\n"); + strcpy(reportEName, hostname); + } + ret = getStringToken(js, tokens, numToken, "sourceName", "tmp_directParameters", srcName, BUFSIZE); + if (ret != 0) + { + printf("MeasThread::Missing mandatory parameters - sourceName is not there in tmp_directParameters\n"); + printf("MeasThread::Defaulting sourceName to hostname\n"); + strcpy(srcName, hostname); + } + + ret = getStringToken(js, tokens, numToken, "priority", "tmp_directParameters", prio, BUFSIZE); + if (ret != 0) + { + printf("MeasThread::Missing mandatory parameters - priority is not there in tmp_directParameters\nDefaulting priority to Low\n"); + strcpy(prio, "Medium"); + } + priority = get_priority(prio); + if(priority == -1) + { + printf("MeasThread::Meas priority value is not matching, prioirty-%s \n", prio); + exit(1); + } + + read_keyVal_params(js, tokens, numToken, "tmp_vnic_command", "vNicPerformance", keyValResultArray, &numVnicCommands); + + for(i=0;i<linkCount;i++) + { + memset(&vnicCommandArray[0],0,(sizeof(KEYVALRESULT) * 32)); + memcpy(vnicCommandArray, keyValResultArray, (sizeof(KEYVALRESULT) * 32)); + format_val_params(vnicCommandArray, numVnicCommands, meas_linkstat[i].linkname, "$tmp_device"); + runCommands(vnicCommandArray, numVnicCommands); + copy_vpp_metic_data(meas_intfstat, vnicCommandArray, numVnicCommands, i); + } + + memset(event_id, 0, BUFSIZE); + meas_event_id = meas_event_id+1; + sprintf(event_id2, "%09d", meas_event_id); + strcat(event_id, event_id1); + strcat(event_id, event_id2); + + vpp_m = evel_new_measurement(meas_interval, eName,event_id); + + if(vpp_m != NULL) + { + printf("New measurement report created...\n"); + + for (int i = 0; i < linkCount; i++) + { + if(meas_intfstat[i].curr_bytes_in - meas_intfstat[i].last_bytes_in > 0) { + bytes_in = meas_intfstat[i].curr_bytes_in - meas_intfstat[i].last_bytes_in; + } + else { + bytes_in = 0; + } + if(meas_intfstat[i].curr_bytes_out - meas_intfstat[i].last_bytes_out > 0) { + bytes_out = meas_intfstat[i].curr_bytes_out - meas_intfstat[i].last_bytes_out; + } + else { + bytes_out = 0; + } + if(meas_intfstat[i].curr_packets_in - meas_intfstat[i].last_packets_in > 0) { + packets_in = meas_intfstat[i].curr_packets_in - meas_intfstat[i].last_packets_in; + } + else { + packets_in = 0; + } + if(meas_intfstat[i].curr_packets_out - meas_intfstat[i].last_packets_out > 0) { + packets_out = meas_intfstat[i].curr_packets_out - meas_intfstat[i].last_packets_out; + } + else { + packets_out = 0; + } + vnic_performance = (MEASUREMENT_VNIC_PERFORMANCE *)evel_measurement_new_vnic_performance(meas_linkstat[i].linkname, "true"); + evel_meas_vnic_performance_add(vpp_m, vnic_performance); + evel_vnic_performance_rx_total_pkt_delta_set(vnic_performance, packets_in); + evel_vnic_performance_tx_total_pkt_delta_set(vnic_performance, packets_out); + + evel_vnic_performance_rx_octets_delta_set(vnic_performance, bytes_in); + evel_vnic_performance_tx_octets_delta_set(vnic_performance, bytes_out); + + if (strcmp(meas_linkstat[i].linkname, "docker") == 0) + { + request_rate = measure_traffic(); + } + } + + evel_measurement_request_rate_set(vpp_m, request_rate); + + //evel_get_cpu_stats(vpp_m); + memset(&keyValResultArray2[0],0,(sizeof(KEYVALRESULT) * 32)); + memset(&cpuUsageCommandArray[0],0,(sizeof(KEYVALRESULT) * 32)); + + ret = getStringToken(js, tokens, numToken, "cpuIdentifier", "cpuUsage", cpuId, BUFSIZE); + if (ret != 0) + { + printf("MeasThread::Missing parameters - cpuIdentifier is not there in cpuUsage, default to Cpu1\n"); + strcpy(cpuId, "Cpu1"); + } + read_keyVal_params(js, tokens, numToken, "tmp_cpuuse_command", "cpuUsage", keyValResultArray2, &numCpuUsageCommands); + memcpy(cpuUsageCommandArray, keyValResultArray2, (sizeof(KEYVALRESULT) * 32)); + runCommands(cpuUsageCommandArray, numCpuUsageCommands); + + cpu_use = evel_measurement_new_cpu_use_add(vpp_m, cpuId, usage); + if( cpu_use != NULL ) + { +/**************************** + for(i=0; i<numCpuUsageCommands; i++) + { + if(strcmp(cpuUsageCommandArray[i].keyStr, "tmp_cpuIdle") == 0) + { + cpuIdle = atof(cpuUsageCommandArray[i].resultStr); + } + if(strcmp(cpuUsageCommandArray[i].keyStr, "tmp_cpuUsageSystem") == 0) + { + cpuSystem = atof(cpuUsageCommandArray[i].resultStr); + } + if(strcmp(cpuUsageCommandArray[i].keyStr, "tmp_cpuUsageUser") == 0) + { + cpuUser = atof(cpuUsageCommandArray[i].resultStr); + } + } **********************/ + printf("%s", cpuUsageCommandArray[0].resultStr); + sscanf(cpuUsageCommandArray[0].resultStr, " %lf us, %lf sy, %lf ni, %lf id, %lf wa, %lf hi, %lf si, %lf st", &cpuUser,&cpuSystem,&nice,&cpuIdle,&wait,&intrpt,&softirq,&steal); +printf("user - %f, system - %f, idle - %f\n", cpuUser, cpuSystem, cpuIdle); + + evel_measurement_cpu_use_idle_set(cpu_use, cpuIdle); + evel_measurement_cpu_use_system_set(cpu_use, cpuSystem); + evel_measurement_cpu_use_usageuser_set(cpu_use, cpuUser); + } + + struct timeval tv_now; + gettimeofday(&tv_now, NULL); + epoch_now = tv_now.tv_usec + 1000000 * tv_now.tv_sec; + + vpp_m_header = (EVENT_HEADER *)vpp_m; + + + if (eType != NULL) + evel_measurement_type_set(vpp_m, eType); + + evel_start_epoch_set(&vpp_m->header, epoch_start); + evel_last_epoch_set(&vpp_m->header, epoch_now); + epoch_start= epoch_now; + + if(nfcCode != NULL) + evel_nfcnamingcode_set(&vpp_m->header, nfcCode); + if(nfCode != NULL) + evel_nfnamingcode_set(&vpp_m->header, nfCode); + evel_reporting_entity_name_set(&vpp_m->header, reportEName); + if(reportEId != NULL) + evel_reporting_entity_id_set(&vpp_m->header, reportEId); + if(srcId != NULL ) + evel_source_id_set(&vpp_m->header, srcId); + if(srcName!= NULL ) + evel_source_name_set(&vpp_m->header, srcName); + + evel_rc = evel_post_event(vpp_m_header); + + if(evel_rc == EVEL_SUCCESS) + printf("MeasThread::Meas event is correctly sent to the collector!\n"); + else + printf("MeasThread::Post failed %d (%s)\n", evel_rc, evel_error_string()); + } + else + { + printf("MeasThread::Measurement event creation failed (%s)\n", evel_error_string()); + } + + sleep(meas_interval); + } + + /***************************************************************************/ + /* Terminate */ + /***************************************************************************/ + sleep(1); +} + |