diff options
Diffstat (limited to 'VNFs/DPPD-PROX/helper-scripts/rapid/rapid_corestatstest.py')
-rw-r--r-- | VNFs/DPPD-PROX/helper-scripts/rapid/rapid_corestatstest.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_corestatstest.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_corestatstest.py new file mode 100644 index 00000000..c55c67f1 --- /dev/null +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_corestatstest.py @@ -0,0 +1,91 @@ +#!/usr/bin/python + +## +## Copyright (c) 2010-2020 Intel Corporation +## +## 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. +## + +import sys +import time +from rapid_log import RapidLog +from rapid_test import RapidTest + +class CoreStatsTest(RapidTest): + """ + Class to manage the corestatstesting + """ + def __init__(self, runtime, pushgateway, environment_file, machines): + self.runtime = runtime + self.pushgateway = pushgateway + self.environment_file = environment_file + self.machines = machines + + def run(self): + # fieldnames = ['PROXID','Time','Received','Sent','NonDPReceived','NonDPSent','Delta','NonDPDelta','Dropped'] + # writer = csv.DictWriter(data_csv_file, fieldnames=fieldnames) + # writer.writeheader() + RapidLog.info("+------------------------------------------------------------------------------------------------------------------+") + RapidLog.info("| Measuring core statistics on 1 or more PROX instances |") + RapidLog.info("+-----------+-----------+------------+------------+------------+------------+------------+------------+------------+") + RapidLog.info("| PROX ID | Time | RX | TX | non DP RX | non DP TX | TX - RX | nonDP TX-RX| DROP TOT |") + RapidLog.info("+-----------+-----------+------------+------------+------------+------------+------------+------------+------------+") + duration = self.runtime + tot_drop = [] + old_rx = []; old_non_dp_rx = []; old_tx = []; old_non_dp_tx = []; old_drop = []; old_tx_fail = []; old_tsc = [] + new_rx = []; new_non_dp_rx = []; new_tx = []; new_non_dp_tx = []; new_drop = []; new_tx_fail = []; new_tsc = [] + machines_to_go = len (self.machines) + for machine in self.machines: + machine.reset_stats() + tot_drop.append(0) + old_rx.append(0); old_non_dp_rx.append(0); old_tx.append(0); old_non_dp_tx.append(0); old_drop.append(0); old_tx_fail.append(0); old_tsc.append(0) + old_rx[-1], old_non_dp_rx[-1], old_tx[-1], old_non_dp_tx[-1], old_drop[-1], old_tx_fail[-1], old_tsc[-1], tsc_hz = machine.core_stats() + new_rx.append(0); new_non_dp_rx.append(0); new_tx.append(0); new_non_dp_tx.append(0); new_drop.append(0); new_tx_fail.append(0); new_tsc.append(0) + while (duration > 0): + time.sleep(0.5) + # Get statistics after some execution time + for i, machine in enumerate(self.machines, start=0): + new_rx[i], new_non_dp_rx[i], new_tx[i], new_non_dp_tx[i], new_drop[i], new_tx_fail[i], new_tsc[i], tsc_hz = machine.core_stats() + drop = new_drop[i]-old_drop[i] + rx = new_rx[i] - old_rx[i] + tx = new_tx[i] - old_tx[i] + non_dp_rx = new_non_dp_rx[i] - old_non_dp_rx[i] + non_dp_tx = new_non_dp_tx[i] - old_non_dp_tx[i] + tsc = new_tsc[i] - old_tsc[i] + if tsc == 0 : + continue + machines_to_go -= 1 + old_drop[i] = new_drop[i] + old_rx[i] = new_rx[i] + old_tx[i] = new_tx[i] + old_non_dp_rx[i] = new_non_dp_rx[i] + old_non_dp_tx[i] = new_non_dp_tx[i] + old_tsc[i] = new_tsc[i] + tot_drop[i] = tot_drop[i] + tx - rx + RapidLog.info('|{:>10.0f}'.format(i)+ ' |{:>10.0f}'.format(duration)+' | ' + '{:>10.0f}'.format(rx) + ' | ' +'{:>10.0f}'.format(tx) + ' | '+'{:>10.0f}'.format(non_dp_rx)+' | '+'{:>10.0f}'.format(non_dp_tx)+' | ' + '{:>10.0f}'.format(tx-rx) + ' | '+ '{:>10.0f}'.format(non_dp_tx-non_dp_rx) + ' | '+'{:>10.0f}'.format(tot_drop[i]) +' |') + # writer.writerow({'PROXID':i,'Time':duration,'Received':rx,'Sent':tx,'NonDPReceived':non_dp_rx,'NonDPSent':non_dp_tx,'Delta':tx-rx,'NonDPDelta':non_dp_tx-non_dp_rx,'Dropped':tot_drop[i]}) + if self.pushgateway: + URL = self.pushgateway+ '/metrics/job/' + TestName + '/instance/' + self.environment_file + str(i) + DATA = 'PROXID {}\nTime {}\n Received {}\nSent {}\nNonDPReceived {}\nNonDPSent {}\nDelta {}\nNonDPDelta {}\nDropped {}\n'.format(i,duration,rx,tx,non_dp_rx,non_dp_tx,tx-rx,non_dp_tx-non_dp_rx,tot_drop[i]) + HEADERS = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'} + response = requests.post(url=URL, data=DATA,headers=HEADERS) + if (response.status_code != 202) and (response.status_code != 200): + RapidLog.info('Cannot send metrics to {}'.format(URL)) + RapidLog.info(DATA) + if machines_to_go == 0: + duration = duration - 1 + machines_to_go = len (self.machines) + RapidLog.info("+-----------+-----------+------------+------------+------------+------------+------------+------------+------------+") + return (True) + |