예제 #1
0
 def main(self, argv):
     args = self._parse_args(argv)
     if args.tau_dir:
         # Link to tau directory
         if argv[0] in '--tau-dir':
             del argv[0:2]
         elif argv[2] in '--tau-dir':
             del argv[2:4]
     if args.description:
         description = args.description
         if argv[0] in '--description':
             del argv[0:2]
         elif argv[2] in '--description':
             del argv[2:4]
     else:
         description = None
     launcher_cmd, application_cmds = Trial.parse_launcher_cmd(argv)
     self.logger.debug("Launcher command: %s", launcher_cmd)
     self.logger.debug("Application commands: %s", application_cmds)
     if args.tau_dir:
         Project.controller().storage.tau_dir(args.tau_dir)
         return Project.selected().experiment().managed_run(
             launcher_cmd, application_cmds, description)
     return Project.selected().experiment().managed_run(
         launcher_cmd, application_cmds, description)
예제 #2
0
    def main(self, argv):
        args = self._parse_args(argv)
        if not (args.profile or args.trace or args.sample):
            self.parser.error('You must specify at least one measurement.')

        proj_ctrl = Project.controller()
        try:
            proj = proj_ctrl.selected()
        except ProjectStorageError:
            self.logger.debug("No project found, initializing a new project.")
            PROJECT_STORAGE.connect_filesystem()
            try:
                self._create_project(args)
                if not args.bare:
                    self._populate_project(argv, args)
            except:
                PROJECT_STORAGE.destroy()
                raise
            return dashboard_cmd.main([])
        except ProjectSelectionError as err:
            err.value = "The project has been initialized but no project configuration is selected."
            raise err
        else:
            self.logger.warning("Tau is already initialized and the selected project is '%s'. Use commands like"
                                " `tau application edit` to edit the selected project or delete"
                                " '%s' to reset to a fresh environment.", proj['name'], proj_ctrl.storage.prefix)
            return EXIT_WARNING
예제 #3
0
파일: create.py 프로젝트: HPCL/taucmdr
 def main(self, argv):
     args = self._parse_args(argv)
     proj_ctrl = Project.controller()
     proj = proj_ctrl.selected()
     targ = Target.controller(proj_ctrl.storage).one({'name': args.target})
     if targ is None:
         self.parser.error("A target with name %s does not exist." %
                           args.target)
     app = Application.controller(proj_ctrl.storage).one(
         {'name': args.application})
     if app is None:
         self.parser.error("An application with name %s does not exist." %
                           args.application)
     meas = Measurement.controller(proj_ctrl.storage).one(
         {'name': args.measurement})
     if meas is None:
         self.parser.error("A measurement with name %s does not exist." %
                           args.measurement)
     data = {
         'name': args.name,
         'project': proj.eid,
         'target': targ.eid,
         'application': app.eid,
         'measurement': meas.eid
     }
     return self._create_record(PROJECT_STORAGE, data)
예제 #4
0
    def main(self, argv):
        args = self._parse_args(argv)
        store = arguments.parse_storage_flag(args)[0]
        data = {
            attr: getattr(args, attr)
            for attr in self.model.attributes if hasattr(args, attr)
        }

        # Translate names to eids
        proj_ctrl = Project.controller()
        for model in Target, Application, Measurement:
            attr = model.name.lower()
            if attr in data:
                record = model.controller(proj_ctrl.storage).one(
                    {'name': data[attr]})
                if record is None:
                    self.parser.error("Invalid %s: %s" % (attr, data[attr]))
                data[attr] = record.eid

        key_attr = self.model.key_attribute
        try:
            data[key_attr] = args.new_key
        except AttributeError:
            pass
        key = getattr(args, key_attr)
        return self._update_record(store, data, key)
예제 #5
0
    def main(self, argv):
        """Command program entry point.

        Args:
            argv (list): Command line arguments.

        Returns:
            int: Process return code: non-zero if a problem occurred, 0 otherwise
        """
        args = self._parse_args(argv)

        if args.current:
            proj = Project.controller().selected()
            try:
                expr = proj.experiment()
            except ExperimentSelectionError:
                print(
                    util.color_text('No selected experiment: ', 'red') +
                    'Use `%s` to create or select an experiment.' % select_cmd)
            else:
                print expr['name']
            retval = EXIT_SUCCESS
        else:
            retval = super(ExperimentListCommand, self).main(argv)
        return retval
예제 #6
0
    def main(self, argv):
        args = self._parse_args(argv)
        if not (args.baseline or args.profile or args.trace or args.sample):
            self.parser.error('You must specify at least one measurement.')

        proj_ctrl = Project.controller()
        try:
            proj = proj_ctrl.selected()
        except ProjectStorageError:
            self.logger.debug("No project found, initializing a new project.")
            PROJECT_STORAGE.connect_filesystem()
            try:
                self._create_project(args)
                if not args.bare:
                    self._populate_project(args)
            except:
                PROJECT_STORAGE.destroy()
                raise
            return dashboard_cmd.main([])
        except ProjectSelectionError as err:
            err.value = "The project has been initialized but no project configuration is selected."
            raise err
        else:
            self.logger.warning(
                "Tau is already initialized and the selected project is '%s'. Use commands like"
                " `tau application edit` to edit the selected project or delete"
                " '%s' to reset to a fresh environment.", proj['name'],
                proj_ctrl.storage.prefix)
            return EXIT_WARNING
예제 #7
0
 def _project_eid(self):
     """Avoid multiple lookup of the selected project since project selection will not change mid-process."""
     try:
         return self._selected_project.eid
     except AttributeError:
         # pylint: disable=attribute-defined-outside-init
         self._selected_project = Project.controller(self.storage).selected() 
         return self._selected_project.eid
예제 #8
0
 def _project_eid(self):
     """Avoid multiple lookup of the selected project since project selection will not change mid-process."""
     try:
         return self._selected_project.eid
     except AttributeError:
         # pylint: disable=attribute-defined-outside-init
         self._selected_project = Project.controller(self.storage).selected() 
         return self._selected_project.eid
예제 #9
0
 def test_rename(self):
     self.reset_project_storage()
     argv = ['proj1', '--new-name', 'proj2']
     self.assertCommandReturnValue(0, edit.COMMAND, argv)
     proj_ctrl = Project.controller()
     self.assertIsNone(proj_ctrl.one({'name': 'proj1'}))
     self.assertIsNotNone(proj_ctrl.one({'name': 'proj2'}))
     self.assertCommandReturnValue(0, edit.COMMAND, ['proj2', '--new-name', 'proj1'])
예제 #10
0
 def test_rename(self):
     self.reset_project_storage()
     argv = ['proj1', '--new-name', 'proj2']
     self.assertCommandReturnValue(0, edit.COMMAND, argv)
     proj_ctrl = Project.controller()
     self.assertIsNone(proj_ctrl.one({'name': 'proj1'}))
     self.assertIsNotNone(proj_ctrl.one({'name': 'proj2'}))
     self.assertCommandReturnValue(0, edit.COMMAND, ['proj2', '--new-name', 'proj1'])
예제 #11
0
 def main(self, argv):
     args = self._parse_args(argv)
     proj_ctrl = Project.controller()
     name = args.name
     proj = proj_ctrl.one({"name": name})
     if not proj:
         self.parser.error("There is no project configuration named '%s.'" % name)
     proj_ctrl.select(proj)
     return EXIT_SUCCESS
예제 #12
0
 def main(self, argv):
     args = self._parse_args(argv)
     proj_ctrl = Project.controller()
     name = args.name
     proj = proj_ctrl.one({"name": name})
     if not proj:
         self.parser.error("There is no project configuration named '%s.'" %
                           name)
     proj_ctrl.select(proj)
     return EXIT_SUCCESS
예제 #13
0
파일: list.py 프로젝트: HPCL/taucmdr
    def main(self, argv):
        """Command program entry point.

        Args:
            argv (list): Command line arguments.

        Returns:
            int: Process return code: non-zero if a problem occurred, 0 otherwise
        """
        args = self._parse_args(argv)
        style_args = ['--' + args.style] if hasattr(args, 'style') else []
        levels = arguments.parse_storage_flag(args)
        keys = getattr(args, 'keys', [])
        single = (len(keys) == 1 and len(levels) == 1)

        if single:
            proj_name = keys[0]
            self.title_fmt = "Project Configuration (%(storage_path)s)"
            target_list_cmd.title_fmt = "Targets in project '%s'" % proj_name
            application_list_cmd.title_fmt = "Applications in project '%s'" % proj_name
            measurement_list_cmd.title_fmt = "Measurements in project '%s'" % proj_name
            experiment_list_cmd.title_fmt = "Experiments in project '%s'" % proj_name

        retval = super(ProjectListCommand, self).main(argv)

        if single:
            storage = levels[0]
            ctrl = Project.controller(storage)
            proj = ctrl.one({'name': keys[0]}, context=False)
            for cmd, prop in ((target_list_cmd, 'targets'),
                              (application_list_cmd, 'applications'),
                              (measurement_list_cmd, 'measurements'),
                              (experiment_list_cmd, 'experiments')):
                primary_key = proj.attributes[prop]['collection'].key_attribute
                records = proj.populate(prop, context=False)
                if records:
                    cmd.main([record[primary_key] for record in records] +
                             ['-p'] + [proj['name']] + style_args)
                else:
                    label = util.color_text('%s: No %s' % (proj['name'], prop),
                                            color='red',
                                            attrs=['bold'])
                    print "%s.  Use `%s` to view available %s.\n" % (label,
                                                                     cmd, prop)
            try:
                expr = proj.experiment()
                if not isinstance(expr, NoneType):
                    print util.color_text("Selected Experiment: ",
                                          'cyan') + expr['name']
            except ExperimentSelectionError:
                print(
                    util.color_text('No selected experiment: ', 'red') +
                    'Use `%s` to create or select an experiment.' % select_cmd)

        return retval
예제 #14
0
 def _update_record(self, store, data, key):
     proj_ctrl = Project.controller()
     expr = Project.selected().experiment()
     ctrl = self.model.controller(store)
     key_attr = self.model.key_attribute
     if not ctrl.exists({key_attr: key, 'experiment': expr.eid}):
         self.parser.error(
             "No %s-level %s with %s='%s'." %
             (ctrl.storage.name, self.model_name, key_attr, key))
     ctrl.update(data, {key_attr: key, 'experiment': expr.eid})
     self.logger.info("Updated %s '%s'", self.model_name, key)
     return EXIT_SUCCESS
예제 #15
0
파일: list.py 프로젝트: zbeekman/taucmdr
    def main(self, argv):
        """Command program entry point.

        Args:
            argv (list): Command line arguments.

        Returns:
            int: Process return code: non-zero if a problem occurred, 0 otherwise
        """
        args = self._parse_args(argv)
        style_args = ['--' + args.style] if hasattr(args, 'style') else []
        levels = arguments.parse_storage_flag(args)
        keys = getattr(args, 'keys', [])
        single = (len(keys) == 1 and len(levels) == 1)

        if single:
            proj_name = keys[0]
            self.title_fmt = "Project Configuration (%(storage_path)s)"
            target_list_cmd.title_fmt = "Targets in project '%s'" % proj_name
            application_list_cmd.title_fmt = "Applications in project '%s'" % proj_name
            measurement_list_cmd.title_fmt = "Measurements in project '%s'" % proj_name
            experiment_list_cmd.title_fmt = "Experiments in project '%s'" % proj_name

        retval = super(ProjectListCommand, self).main(argv)

        if single:
            storage = levels[0]
            ctrl = Project.controller(storage)
            proj = ctrl.one({'name': keys[0]})
            for cmd, prop in ((target_list_cmd, 'targets'),
                              (application_list_cmd, 'applications'),
                              (measurement_list_cmd, 'measurements'),
                              (experiment_list_cmd, 'experiments')):
                primary_key = proj.attributes[prop]['collection'].key_attribute
                records = proj.populate(prop)
                if records:
                    cmd.main([record[primary_key] for record in records] + style_args)
                else:
                    label = util.color_text('%s: No %s' % (proj['name'], prop), color='red', attrs=['bold'])
                    print "%s.  Use `%s` to view available %s.\n" % (label, cmd, prop)
            if proj.get('force_tau_options', False):
                self.logger.warning("Project '%s' will add '%s' to TAU_OPTIONS without error checking.", 
                                    proj['name'], ' '.join(proj['force_tau_options']))
            try:
                expr = proj.experiment()
            except ExperimentSelectionError:
                print (util.color_text('No selected experiment: ', 'red') + 
                       'Use `%s` to create or select an experiment.' % select_cmd)
            else:
                print util.color_text("Selected Experiment: ", 'cyan') + expr['name']

        return retval
예제 #16
0
    def get(self):
        ds = []
        ns = [p['name'] for p in Project.controller().all()]

        for n in ns:
            p = Project.controller().one({'name': n})

            d = {
                "name":
                n,
                "targets": [x['name'] for x in p.populate('targets')],
                "applications":
                [x['name'] for x in p.populate('applications')],
                "measurements":
                list(set([x['name'] for x in p.populate('measurements')])),
                "num_experiments":
                len(p['experiments'])
            }
            ds.append(d)

        self.set_header("Access-Control-Allow-Origin", "*")
        self.finish({"projects": ds})
예제 #17
0
파일: edit.py 프로젝트: zbeekman/taucmdr
    def main(self, argv):
        from taucmdr.cli.commands.project.list import COMMAND as project_list
        args = self._parse_args(argv)
    
        tar_ctrl = Target.controller(PROJECT_STORAGE)
        app_ctrl = Application.controller(PROJECT_STORAGE)
        meas_ctrl = Measurement.controller(PROJECT_STORAGE)
        proj_ctrl = Project.controller()
    
        project_name = args.name
        project = proj_ctrl.one({'name': project_name})
        if not project:
            self.parser.error("'%s' is not a project name. Type `%s` to see valid names." % 
                              (project_name, project_list.command))
    
        updates = dict(project.element)
        updates['name'] = getattr(args, 'new_name', project_name)
        targets = set(project['targets'])
        applications = set(project['applications'])
        measurements = set(project['measurements'])
        
        added = self._parse_add_args(args, tar_ctrl, app_ctrl, meas_ctrl, targets, applications, measurements)
        removed = self._parse_remove_args(args, tar_ctrl, app_ctrl, meas_ctrl, targets, applications, measurements)
    
        updates['targets'] = list(targets)
        updates['applications'] = list(applications)
        updates['measurements'] = list(measurements)
        
        try:
            force_tau_options = args.force_tau_options
        except AttributeError:
            pass
        else:
            # Unset force_tau_options if it was already set and --force-tau-options=none 
            if updates.pop('force_tau_options', False) and [i.lower().strip() for i in force_tau_options] == ['none']:
                proj_ctrl.unset(['force_tau_options'], {'name': project_name})
                self.logger.info("Removed 'force-tau-options' from project configuration '%s'.", project_name)
            else:
                updates['force_tau_options'] = force_tau_options
                self.logger.info("Added 'force-tau-options' to project configuration '%s'.", project_name)

        proj_ctrl.update(updates, {'name': project_name})
        for model in added:
            self.logger.info("Added %s '%s' to project configuration '%s'.", 
                             model.name.lower(), model[model.key_attribute], project_name)
        for model in removed:
            self.logger.info("Removed %s '%s' from project configuration '%s'.", 
                             model.name.lower(), model[model.key_attribute], project_name)
        return EXIT_SUCCESS
예제 #18
0
 def test_set_tau_force_options(self):
     self.reset_project_storage()
     proj_ctrl = Project.controller()
     # Check that 'force-tau-options' is unset in the new project configuration
     proj1 = proj_ctrl.one({'name': 'proj1'})
     self.assertFalse('force-tau-options' in proj1)
     # Test --force-tau-options
     tau_options = "-optVerbose -optNoCompInst"
     argv = ['proj1', '--force-tau-options=%s' % tau_options]
     self.assertCommandReturnValue(0, edit.COMMAND, argv)
     # Check that 'force-tau-options' is now a list containing the expected options in the project record
     proj1 = proj_ctrl.one({'name': 'proj1'})
     self.assertIsNotNone(proj1)
     print proj1
     self.assertListEqual(proj1['force_tau_options'], [tau_options])
예제 #19
0
 def main(self, argv):
     args = self._parse_args(argv)
     proj_ctrl = Project.controller()
     trial_ctrl = Trial.controller(proj_ctrl.storage)
     proj = proj_ctrl.selected()
     expr = proj.experiment()
     try:
         number = int(args.number)
     except ValueError:
         self.parser.error("Invalid trial number: %s" % args.number)
     fields = {'experiment': expr.eid, 'number': number}
     if not trial_ctrl.exists(fields):
         self.parser.error("No trial number %s in the current experiment.  "
                           "See `trial list` to see all trial numbers." % number)
     trial_ctrl.delete(fields)
     self.logger.info('Deleted trial %s', number)
     return EXIT_SUCCESS
예제 #20
0
 def main(self, argv):
     args = self._parse_args(argv)
     proj_ctrl = Project.controller()
     trial_ctrl = Trial.controller(proj_ctrl.storage)
     proj = proj_ctrl.selected()
     expr = proj.experiment()
     try:
         number = int(args.number)
     except ValueError:
         self.parser.error("Invalid trial number: %s" % args.number)
     fields = {'experiment': expr.eid, 'number': number}
     if not trial_ctrl.exists(fields):
         self.parser.error("No trial number %s in the current experiment.  "
                           "See `trial list` to see all trial numbers." %
                           number)
     trial_ctrl.delete(fields)
     self.logger.info('Deleted trial %s', number)
     return EXIT_SUCCESS
예제 #21
0
파일: delete.py 프로젝트: HPCL/taucmdr
 def main(self, argv):
     args = self._parse_args(argv)
     proj_ctrl = Project.controller()
     trial_ctrl = Trial.controller(proj_ctrl.storage)
     proj = proj_ctrl.selected()
     expr = proj.experiment()
     try:
         numbers = [int(number) for number in args.number]
     except ValueError:
         self.parser.error("Invalid trial number: %s" % args.number)
     fields = [{'experiment': expr.eid, 'number': number} for number in numbers]
     if not any([trial_ctrl.exists(field) for field in fields]):
         self.parser.error("No trial number %s in the current experiment.  "
                           "See `trial list` to see all trial numbers." % number)
     for i, _ in enumerate(fields):
         trial_ctrl.delete(fields[i])
         self.logger.info('Deleted trial %s', numbers[i])
     return EXIT_SUCCESS
예제 #22
0
파일: edit.py 프로젝트: zbeekman/taucmdr
    def main(self, argv):
        args = self._parse_args(argv)
        store = arguments.parse_storage_flag(args)[0]
        data = {attr: getattr(args, attr) for attr in self.model.attributes if hasattr(args, attr)}

        proj_ctrl = Project.controller()
        for model in Target, Application, Measurement:
            attr = model.name.lower()
            if attr in data:
                record = model.controller(proj_ctrl.storage).one({'name': data[attr]})
                data[attr] = record.eid
             
        key_attr = self.model.key_attribute
        try:
            data[key_attr] = args.new_key
        except AttributeError:
            pass
        key = getattr(args, key_attr)
        return self._update_record(store, data, key)
예제 #23
0
 def main(self, argv):
     args = self._parse_args(argv)
     proj_ctrl = Project.controller()
     proj = proj_ctrl.selected()
     targ = Target.controller(proj_ctrl.storage).one({'name': args.target})
     if targ is None:
         self.parser.error("A target with name %s does not exist." %args.target)
     app = Application.controller(proj_ctrl.storage).one({'name': args.application})
     if app is None:
         self.parser.error("An application with name %s does not exist." %args.application)
     meas = Measurement.controller(proj_ctrl.storage).one({'name': args.measurement})
     if meas is None:
         self.parser.error("A measurement with name %s does not exist." %args.measurement)
     data = {'name': args.name,
             'project': proj.eid,
             'target': targ.eid,
             'application': app.eid,
             'measurement': meas.eid}
     return self._create_record(PROJECT_STORAGE, data)
예제 #24
0
파일: cli_view.py 프로젝트: HPCL/taucmdr
    def main(self, argv):
        args = self._parse_args(argv)
        keys = getattr(args, 'keys', None)
        style = getattr(args, 'style', None) or self.default_style
        storage_levels = arguments.parse_storage_flag(args)

        context = True
        if args.project:
            matching = Project.controller().one({'name': args.project})
            if matching:
                LOGGER.debug("Using project %s", matching.eid)
                context = [('project', matching.eid),
                           ('projects', matching.eid)]
            else:
                LOGGER.debug("Project %s not found", args.project)

        return self._list_records([l.name for l in storage_levels],
                                  keys,
                                  style,
                                  context=context)
예제 #25
0
파일: edit.py 프로젝트: HPCL/taucmdr
    def main(self, argv):
        from taucmdr.cli.commands.project.list import COMMAND as project_list
        args = self._parse_args(argv)

        tar_ctrl = Target.controller(PROJECT_STORAGE)
        app_ctrl = Application.controller(PROJECT_STORAGE)
        meas_ctrl = Measurement.controller(PROJECT_STORAGE)
        proj_ctrl = Project.controller()

        project_name = args.name
        project = proj_ctrl.one({'name': project_name})
        if not project:
            self.parser.error(
                "'%s' is not a project name. Type `%s` to see valid names." %
                (project_name, project_list.command))

        updates = dict(project)
        updates['name'] = getattr(args, 'new_name', project_name)
        targets = set(project['targets'])
        applications = set(project['applications'])
        measurements = set(project['measurements'])

        added = self._parse_add_args(args, tar_ctrl, app_ctrl, meas_ctrl,
                                     targets, applications, measurements)
        removed = self._parse_remove_args(args, tar_ctrl, app_ctrl, meas_ctrl,
                                          targets, applications, measurements)

        updates['targets'] = list(targets)
        updates['applications'] = list(applications)
        updates['measurements'] = list(measurements)

        proj_ctrl.update(updates, {'name': project_name})
        for model in added:
            self.logger.info("Added %s '%s' to project configuration '%s'.",
                             model.name.lower(), model[model.key_attribute],
                             project_name)
        for model in removed:
            self.logger.info(
                "Removed %s '%s' from project configuration '%s'.",
                model.name.lower(), model[model.key_attribute], project_name)
        return EXIT_SUCCESS
예제 #26
0
 def main(self, argv):
     args = self._parse_args(argv)
     subargs = ['--' + args.style]
     proj_ctrl = Project.controller()
     print
     try:
         proj = proj_ctrl.selected()
     except ProjectSelectionError as err:
         project_count = proj_ctrl.count()
         if project_count > 0:
             project_list_cmd.main(subargs)
             err.value = "No project configuration selected. There are %d configurations available." % project_count
         else:
             from taucmdr.cli.commands.project.create import COMMAND as project_create_cmd
             err.value = "No project configurations exist."
             err.hints = ['Use `%s` to create a new project configuration.' % project_create_cmd]
         raise err
     else:
         project_list_cmd.main(subargs + [proj['name']])
     print
     return EXIT_SUCCESS
예제 #27
0
    def select(cls, name):
        """Changes the selected experiment in the current project.
        
        Raises:
            ExperimentSelectionError: No experiment with the given name in the currently selected project.

        Args:
            name (str): Name of the experiment to select.
        """
        proj_ctrl = Project.controller()
        proj = proj_ctrl.selected()
        expr_ctrl = cls.controller()
        data = {"name": name, "project": proj.eid}
        matching = expr_ctrl.search(data)
        if not matching:
            raise ExperimentSelectionError("There is no experiment named '%s' in project '%s'." % (name, proj['name']))
        elif len(matching) > 1:
            raise InternalError("More than one experiment with data %r exists!" % data)
        else:
            expr = matching[0]
        proj_ctrl.select(proj, expr)
예제 #28
0
    def select(cls, name):
        """Changes the selected experiment in the current project.
        
        Raises:
            ExperimentSelectionError: No experiment with the given name in the currently selected project.

        Args:
            name (str): Name of the experiment to select.
        """
        proj_ctrl = Project.controller()
        proj = proj_ctrl.selected()
        expr_ctrl = cls.controller()
        data = {"name": name, "project": proj.eid}
        matching = expr_ctrl.search(data)
        if not matching:
            raise ExperimentSelectionError("There is no experiment named '%s' in project '%s'." % (name, proj['name']))
        elif len(matching) > 1:
            raise InternalError("More than one experiment with data %r exists!" % data)
        else:
            expr = matching[0]
        proj_ctrl.select(proj, expr)
예제 #29
0
파일: initialize.py 프로젝트: HPCL/taucmdr
    def main(self, argv):
        args = self._parse_args(argv)
        vargs = vars(args)
        vargs['init_options'] = ' '.join(argv)
        if not (args.baseline or args.profile or args.trace or args.sample):
            self.parser.error('You must specify at least one measurement.')

        proj_ctrl = Project.controller()
        if args.force:
            proj_ctrl.storage.force_cwd(True)
        try:
            proj = proj_ctrl.selected()
        except ProjectStorageError:
            self.logger.debug("No project found, initializing a new project.")
            PROJECT_STORAGE.connect_filesystem()
            try:
                self._create_project(args)
                if not args.bare:
                    self._populate_project(args)
            except:
                PROJECT_STORAGE.destroy()
                raise
            return dashboard_cmd.main([])
        except ProjectSelectionError as err:
            err.value = ("The project has been initialized in %s but no project configuration is selected."
                         % proj_ctrl.storage.prefix)
            raise err
        else:
            cwd_prefix = os.path.realpath(os.path.join(os.getcwd(), PROJECT_DIR))
            force_str = ""
            if cwd_prefix != proj_ctrl.storage.prefix:
                force_str = ("Or use the `tau initialize --force` command to initialize "
                             "a project in the current directory.")
            self.logger.warning("Tau is already initialized and the selected project is '%s'. Use commands like"
                                " `tau application edit` to edit the selected project or delete"
                                " '%s' to reset to a fresh environment. %s",
                                proj['name'], proj_ctrl.storage.prefix, force_str)
            return EXIT_WARNING
예제 #30
0
파일: renumber.py 프로젝트: HPCL/taucmdr
    def main(self, argv):
        args = self._parse_args(argv)
        trial_numbers = []
        for num in getattr(args, 'trial_numbers', []):
            try:
                trial_numbers.append(int(num))
            except ValueError:
                self.parser.error("Invalid trial number: %s" % num)
        new_trial_numbers = []
        for num in getattr(args, 'to', []):
            try:
                new_trial_numbers.append(int(num))
            except ValueError:
                self.parser.error("Invalid trial trial number: %s" % num)
        if len(trial_numbers) != len(new_trial_numbers):
            self.parser.error(
                "Invalid number of trials."
                " Number of old trials ids should be equal to number of new trial ids."
            )

        self.logger.info("Renumbering " + ', '.join([
            '{} => {}'.format(i, j)
            for (i, j) in itertools.izip(trial_numbers, new_trial_numbers)
        ]))
        proj_ctrl = Project.controller()
        trial_ctrl = Trial.controller(proj_ctrl.storage)
        expr = Project.selected().experiment()
        # Check that no trials deleted with this renumbering
        for trial_pair in range(0, len(trial_numbers)):
            if new_trial_numbers[trial_pair] not in trial_numbers \
               and trial_ctrl.exists({'number': new_trial_numbers[trial_pair], 'experiment': expr.eid}):
                self.parser.error(
                    "This renumbering would delete trial %s. If you would like to delete"
                    " this trial use the `trial delete` subcommand." %
                    new_trial_numbers[trial_pair])
        trial_ctrl.renumber(trial_numbers, new_trial_numbers)
        return EXIT_SUCCESS
예제 #31
0
 def main(self, argv):
     from taucmdr.cli.commands.project.list import COMMAND as project_list
     args = self._parse_args(argv)
 
     tar_ctrl = Target.controller(PROJECT_STORAGE)
     app_ctrl = Application.controller(PROJECT_STORAGE)
     meas_ctrl = Measurement.controller(PROJECT_STORAGE)
     proj_ctrl = Project.controller()
 
     project_name = args.name
     project = proj_ctrl.one({'name': project_name})
     if not project:
         self.parser.error("'%s' is not a project name. Type `%s` to see valid names." % 
                           (project_name, project_list.command))
 
     updates = dict(project)
     updates['name'] = getattr(args, 'new_name', project_name)
     targets = set(project['targets'])
     applications = set(project['applications'])
     measurements = set(project['measurements'])
     
     added = self._parse_add_args(args, tar_ctrl, app_ctrl, meas_ctrl, targets, applications, measurements)
     removed = self._parse_remove_args(args, tar_ctrl, app_ctrl, meas_ctrl, targets, applications, measurements)
 
     updates['targets'] = list(targets)
     updates['applications'] = list(applications)
     updates['measurements'] = list(measurements)
     
     proj_ctrl.update(updates, {'name': project_name})
     for model in added:
         self.logger.info("Added %s '%s' to project configuration '%s'.", 
                          model.name.lower(), model[model.key_attribute], project_name)
     for model in removed:
         self.logger.info("Removed %s '%s' from project configuration '%s'.", 
                          model.name.lower(), model[model.key_attribute], project_name)
     return EXIT_SUCCESS
예제 #32
0
파일: dashboard.py 프로젝트: HPCL/taucmdr
 def main(self, argv):
     args = self._parse_args(argv)
     subargs = ['--' + args.style]
     proj_ctrl = Project.controller()
     print
     try:
         proj = proj_ctrl.selected()
     except ProjectSelectionError as err:
         project_count = proj_ctrl.count()
         if project_count > 0:
             project_list_cmd.main(subargs)
             err.value = "No project configuration selected. There are %d configurations available." % project_count
         else:
             from taucmdr.cli.commands.project.create import COMMAND as project_create_cmd
             err.value = "No project configurations exist."
             err.hints = [
                 'Use `%s` to create a new project configuration.' %
                 project_create_cmd
             ]
         raise err
     else:
         project_list_cmd.main(subargs + [proj['name']])
     print
     return EXIT_SUCCESS
예제 #33
0
파일: renumber.py 프로젝트: HPCL/taucmdr
 def create_new_trial(self, old, new):
     proj_ctrl = Project.controller()
     trial_ctrl = Trial.controller(proj_ctrl.storage)
     records = dict(trial_ctrl.one({'number': old}))
     records['number'] = new
     trial_ctrl.create(records)
예제 #34
0
    def get(self):
        def yn(v):
            return "yes" if v else "no"

        ds = {
            "targets": [],
            "applications": [],
            "measurements": [],
            "experiments": []
        }

        pname = self.get_argument("project")
        p = Project.controller().one({'name': pname})

        # targets
        rs = p.populate("targets")
        for r in rs:
            r = r.populate()
            mpicc = MPI_CC.keyword
            shmcc = SHMEM_CC.keyword
            d = {
                "name": r["name"],
                "host_os": r["host_os"],
                "host_arch": r["host_arch"],
                "host_compilers": r[CC.keyword]["family"],
                "mpi_compilers": r[mpicc]["family"] if mpicc in r else "None",
                "shmem_compilers": r[shmcc]["family"] if shmcc in r else "None"
            }
            ds["targets"].append(d)

        # applications
        rs = p.populate("applications")
        for r in rs:
            r = r.populate()
            d = {
                "name": r["name"],
                "linkage": r["linkage"],
                "openmp": yn(r["openmp"]),
                "pthreads": yn(r["pthreads"]),
                "tbb": yn(r["tbb"]),
                "mpi": yn(r["mpi"]),
                "cuda": yn(r["cuda"]),
                "opencl": yn(r["opencl"]),
                "shmem": yn(r["shmem"]),
                "mpc": yn(r["mpc"])
            }
            ds["applications"].append(d)

        # measurements
        rs = p.populate("measurements")
        for r in rs:
            r = r.populate()
            d = {
                "name": r["name"],
                "profile": r["profile"],
                "trace": r["trace"],
                "sample": yn(r["sample"]),
                "source_inst": r["source_inst"],
                "compiler_inst": r["compiler_inst"],
                "openmp": r["openmp"],
                "cuda": yn(r["cuda"]),
                "io": yn(r["io"]),
                "mpi": yn(r["mpi"]),
                "shmem": yn(r["shmem"])
            }
            ds["measurements"].append(d)

        # experiments
        rs = p.populate("experiments")
        for r in rs:
            r = r.populate()
            d = {
                "name":
                r["name"],
                "num_trials":
                str(len(r["trials"])),
                "data_size":
                util.human_size(
                    sum(int(t.get('data_size', 0)) for t in r["trials"])),
                "target":
                r["target"]["name"],
                "application":
                r["application"]["name"],
                "measurement":
                r["measurement"]["name"],
                "tau_makefile":
                r["tau_makefile"]
            }
            ds["experiments"].append(d)

        self.set_header("Access-Control-Allow-Origin", "*")
        self.finish(ds)