def generate_monthly_reports(output_directory, monthly_expiration_metrics_df, start_date, end_date): file_name = \ file_name_utility.get_time_range_file_name('monthly_results', None, start_date, end_date) output_file_path = os.path.join(output_directory, file_name) certificate_scanner_utility.write_csv(monthly_expiration_metrics_df, output_file_path) # Write out the graph graph_file_name = \ file_name_utility.get_time_range_file_name('monthly_results', None, start_date, end_date, 'png') graph_file_path = os.path.join(output_directory, graph_file_name) progress_graph_generator.generate(monthly_expiration_metrics_df, output_directory, 'monthly', 'expiry_month', 'Month', start_date, end_date, 0, 2)
def generate_weekly_reports(output_directory, weekly_expiration_metrics_df, start_date, end_date): # Write out the spreadsheet spreadsheet_file_name = \ file_name_utility.get_time_range_file_name('weekly_results', None, start_date, end_date) spreadsheet_file_path = \ os.path.join(output_directory, spreadsheet_file_name) certificate_scanner_utility.write_csv(weekly_expiration_metrics_df, spreadsheet_file_path) # Write out the graph graph_file_name = \ file_name_utility.get_time_range_file_name('weekly_results', None, start_date, end_date, 'png') graph_file_path = os.path.join(output_directory, graph_file_name) progress_graph_generator.generate(weekly_expiration_metrics_df, output_directory, 'weekly', 'expiry_week', 'Week', start_date, end_date, 20, 4)
def __generate_num_locations_graph(original_df, output_directory, expiry_type, expiry_period_field_name, expiry_period_phrase, start_date, end_date, xtick_rotation_angle, show_every_ith_x_label): title_date_phrase = \ __generate_title_phrase(start_date, end_date, expiry_period_phrase) num_locations_title = \ "Number of Files Containing Expiring Certs\n{}".format( title_date_phrase) period_to_period_phrase = \ __generate_period_to_period_phrase(expiry_type, start_date, end_date, expiry_period_phrase) num_locations_title = \ "Expiring Cert Files {}".format(period_to_period_phrase) date_to_date_phrase = \ certificate_scanner_utility.generate_date_range_phrase(start_date, end_date) ax = original_df.plot.bar(x=expiry_period_field_name, y='total_locations', width=1.0, rot=0) ax.yaxis.set_major_locator(MaxNLocator(integer=True)) ax.tick_params(labelsize=6) legend = ax.legend() legend.remove() plt.xlabel('xlabel', fontsize=10) plt.ylabel('ylabel', fontsize=10) plt.suptitle(num_locations_title, fontsize=14) plt.title(date_to_date_phrase, fontsize=10) ith_label = 0 for label in ax.xaxis.get_ticklabels(): label.set_visible(False) for label in ax.xaxis.get_ticklabels()[::show_every_ith_x_label]: label.set_visible(True) plt.setp(ax.get_xticklabels(), rotation=xtick_rotation_angle, horizontalalignment='center') plt.xlabel('Expiry {}'.format(expiry_period_phrase)) plt.ylabel('Total Files') base_file_name = "total_{}_locations".format(expiry_type) file_name = \ file_name_utility.get_time_range_file_name(base_file_name, None, start_date, end_date, "png") output_file_path = os.path.join(output_directory, file_name) plt.savefig(output_file_path)
def generate(output_directory, all_certs_df, relevant_certs_df, start_date, end_date): file_name = \ file_name_utility.get_time_range_file_name("summary_report", None, start_date, end_date, 'txt') file_path = os.path.join(output_directory, file_name) with open(file_path, 'a') as output_file: write_report_title(output_file) write_reporting_time_frame(output_file, start_date, end_date)
def test_get_time_range_file_name_no_segment(): """ Call to get time range correctly generates a file name if no segment is specified """ start_date = dt.datetime(year=2015, month=10, day=28) end_date = dt.datetime(year=2015, month=10, day=31) actual_file_name = \ file_name_utility.get_time_range_file_name('idp_reports', None, start_date, end_date, 'txt') assert "idp_reports_range_2015-10-28_2015-10-31.txt" == actual_file_name
def test_get_time_range_no_file_extension(): """ Call to get time range correctly generates a file name if no file extension is specified. By default it should use csv """ start_date = dt.datetime(year=2015, month=10, day=28) end_date = dt.datetime(year=2015, month=10, day=31) actual_file_name = \ file_name_utility.get_time_range_file_name('idp_reports', 'idp1', start_date, end_date) expected_file_name = \ 'idp_reports_idp1_range_2015-10-28_2015-10-31.csv' assert expected_file_name == actual_file_name
def test_get_time_range_file_name_valid_dates(): """ Call to get time range correctly generates file name when given a base file name, a segment, valid start and end dates and a file extension """ start_date = dt.datetime(year=2015, month=10, day=28) end_date = dt.datetime(year=2015, month=10, day=31) actual_file_name = \ file_name_utility.get_time_range_file_name('idp_reports', 'idp1', start_date, end_date, 'txt') expected_file_name = \ "idp_reports_idp1_range_2015-10-28_2015-10-31.txt" assert expected_file_name == actual_file_name
def generate_cert_expiration_reports(output_directory, original_df, start_date, end_date): file_name = \ file_name_utility.get_time_range_file_name("cert_expirations", None, start_date, end_date) file_path = os.path.join(output_directory, file_name) df = original_df.copy() df = df[[ 'days_left', 'expiry_date', 'environment', 'type', 'serial_number', 'certificate_authority', 'organisation_name', 'status', 'num_locations', 'num_releases' ]] sort_columns = ['days_left', 'num_locations'] sort_directions = [True, False] df = df.sort_values(by=sort_columns, ascending=sort_directions) certificate_scanner_utility.write_csv(df, file_path)
def write_email_message_records_to_file(output_directory, start_date, end_date, email_message_record_lst): file_name = \ file_name_utility.get_time_range_file_name("detailed_expired_certs", None, start_date, end_date, 'txt') file_path = os.path.join(output_directory, file_name) email_message_template = \ ("-------------------------------------------------------\n" "Subject:{}\nMessage Body:\n{}" "-------------------------------------------------------\n") with open(file_path, 'a') as output_file: for email_message_record in email_message_record_lst: email_message = \ email_message_template.format(email_message_record['subject'], email_message_record['body']) output_file.write(email_message)
def test_get_time_range_file_name_invalid_date_errors(): start_date = dt.datetime(year=2015, month=10, day=31) end_date = dt.datetime(year=2015, month=10, day=15) with pytest.raises(ValueError) as ex: file_name_utility.get_time_range_file_name('idp_reports', 'idp1', None, end_date, 'csv') assert "start date cannot be null." in str(ex) with pytest.raises(ValueError) as ex: file_name_utility.get_time_range_file_name('idp_reports', 'idp1', start_date, None, 'csv') assert "end date cannot be null." in str(ex) with pytest.raises(ValueError) as ex: file_name_utility.get_time_range_file_name('idp_reports', 'idp1', start_date, end_date, 'csv') expected_error_message = \ ("start date 2015-10-31 cannot be greater than " "the end date 2015-10-15") assert expected_error_message in str(ex)