#!/usr/bin/env python
#
# grsrun: this file is part of the GRS suite
# Copyright (C) 2015 Anthony G. Basile
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
import os
import re
import signal
import sys
import time
from grs import CONST
from grs import Execute
from grs import Interpret
from getopt import gnu_getopt, GetoptError
def usage(rc=1):
use = """
usage: grsrun [-m|-u|-h|-s ]
flags: Release run. Do every step in build script.
: -u Update run. Do only '+' steps.
: -m Mock run. Log what would be done.
: -s . Only run for GRS system .
: -h Print this help file.
"""
print(use)
sys.exit(rc)
def main():
try:
opts, x = gnu_getopt(sys.argv[1:], 'mus:h')
except GetoptError as e:
usage()
mock_run = False
update_run = False
grsname = None
for o, a in opts:
if o == '-h':
usage(0)
elif o == '-m':
mock_run = True
elif o == '-u':
update_run = True
elif o == '-s':
grsname = a
os.makedirs(CONST.GRS_CGROUPDIR, mode=0o555, exist_ok=True)
if not os.path.ismount(CONST.GRS_CGROUPDIR):
cmd = 'mount -t cgroup -o none,name=grs grs %s' % CONST.GRS_CGROUPDIR
Execute(cmd)
count = 0
for name in CONST.names:
if grsname:
if name != grsname:
count = count + 1
continue
if not os.fork():
subcgroup = 'run-%s' % name
subcgroupdir = os.path.join(CONST.GRS_CGROUPDIR, subcgroup)
os.makedirs(subcgroupdir, exist_ok=True)
cmd = 'cgclassify -g name=%s:/%s %d' % (CONST.GRS_CGROUP, subcgroup, os.getpid())
Execute(cmd)
mr = Interpret(CONST.pidfiles[count], run_number=count, subcgroupdir=subcgroupdir, \
mock_run=mock_run, update_run=update_run)
mr.start()
sys.exit(0)
count = count + 1
if __name__ == '__main__':
main()