Improved probe features.
This commit is contained in:
parent
614c064a24
commit
a9e817f653
4 changed files with 76 additions and 96 deletions
|
@ -22,6 +22,7 @@ import java.io.File;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -109,7 +110,8 @@ public final class StatoolInfosCLI
|
||||||
message.appendln(" statoolinfos clear <configurationfile> remove property files from conf");
|
message.appendln(" statoolinfos clear <configurationfile> remove property files from conf");
|
||||||
message.appendln(" statoolinfos crawl <configurationfile> crawl all file from conf and input");
|
message.appendln(" statoolinfos crawl <configurationfile> crawl all file from conf and input");
|
||||||
message.appendln(" statoolinfos htmlize <configurationfile> generate web pages from conf");
|
message.appendln(" statoolinfos htmlize <configurationfile> generate web pages from conf");
|
||||||
message.appendln(" statoolinfos probe [<directory>|<configurationfile>] generate metrics files from conf");
|
message.appendln(" statoolinfos probe OPTION [<directory>|<configurationfile>] generate metrics files from conf");
|
||||||
|
message.appendln(" OPTION = [-full|-today|-previousday|-NN] with NN a day count");
|
||||||
message.appendln(" statoolinfos uptime <configurationfile> update uptime journal");
|
message.appendln(" statoolinfos uptime <configurationfile> update uptime journal");
|
||||||
message.appendln();
|
message.appendln();
|
||||||
message.appendln(" statoolinfos format <fileordirectory> format property files in tiny way");
|
message.appendln(" statoolinfos format <fileordirectory> format property files in tiny way");
|
||||||
|
@ -383,13 +385,52 @@ public final class StatoolInfosCLI
|
||||||
|
|
||||||
StatoolInfos.listVisitors(source, filter);
|
StatoolInfos.listVisitors(source, filter);
|
||||||
}
|
}
|
||||||
else if (isMatching(args, "probe", "\\s*.+\\.conf\\s*"))
|
else if (isMatching(args, "probe", "\\S*(-full|-today|-previousday|-\\d+)\\s*", "\\s*.+\\s*"))
|
||||||
{
|
{
|
||||||
File configurationFile = new File(StringUtils.trim(args[1]));
|
File configurationFile = new File(StringUtils.trim(args[2]));
|
||||||
|
|
||||||
|
String filter = StringUtils.trim(args[1]);
|
||||||
|
int dayCountFilter;
|
||||||
|
if (filter.equals("-full"))
|
||||||
|
{
|
||||||
|
dayCountFilter = -1;
|
||||||
|
}
|
||||||
|
else if (filter.equals("-today"))
|
||||||
|
{
|
||||||
|
dayCountFilter = 0;
|
||||||
|
}
|
||||||
|
else if (filter.equals("-previousday"))
|
||||||
|
{
|
||||||
|
dayCountFilter = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dayCountFilter = -1 * NumberUtils.toInt(filter);
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
StatoolInfos.probe(configurationFile);
|
Files inputs = FilesUtils.searchEndingWith(configurationFile, ".conf");
|
||||||
|
if (inputs.isEmpty())
|
||||||
|
{
|
||||||
|
System.out.println("No configuration file found.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (File input : inputs)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.out.println("Probing [" + input + "] with day count filter " + dayCountFilter);
|
||||||
|
StatoolInfos.probe(input, dayCountFilter);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
logger.error("Error with [{}]: {}", input.getAbsoluteFile(), exception.getMessage());
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
|
@ -397,31 +438,6 @@ public final class StatoolInfosCLI
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isMatching(args, "probe", "\\s*.+/\\s*"))
|
|
||||||
{
|
|
||||||
File configurationFile = new File(StringUtils.trim(args[1]));
|
|
||||||
|
|
||||||
if (configurationFile.isDirectory())
|
|
||||||
{
|
|
||||||
Files inputs = FilesUtils.searchEndingWith(configurationFile, ".conf");
|
|
||||||
for (File input : inputs)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
StatoolInfos.probe(input);
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
logger.error("Error with [{}]: {}", input.getAbsoluteFile(), exception.getMessage());
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
System.out.println("Parameter is not a directory.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (isMatching(args, "stat", "ip", "\\s*\\S+\\s*"))
|
else if (isMatching(args, "stat", "ip", "\\s*\\S+\\s*"))
|
||||||
{
|
{
|
||||||
File source = new File(args[2]);
|
File source = new File(args[2]);
|
||||||
|
|
|
@ -376,30 +376,6 @@ public class Configuration extends PathPropertyList
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the probe mode.
|
|
||||||
*
|
|
||||||
* @return the probe mode
|
|
||||||
*/
|
|
||||||
public ProbePeriod getProbeMode()
|
|
||||||
{
|
|
||||||
ProbePeriod result;
|
|
||||||
|
|
||||||
String value = get("conf.probe.mode");
|
|
||||||
|
|
||||||
if (StringUtils.isBlank(value))
|
|
||||||
{
|
|
||||||
result = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = ProbePeriod.valueOf(StringUtils.upperCase(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the probe target.
|
* Gets the probe target.
|
||||||
*
|
*
|
||||||
|
|
|
@ -325,9 +325,9 @@ public class StatoolInfos
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
* Signals that an I/O exception has occurred.
|
* Signals that an I/O exception has occurred.
|
||||||
*/
|
*/
|
||||||
public static void probe(final File configurationFile) throws StatoolInfosException, IOException
|
public static void probe(final File configurationFile, final int dayCountFilter) throws StatoolInfosException, IOException
|
||||||
{
|
{
|
||||||
Prober.probe(configurationFile);
|
Prober.probe(configurationFile, dayCountFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,7 +35,6 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import fr.devinsy.statoolinfos.core.Configuration;
|
import fr.devinsy.statoolinfos.core.Configuration;
|
||||||
import fr.devinsy.statoolinfos.core.Factory;
|
import fr.devinsy.statoolinfos.core.Factory;
|
||||||
import fr.devinsy.statoolinfos.core.ProbePeriod;
|
|
||||||
import fr.devinsy.statoolinfos.core.StatoolInfosException;
|
import fr.devinsy.statoolinfos.core.StatoolInfosException;
|
||||||
import fr.devinsy.statoolinfos.core.StatoolInfosUtils;
|
import fr.devinsy.statoolinfos.core.StatoolInfosUtils;
|
||||||
import fr.devinsy.statoolinfos.metrics.http.HttpAccessLogAnalyzer;
|
import fr.devinsy.statoolinfos.metrics.http.HttpAccessLogAnalyzer;
|
||||||
|
@ -86,18 +85,21 @@ public class Prober
|
||||||
*
|
*
|
||||||
* @param configuration
|
* @param configuration
|
||||||
* the configuration
|
* the configuration
|
||||||
|
* @param dayCountFilter
|
||||||
|
* the day count filter, 0=today, 1=previous day, 7=previous
|
||||||
|
* week…
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
* Signals that an I/O exception has occurred.
|
* Signals that an I/O exception has occurred.
|
||||||
* @throws StatoolInfosException
|
* @throws StatoolInfosException
|
||||||
* the statool infos exception
|
* the statool infos exception
|
||||||
*/
|
*/
|
||||||
public static void probe(final Configuration configuration) throws IOException, StatoolInfosException
|
public static void probe(final Configuration configuration, final int dayCountFilter) throws IOException, StatoolInfosException
|
||||||
{
|
{
|
||||||
StringList types = configuration.getProbeTypes();
|
StringList types = configuration.getProbeTypes();
|
||||||
|
|
||||||
System.out.println("Targets=" + types.toStringWithBrackets());
|
System.out.println("Targets=" + types.toStringWithBrackets());
|
||||||
|
|
||||||
if (configuration.getProbeMode() != null)
|
if (!types.isEmpty())
|
||||||
{
|
{
|
||||||
PathCounters counters = new PathCounters();
|
PathCounters counters = new PathCounters();
|
||||||
|
|
||||||
|
@ -148,21 +150,10 @@ public class Prober
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter.
|
// Filter.
|
||||||
logger.info("== Filtering");
|
logger.info("== Filtering with {}", dayCountFilter);
|
||||||
if (configuration.getProbeMode() == ProbePeriod.TODAY)
|
if (dayCountFilter >= 0)
|
||||||
{
|
{
|
||||||
logger.info("=== TODAY");
|
counters = counters.searchByPeriod(LocalDate.now().minusDays(dayCountFilter), LocalDate.now());
|
||||||
counters = counters.searchByPeriod(LocalDate.now(), LocalDate.now());
|
|
||||||
}
|
|
||||||
else if (configuration.getProbeMode() == ProbePeriod.PREVIOUS_DAY)
|
|
||||||
{
|
|
||||||
logger.info("=== PREVIOUS_DAY");
|
|
||||||
counters = counters.searchByPeriod(LocalDate.now().minusDays(1), LocalDate.now());
|
|
||||||
}
|
|
||||||
else if (configuration.getProbeMode() == ProbePeriod.PREVIOUS_DAYS_7)
|
|
||||||
{
|
|
||||||
logger.info("=== PREVIOUS_WEEK");
|
|
||||||
counters = counters.searchByPeriod(LocalDate.now().minusDays(7), LocalDate.now());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -177,33 +168,29 @@ public class Prober
|
||||||
{
|
{
|
||||||
if (target.exists())
|
if (target.exists())
|
||||||
{
|
{
|
||||||
logger.info("ModeProbe=" + configuration.getProbeMode());
|
// Load.
|
||||||
if (configuration.getProbeMode() != ProbePeriod.FULL)
|
logger.info("== Reading previous target file.");
|
||||||
|
PathCounters previousCounters = readMetrics(target);
|
||||||
|
logger.info("previous size={}", previousCounters.size());
|
||||||
|
|
||||||
|
// Merge.
|
||||||
|
logger.info("== Merging");
|
||||||
|
for (PathCounter counter : counters.values())
|
||||||
{
|
{
|
||||||
// Load.
|
PathCounter previousCounter = previousCounters.get(counter.getPath(), counter.getTimeMark());
|
||||||
logger.info("== Reading previous target file.");
|
if (previousCounter == null)
|
||||||
PathCounters previousCounters = readMetrics(target);
|
|
||||||
logger.info("previous size={}", previousCounters.size());
|
|
||||||
|
|
||||||
// Merge.
|
|
||||||
logger.info("== Merging");
|
|
||||||
for (PathCounter counter : counters.values())
|
|
||||||
{
|
{
|
||||||
PathCounter previousCounter = previousCounters.get(counter.getPath(), counter.getTimeMark());
|
previousCounters.put(counter);
|
||||||
if (previousCounter == null)
|
}
|
||||||
{
|
else
|
||||||
previousCounters.put(counter);
|
{
|
||||||
}
|
previousCounter.setCounter(counter.getCounter());
|
||||||
else
|
|
||||||
{
|
|
||||||
previousCounter.setCounter(counter.getCounter());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
counters = previousCounters;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
counters = previousCounters;
|
||||||
|
|
||||||
//
|
//
|
||||||
logger.info("== Backing previous target file.");
|
logger.info("== Backing previous target file.");
|
||||||
target.renameTo(new File(target.getParentFile(), target.getName() + ".bak"));
|
target.renameTo(new File(target.getParentFile(), target.getName() + ".bak"));
|
||||||
|
@ -216,6 +203,7 @@ public class Prober
|
||||||
logger.info("== Writing.");
|
logger.info("== Writing.");
|
||||||
logger.info("size={}", counters.size());
|
logger.info("size={}", counters.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -226,13 +214,13 @@ public class Prober
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
* @throws StatoolInfosException
|
* @throws StatoolInfosException
|
||||||
*/
|
*/
|
||||||
public static void probe(final File configurationFile) throws StatoolInfosException, IOException
|
public static void probe(final File configurationFile, final int dayCountFilter) throws StatoolInfosException, IOException
|
||||||
{
|
{
|
||||||
logger.info("Probe {}", configurationFile.getAbsolutePath());
|
logger.info("Probe {}", configurationFile.getAbsolutePath());
|
||||||
|
|
||||||
Configuration configuration = Factory.loadConfiguration(configurationFile);
|
Configuration configuration = Factory.loadConfiguration(configurationFile);
|
||||||
|
|
||||||
probe(configuration);
|
probe(configuration, dayCountFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue