Skip to content

Commit 1144e16

Browse files
committed
add operation to export part of the dataset to another file
1 parent b5fb374 commit 1144e16

File tree

4 files changed

+59
-6
lines changed

4 files changed

+59
-6
lines changed

src/hpcadvisor/__main__.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,21 @@ def selecttask_handler(args):
109109
main_cli.main_selecttask(operation, userinput, taskfile, policy, numtasks)
110110

111111

112+
def datafilter_handler(args):
113+
114+
operation = args.operation
115+
datafilter = args.datafilter
116+
exportfile = args.exportfile
117+
118+
from hpcadvisor import main_cli
119+
120+
if operation == "export":
121+
main_cli.main_datafilter(operation, datafilter, exportfile)
122+
else:
123+
print(f"Invalid operation: {operation}. Supported operations: export")
124+
sys.exit(1)
125+
126+
112127
def _process_arguments():
113128
parent_parser = argparse.ArgumentParser(add_help=False)
114129
parent_parser.add_argument(
@@ -201,6 +216,12 @@ def _process_arguments():
201216
selecttask.add_argument("-n", "--numtasks", help="Number of tasks", required=False)
202217
selecttask.set_defaults(func=selecttask_handler)
203218

219+
datafilter = subparsers.add_parser("datafilter", help="Datafilter help")
220+
datafilter.add_argument("operation", type=str)
221+
datafilter.add_argument("-df", "--datafilter", help="Data filter", required=True)
222+
datafilter.add_argument("-e", "--exportfile", help="Exported file", required=True)
223+
datafilter.set_defaults(func=datafilter_handler)
224+
204225
args = parser.parse_args()
205226

206227
debug = args.debug

src/hpcadvisor/cli_data_filter.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/env python3
2+
3+
import itertools
4+
5+
from hpcadvisor import dataset_handler, logger, price_puller, taskset_handler
6+
7+
log = logger.logger
8+
9+
10+
def export(datafilter, exportfile):
11+
12+
datapoints = dataset_handler.get_datapoints(datafilter)
13+
dataset_handler.store_datapoints(exportfile, datapoints)

src/hpcadvisor/dataset_handler.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
datapoints_label = "datapoints"
1111

1212

13+
def store_datapoints(dataset_file, datapoints):
14+
15+
with open(dataset_file, "w") as outfile:
16+
json.dump(datapoints, outfile, indent=2)
17+
18+
1319
def add_datapoint(dataset_file, datapoint):
1420
existing_data = {}
1521

@@ -35,7 +41,9 @@ def get_plotfilter(plotfilter_file):
3541
if not isinstance(value, list):
3642
plotfilter[key] = [value]
3743
else:
38-
log.warning("Plotfilter file not provided or does not exist. Consuming entire dataset")
44+
log.warning(
45+
"Plotfilter file not provided or does not exist. Consuming entire dataset"
46+
)
3947
return plotfilter
4048

4149

@@ -65,13 +73,18 @@ def is_valid_datapoint(datapoint, plotfilter):
6573
if key in datapoint:
6674
if key == "tags":
6775
anymatch = False
68-
if any(all(tag_name in datapoint[key] and datapoint[key][tag_name] == tag_value
69-
for tag_name, tag_value in values_dict.items())
70-
for values_dict in valuelist):
71-
anymatch = True
76+
if any(
77+
all(
78+
tag_name in datapoint[key]
79+
and datapoint[key][tag_name] == tag_value
80+
for tag_name, tag_value in values_dict.items()
81+
)
82+
for values_dict in valuelist
83+
):
84+
anymatch = True
7285
if not anymatch:
7386
return False
74-
elif datapoint[key] not in valuelist:
87+
elif datapoint[key] not in valuelist:
7588
return False
7689
else:
7790
return False

src/hpcadvisor/main_cli.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from hpcadvisor import (
66
batch_handler,
77
cli_advice_generator,
8+
cli_data_filter,
89
cli_plot_generator,
910
cli_task_selector,
1011
data_collector,
@@ -82,6 +83,11 @@ def main_advice(datafilter, appexectime):
8283
cli_advice_generator.generate_advice(datafilter, appexectime)
8384

8485

86+
def main_datafilter(operation, datafilter, exportfile):
87+
log.info("Data filtering ...")
88+
cli_data_filter.export(datafilter, exportfile)
89+
90+
8591
def main_selecttask(operation, userinput, taskfile, policy_name, num_tasks):
8692

8793
if operation == "gettasks":

0 commit comments

Comments
 (0)