-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPlotgenerator_for_plotdata.py
More file actions
137 lines (122 loc) · 5.97 KB
/
Plotgenerator_for_plotdata.py
File metadata and controls
137 lines (122 loc) · 5.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import matplotlib.pyplot as plt
import pandas as pd
# Global variables for columns to plot and y-axis limits
COLUMNS_TO_PLOT = [
'cycles_done', 'cur_path', 'paths_total', 'pending_total',
'pending_favs', 'map_size', 'unique_crashes', 'unique_hangs',
'max_depth', 'execs_per_sec'
]
ALTERNATIVE_COLUMNS = {
'cur_path': 'Current Path',
'paths_total': 'Total Paths',
'pending_total': 'Pending Paths',
'pending_favs': 'Pending Favorites',
'map_size': 'Map Size (%)',
'unique_crashes': 'Unique Crashes',
'unique_hangs': 'Unique Hangs',
'max_depth': 'Max Depth',
'execs_per_sec': 'Executions per Second',
'cycles_done': 'Cycles Done'
}
Y_AXIS_LIMITS = {
# Add others as needed, or leave out for auto-scaling
}
LABELS_LIGHTFTP = {
'base': 'Log enabled, keepalive disabled',
'keepalivemaster': 'Log enabled, keepalive enabled',
'keepalivenologmaster': 'Log disabled, keepalive enabled',
'nologmaster': 'Log disabled, keepalive disabled'
}
LABELS_CARPET = {
'proftpd_25_3hour': 'ProFTPd A',
'proftpd_52_3hour': 'ProFTPd B',
'proftpd_57_3hour': 'ProFTPd C',
'proftpd_74': 'ProFTPd D',
'proftpd_81': 'ProFTPd E',
'basic': 'ProFTPD Basic',
'basic_rights': 'ProFTPD Basic w/ admin Rights'
}
LABELS_PROPHET = {
'proftpd_20': 'ProFTPd F',
'proftpd_33': 'ProFTPd G',
'proftpd_34': 'ProFTPd H',
'proftpd_37': 'ProFTPd I',
'proftpd_46': 'ProFTPd J',
'basic': 'ProFTPD Basic',
'basic_rights': 'ProFTPD Basic w/ admin Rights'
}
def trim_csv_to_3_hours(folders, output_csv_path, root):
for folder in folders:
input_csv_path = f"/home/marthijnvd/master/docs/proftpdafterdry/{root}/{folder}/plot_data"
output_csv_path = f"/home/marthijnvd/master/docs/proftpdafterdry/{root}/{folder}/plot_data_trimmed"
df = pd.read_csv(input_csv_path, comment=None)
df.columns = [col.lstrip('#').strip() for col in df.columns]
start_time = df['unix_time'].iloc[0]
end_time = start_time + 3 * 3600 # 3 hours in seconds
trimmed_df = df[df['unix_time'] <= end_time]
trimmed_df.to_csv(output_csv_path, index=False)
def plot_column_across_folders(column, folders, root, LABELS):
plt.figure()
for folder in folders:
data_path = f"/home/marthijnvd/master/docs/proftpdafterdry/{root}/{folder}/plot_data_trimmed"
df = pd.read_csv(data_path, comment=None)
df.columns = [col.lstrip('#').strip() for col in df.columns]
df['datetime'] = pd.to_datetime(df['unix_time'], unit='s')
if column == 'map_size':
df['map_size'] = df['map_size'].str.rstrip('%').astype(float)
# Normalize time: seconds since first measurement in this folder
start_time = df['unix_time'].iloc[0]
end_time = df['unix_time'].iloc[-1]
df['time_normalized'] = (df['unix_time'] - start_time) / (end_time - start_time) * 3
plt.plot(df['time_normalized'], df[column], marker='o', label=LABELS[folder])
titleprefix = 'CarpetFuzz' if root == 'carpet' else 'ProphetFuzz'
plt.title(f"{titleprefix} - {ALTERNATIVE_COLUMNS[column]} over Time")
plt.xlabel("Time (hours since start)")
plt.ylabel(ALTERNATIVE_COLUMNS[column])
plt.tight_layout()
plt.grid(True)
if column in Y_AXIS_LIMITS and Y_AXIS_LIMITS[column] is not None:
plt.ylim(Y_AXIS_LIMITS[column])
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
plt.savefig(f"proftpdplots/{root}_proftpd_{column}_over_time_all.png", bbox_inches='tight')
plt.close()
def plot_column_across_folders_light(column, folders, root, LABELS):
plt.figure()
for folder in folders:
data_path = f"/home/marthijnvd/master/docs/lightftpfuzzerresults/lightftprun11062025/{folder}/plot_data"
df = pd.read_csv(data_path, comment=None)
df.columns = [col.lstrip('#').strip() for col in df.columns]
df['datetime'] = pd.to_datetime(df['unix_time'], unit='s')
if column == 'map_size':
df['map_size'] = df['map_size'].str.rstrip('%').astype(float)
# Normalize time: seconds since first measurement in this folder
start_time = df['unix_time'].iloc[0]
end_time = df['unix_time'].iloc[-1]
df['time_normalized'] = (df['unix_time'] - start_time) / (end_time - start_time) * 3
plt.plot(df['time_normalized'], df[column], marker='o', label=LABELS[folder])
titleprefix = 'LightFTP'
plt.title(f"{titleprefix} - {ALTERNATIVE_COLUMNS[column]} over Time")
plt.xlabel("Time (hours since start)")
plt.ylabel(ALTERNATIVE_COLUMNS[column])
plt.tight_layout()
plt.grid(True)
if column in Y_AXIS_LIMITS and Y_AXIS_LIMITS[column] is not None:
plt.ylim(Y_AXIS_LIMITS[column])
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
plt.savefig(f"lightftpplotsv3/{root}_{column}_over_time_all.png", bbox_inches='tight')
plt.close()
if __name__ == "__main__":
folders_lightftp = ['base', 'keepalivemaster', 'keepalivenologmaster', 'nologmaster']
folders_carpet = ['proftpd_25_3hour', 'proftpd_52_3hour', 'proftpd_57_3hour', 'proftpd_74', 'proftpd_81', 'basic', 'basic_rights']
folders_prophet = ['proftpd_20', 'proftpd_33', 'proftpd_34', 'proftpd_37', 'proftpd_46', 'basic', 'basic_rights']
trim_csv_to_3_hours(folders_carpet, folders_carpet, 'carpet')
trim_csv_to_3_hours(folders_prophet, folders_prophet, 'prophet')
print("Trimmed CSV files successfully.")
for column in COLUMNS_TO_PLOT:
# plot_column_across_folders(column, folders_lightftp, 'lightftp', LABELS_LIGHTFTP)
plot_column_across_folders(column, folders_carpet, 'carpet', LABELS_CARPET)
print("Carpet plots generated successfully.")
plot_column_across_folders(column, folders_prophet, 'prophet', LABELS_PROPHET)
print("Prophet plots generated successfully.")
plot_column_across_folders_light(column, folders_lightftp, 'lightftp', LABELS_LIGHTFTP)
print("Plots generated successfully.")