import datetime\r
\r
\r
-def main(verbose=False, detailed_test_stats=''):\r
- if verbose:\r
- print('Retrieving data from Google Analytics')\r
- analytics = ac.initialize_analyticsreporting()\r
- current_date = time.strftime("%Y-%m-%d")\r
- k_days_ago = datetime.datetime.now() - datetime.timedelta(days=15)\r
- start_date = str(k_days_ago.date())\r
- response = ac.get_report(analytics, start_date, current_date)\r
- ga_all_data_dict, setups = ac.export_to_tuples(response)\r
+def main(verbose=False, source='ga', detailed_test_stats='yes'):\r
+ if source == 'ga':\r
+ if verbose:\r
+ print('Retrieving data from Google Analytics')\r
+ analytics = ac.initialize_analyticsreporting()\r
+ current_date = time.strftime("%Y-%m-%d")\r
+ k_days_ago = datetime.datetime.now() - datetime.timedelta(days=15)\r
+ start_date = str(k_days_ago.date())\r
+ response = ac.get_report(analytics, start_date, current_date)\r
+ all_data_dict, setups = ac.export_to_tuples(response)\r
+ if source == 'elk':\r
+ all_data_dict = 0 # INSERT JSON FROM ELK HERE\r
dest_path = os.path.join(os.getcwd(), 'build', 'images')\r
if verbose:\r
print('Saving data to %s' % dest_path)\r
if detailed_test_stats:\r
print('generating detailed table for test results')\r
- tr.create_all_data(ga_all_data_dict, start_date, current_date, save_path=dest_path,\r
+ tr.create_all_data(all_data_dict, start_date, current_date, save_path=dest_path,\r
detailed_test_stats=detailed_test_stats)\r
if verbose:\r
print('Done without errors.')\r
import pandas as pd\r
import numpy as np\r
import matplotlib\r
+from enum import IntEnum\r
\r
matplotlib.use('Agg')\r
from matplotlib import pyplot as plt\r
import os\r
import time\r
\r
+"""\r
+This Module is structured to work with a raw data at the following JSON format:\r
+\r
+ {'setup_name': {'test1_name':[QUERY1,QUERY2,QUERY3],\r
+ 'test2_name':[QUERY1,QUERY2,QUERY3]\r
+ }\r
+ 'setup_name2': {'test1_name':[QUERY1,QUERY2,QUERY3],\r
+ 'test2_name':[QUERY1,QUERY2,QUERY3]\r
+ }\r
+ }\r
+\r
+ The Query structure is set (currently) to this:\r
+ (test_name,state, date,hour,minute,mpps_result,mpps_min,mpps_max,build_id)\r
+\r
+ it can be changed to support other formats of queries, simply change the enum class to support your desired structure\r
+ the enums specify the indexes of the data within the query tuple\r
+\r
+"""\r
+\r
+\r
+class TestQuery(IntEnum):\r
+ QUERY_DATE = 2 # date format is yyyymmdd\r
+ QUERY_HOUR = 3\r
+ QUERY_MINUTE = 4\r
+ QUERY_MPPS_RESULT = 5\r
+ QUERY_TEST_MIN = 6\r
+ QUERY_TEST_MAX = 7\r
+ QUERY_BUILD_ID = 8\r
\r
-### TODO: insert a description of a test query\r
\r
class Test:\r
- def __init__(self, name, setup_name):\r
+ def __init__(self, name, setup_name, end_date):\r
self.name = name\r
self.setup_name = setup_name\r
+ self.end_date = end_date\r
self.stats = [] # tuple\r
self.results_df = [] # dataFrame\r
self.latest_result = [] # float\r
test_mins = set()\r
test_maxs = set()\r
for query in raw_test_data:\r
- test_results.append(float(query[5]))\r
- date_formatted = time.strftime("%d-%m-%Y", time.strptime(query[2], "%Y%m%d"))\r
- time_of_res = date_formatted + '-' + query[3] + ':' + query[4]\r
+ date_formatted = time.strftime("%d-%m-%Y", time.strptime(query[int(TestQuery.QUERY_DATE)], "%Y%m%d"))\r
+ time_of_res = date_formatted + '-' + query[int(TestQuery.QUERY_HOUR)] + ':' + query[\r
+ int(TestQuery.QUERY_MINUTE)]\r
test_dates.append(time_of_res)\r
- test_build_ids.append(query[8])\r
- test_mins.add(float(query[6]))\r
- test_maxs.add(float(query[7]))\r
- test_results_df = pd.DataFrame({self.name: test_results, (self.name + ' Date'): test_dates,\r
- "Setup": ([self.setup_name] * len(test_results)), "Build Id": test_build_ids})\r
+ test_results.append(float(query[int(TestQuery.QUERY_MPPS_RESULT)]))\r
+ test_build_ids.append(query[int(TestQuery.QUERY_BUILD_ID)])\r
+ test_mins.add(float(query[int(TestQuery.QUERY_TEST_MIN)]))\r
+ test_maxs.add(float(query[int(TestQuery.QUERY_TEST_MAX)]))\r
+ test_results_df = pd.DataFrame({self.name: test_results, self.name + ' Date': test_dates,\r
+ "Setup": ([self.setup_name] * len(test_results)), "Build Id": test_build_ids},\r
+ dtype='str')\r
stats = tuple(\r
[float(test_results_df[self.name].mean()), min(test_mins), max(test_maxs)]) # stats = (avg_mpps,min,max)\r
self.latest_result = float(test_results_df[self.name].iloc[-1])\r
\r
def analyze_all_tests(self):\r
for test_name in self.test_names:\r
- t = Test(test_name, self.name)\r
+ t = Test(test_name, self.name, self.end_date)\r
t.analyze_all_test_data(self.raw_setup_data[test_name])\r
self.tests.append(t)\r
\r
\r
def plot_trend_graph_all_tests(self, save_path='', file_name='_trend_graph.png'):\r
for test_name in self.test_names:\r
- self.all_tests_data_table[test_name].plot()\r
+ self.all_tests_data_table[test_name].plot(style=['.-'])\r
plt.legend(fontsize='small', loc='best')\r
plt.ylabel('MPPS/Core (Norm)')\r
plt.title('Setup: ' + self.name)\r