[+] Launcher
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
java-home: /usr/lib/jvm/java-8-openjdk
|
||||||
|
spinfer: /usr/local/bin/spinfer
|
||||||
|
coccinelle: /usr/local/share/spinfer/statics
|
||||||
|
data-repo: /workspace/EECS-Research/data-source/repos
|
||||||
|
data-generated: /workspace/EECS-Research/data
|
||||||
+106
@@ -0,0 +1,106 @@
|
|||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import yaml
|
||||||
|
from dateutil.relativedelta import relativedelta
|
||||||
|
|
||||||
|
TG_TOKEN = 'bot1667933988:AAFhCZ-1poke3ARNRx9BYd-Hb93jjAc-P7s'
|
||||||
|
TG_CHAT_ID = 219458549
|
||||||
|
|
||||||
|
|
||||||
|
def log_tg(msg: str):
|
||||||
|
print(msg)
|
||||||
|
requests.get(f"https://api.telegram.org/{TG_TOKEN}/sendMessage",
|
||||||
|
params={'chat_id': TG_CHAT_ID, 'text': msg})
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
p = argparse.ArgumentParser(description='Launch FixMiner')
|
||||||
|
p.add_argument('-d', type=int, help='How many days to retrieve before the last commit')
|
||||||
|
p.add_argument('-a', type=str, help='What absolute date as the end time (yyyy-mm-dd)')
|
||||||
|
|
||||||
|
args = p.parse_args()
|
||||||
|
with open('launcher.config.yml') as f:
|
||||||
|
cfg = yaml.safe_load(f)
|
||||||
|
|
||||||
|
days = args.d or args.a
|
||||||
|
assert days, 'Must specify either -d or -a'
|
||||||
|
|
||||||
|
def run(days: str):
|
||||||
|
data = Path(cfg['data-generated']).with_suffix('.absolute' if args.a else '.relative')
|
||||||
|
day_path = data / days
|
||||||
|
|
||||||
|
if day_path.is_dir():
|
||||||
|
print(f'{days} already processed, skipping.')
|
||||||
|
return
|
||||||
|
|
||||||
|
generated_cfg = {
|
||||||
|
'java': {
|
||||||
|
'8home': cfg['java-home']
|
||||||
|
},
|
||||||
|
'spinfer': {
|
||||||
|
'home': cfg['spinfer']
|
||||||
|
},
|
||||||
|
'coccinelle': {
|
||||||
|
'home': cfg['coccinelle']
|
||||||
|
},
|
||||||
|
'dataset': {
|
||||||
|
'inputPath': str(day_path / 'patches'),
|
||||||
|
'repo': cfg['data-repo']
|
||||||
|
},
|
||||||
|
'fixminer': {
|
||||||
|
'projectType': 'java',
|
||||||
|
'datapath': str(day_path),
|
||||||
|
'pjName': 'patches',
|
||||||
|
'portDumps': 6399,
|
||||||
|
'numOfWorkers': 36,
|
||||||
|
'hostname': 'localhost',
|
||||||
|
'hunkLimit': 2,
|
||||||
|
'patchSize': 50,
|
||||||
|
'projectList': 'ALL',
|
||||||
|
'inputPath': str(day_path / 'patches'),
|
||||||
|
'redisPath': str(day_path / 'redis'),
|
||||||
|
'srcMLPath': '/usr/bin/srcml'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Absolute vs Relative timing
|
||||||
|
if args.d:
|
||||||
|
generated_cfg['fixminer']['limitCommitsBeforeDays'] = days
|
||||||
|
elif args.a:
|
||||||
|
generated_cfg['fixminer']['limitCommitsAbsoluteDate'] = days
|
||||||
|
|
||||||
|
with open("config_tmp.yml", 'w') as file:
|
||||||
|
yaml.dump(generated_cfg, file)
|
||||||
|
|
||||||
|
log_tg(f'Executing fixminer on commits before {days}.')
|
||||||
|
ret = os.system('python python/main.py config_tmp.yml pipeline')
|
||||||
|
assert ret == 0, f'Error! Return code is {ret} when running fixminer'
|
||||||
|
log_tg('Done')
|
||||||
|
|
||||||
|
|
||||||
|
# Relative Days
|
||||||
|
try:
|
||||||
|
if args.d:
|
||||||
|
days = int(days)
|
||||||
|
while True:
|
||||||
|
run(str(days))
|
||||||
|
days += 90
|
||||||
|
if args.a:
|
||||||
|
days = datetime.strptime(days, '%Y-%m-%d')
|
||||||
|
while True:
|
||||||
|
run(days.strftime('%Y-%m-%d'))
|
||||||
|
days -= relativedelta(months=3)
|
||||||
|
|
||||||
|
except KeyboardInterrupt as e:
|
||||||
|
log_tg(f'Interrupted. Before interrupt, it was processing {days}')
|
||||||
|
# print(f'Deleting folder for {days}...')
|
||||||
|
raise e
|
||||||
|
|
||||||
|
except AssertionError as e:
|
||||||
|
log_tg(str(e))
|
||||||
|
raise e
|
||||||
Reference in New Issue
Block a user