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)
Example #3
0
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)
Example #5
0
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
Example #6
0
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
Example #7
0
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
Example #8
0
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)
Example #9
0
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)
Example #10
0
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)