/*
* Copyright (C) 2013 All rights reserved
* VPRO The Netherlands
*/
package dgm.fixtures;
import com.google.common.collect.Iterables;
import com.google.inject.Provider;
import dgm.Degraphmalizr;
import dgm.ID;
import dgm.configuration.Configuration;
import dgm.configuration.ConfigurationMonitor;
import dgm.configuration.IndexConfig;
import dgm.configuration.TypeConfig;
import dgm.trees.Pair;
import org.elasticsearch.client.Client;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.util.HashSet;
import java.util.List;
/**
* User: rico
* Date: 09/04/2013
*/
public class FixturesTestRunner implements ConfigurationMonitor, FixturesRunner
{
protected final Client client;
protected final Provider<Configuration> cfgProvider;
private final Degraphmalizr degraphmalizr;
RedegraphmalizeCommand redegraphmalizeCommand;
VerifyResultDocumentsCommand verifyResultDocumentsCommand;
private static final Logger log = LoggerFactory.getLogger(FixturesDevelopmentRunner.class);
@Inject
public FixturesTestRunner(Client client, Provider<Configuration> cfgProvider, Degraphmalizr degraphmalizr)
{
this.client = client;
this.cfgProvider = cfgProvider;
this.degraphmalizr = degraphmalizr;
redegraphmalizeCommand = new RedegraphmalizeCommand(client, cfgProvider, degraphmalizr);
verifyResultDocumentsCommand = new VerifyResultDocumentsCommand(client, cfgProvider);
}
public void runFixtures()
{
List<ID> ids;
List<String> indexes;
List<Pair<ID, Boolean>> verifyResults;
try
{
ids = redegraphmalizeCommand.execute();
log.info("Degraphmalized {} documents", ids.size());
verifyResults = verifyResultDocumentsCommand.execute();
log.info("Checked {} result documents", verifyResults.size());
int success = 0, failed = 0;
for (Pair<ID, Boolean> result : verifyResults)
{
if (result.b)
{
success++;
} else
{
failed++;
}
}
log.info("Verify results {} good, {} bad ", success, failed);
} catch (Exception e)
{
log.error("Fixture run failed: {} ", e.getMessage());
e.printStackTrace();
}
}
@Override
public void configurationChanged(String change)
{
//when the index that was just reloaded is the source index for one of the index configurations, we reinsert the
//fixtures.
final Configuration cfg = cfgProvider.get();
// for quick lookup of the index name
final HashSet<String> names = new HashSet<String>();
Iterables.addAll(names, cfg.getFixtureConfiguration().getIndexNames());
boolean needRun = false;
for (IndexConfig indexConfig : cfg.indices().values())
for (TypeConfig typeConfig : indexConfig.types().values())
{
if (names.contains(typeConfig.sourceIndex()))
{
needRun = true;
break;
}
}
if (needRun)
try
{
runFixtures();
} catch (Exception e)
{
log.error("Something went wrong inserting the fixtures after a configurationChanged event.", e);
}
}
}