Пример #1
0
/*
 * Resets the backend database.  This function shall be called only when
 * nothing holds the database open.
 *
 * ARGUMENTS:
 *      path            Pathname of the database directory.  Shall not be NULL.
 *                      The client can free it upon return.
 * RETURNS:
 *      0               Success.
 *      EIO             Backend database error.  "log_start()" called.
 */
RegStatus
beReset(
    const char* const   path)
{
    RegStatus   status;

    assert(NULL != path);

    if (0 == (status = verifyBackend(path))) {
        /*
         * The database is OK.  Make a backup copy.
         */
        status = copyDatabase(path, "", ".bck");
    }
    else if (ECANCELED == status) {
        /*
         * The backend database needs to be restored.
         */
        log_add("Restoring from backup");
        log_log(LOG_NOTICE);

        if (0 == (status = removeEnvironment(path))) {
            status = copyDatabase(path, ".bck", "");
        }
    }

    return status;
}
Пример #2
0
/*
 * Removes the backend database.  This function shall be called only when
 * nothing holds the database open.
 *
 * ARGUMENTS:
 *      path            Pathname of the database directory.  Shall not be NULL.
 *                      The client can free it upon return.
 * RETURNS:
 *      0               Success.
 *      ENOMEM          System error.  "log_start()" called.
 *      EIO             Backend database error.  "log_start()" called.
 */
RegStatus
beRemove(
    const char* const   path)
{
    RegStatus   status;
    DB_ENV*     env;

    assert(NULL != path);

    /*
     * First, remove the database.
     */
    if (0 == (status = openEnvironment(path, &env))) {
        if (status = env->dbremove(env, NULL, DB_FILENAME, NULL, 0)) {
            log_add("Couldn't remove database file \"%s\" in \"%s\"",
                    DB_FILENAME, path);
            status = EIO;
        }

        (void)env->close(env, 0);
    }                                   /* "env" allocated */

    /*
     * Then, remove the database environment.
     */
    if (0 == status)
        status = removeEnvironment(path);

    return status;
}
Пример #3
0
OdroidReader::OdroidReader(QWidget *parent) :
	QMainWindow(parent), hasExecuted(false), isLoaded(false), es(ExperimentState::Idle),
	ui(new Ui::OdroidReader), currentExp(nullptr), currentEnv(nullptr), selectedExp(nullptr)
{
	ui->setupUi(this);
	ui->runSelected->setMenu(new QMenu("On Client"));
	ui->totalProgress->hide();
	ui->experimentProgress->hide();
	ui->environmentProgress->hide();
	ui->runAll->setMenu(new QMenu("On Client"));
	ui->ip->setValidator(new IPValidator());
	ui->sourceType->tabBar()->setStyle(new TabStyle(Qt::Horizontal));
	ui->sensors->setColumnWidth(0,30);
	ui->globalPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
	connect(ui->globalPlot,&QCustomPlot::mouseDoubleClick,[this] (QMouseEvent*) {
		for (DataSeries* d : data) d->clear();
		for (QCPGraph* g : graphs) if (g != nullptr) g->clearData();
	});

	DeviceMonitor *dm = new SmartPowerMonitor();
	devMonitors.append(dm);
	dm->monitor(1000);

	connect(ui->globalPlot,&QCustomPlot::mouseMove,this,&OdroidReader::plotMousePress);

	connect(dm,&DeviceMonitor::addSource,[this] (DataSource* src) {
		ui->foundDevices->addItem(src->descriptor(),QVariant::fromValue(src));
	});

	connect(dm,&DeviceMonitor::removeSource, [this] (DataSource* src) {
		if (sources.contains(src)) {
			if (src->isRunning()) src->start(); //Terminate if running
			sources.remove(sources.indexOf(src));
			delete src->property("Item").value<QListWidgetItem*>();
		}
	   ui->foundDevices->removeItem(ui->foundDevices->findData(QVariant::fromValue(src)));
	});

    ui->stopSampling->hide();
	ui->loadProgress->hide();

	connect(ui->runSelected->menu(),&QMenu::triggered,this,&OdroidReader::runSelectedOnSource);
	connect(ui->runAll->menu(),&QMenu::triggered,this,&OdroidReader::runAllOnSource);
	connect(ui->environment,SIGNAL(clicked(QModelIndex)),this,SLOT(removeEnvironment(QModelIndex)));
    connect(ui->stopSampling,&QPushButton::clicked,[this]() {
        ui->addDevice->setEnabled(true);
        ui->addConnection->setEnabled(true);
	});

    connect(ui->startSampling,&QPushButton::clicked,[this]() {
		hasExecuted = true;
        ui->addDevice->setEnabled(false);
        ui->addConnection->setEnabled(false);
	});

    connect(ui->startSampling,&QPushButton::clicked,[this] () {
        ui->startSampling->hide();
        ui->stopSampling->show();
		ui->repetitions->setEnabled(true);
	});

	connect(ui->stopSampling,&QPushButton::clicked,[this] () {
        for (DataSource* src : sources) src->stop();
        ui->startSampling->show();
        ui->stopSampling->hide();
		ui->totalProgress->hide();
		ui->experimentProgress->hide();
		ui->environmentProgress->hide();
		ui->repetitions->setDisabled(true);
	});

	connect(qApp,SIGNAL(aboutToQuit()),this,SLOT(aboutToQuit()));
	connect(&envs,&Environments::addedSet, [this] (const EnvironmentSet* e) {
		ui->availEnvs->addItem(e->name());
	});

	connect(&envs,&Environments::removingSet, [this] (const EnvironmentSet* e) {
		if (ui->availEnvs->findText(e->name()) == -1) return;
		ui->availEnvs->removeItem(ui->availEnvs->findText(e->name()));
		for (QListWidgetItem *i : ui->expEnvs->findItems(e->name(),Qt::MatchCaseSensitive))
			delete i;
	});

	connect(&envs,&Environments::renamingSet, [this] (QString oldName, QString newName) {
		int oldIdx = ui->availEnvs->findText(oldName);
		if (oldIdx == -1) return;
		ui->availEnvs->removeItem(oldIdx);
		ui->availEnvs->insertItem(oldIdx,newName);
		for (QListWidgetItem *i : ui->expEnvs->findItems(oldName,Qt::MatchCaseSensitive))
			i->setText(newName);
	});

	//Load state ...
	QFile f("experiments.json");
	if (!f.open(QFile::ReadOnly)) {
		qWarning() << "Could not read experiments!";
		return;
	};

	QJsonObject expData = QJsonDocument::fromJson(f.readAll()).object();
	for (const QJsonValue& v : expData["environments"].toArray())
		envs.addEnvironment(new Environment(v.toObject()));

	for (const QJsonValue& v : expData["sets"] .toArray()) {
		QString name = v.toObject()["name"].toString();
		EnvironmentSet* s = envs.addSet(name);

		for (const QJsonValue& idx : v.toObject()["items"].toArray())
			s->addEnvironment(envs.environments()[idx.toInt()]);

		ui->envSets->addItem(name);
	}

	for (const QJsonValue& v : expData["experiments"].toArray())
		experiments.append(new Experiment(v.toObject(), data, envs));
	updateExperiments();
	ui->environment->setModel(&envs);
	ui->environment->setItemDelegate(new EnvironmentDelegate(ui->environment));
	ui->environment->resizeColumnsToContents();
}